# Dev Roadmap
## General//Intro
- More or less the Citadel Development Bucket List for the next year or so
- If this was a true roadmap it'd have a chronological order but it doesn't, however, assume it's basically as the three most important things (as our goals for it will involve *every* department):
- overmaps
- planetgen
- science
- Document lists some short and long term projects being worked on, as well as nice to haves etc etc.
- If you want to contribute to any of these, you're more than free to.
- If you have any ideas for departments you want listed here, do tell us.
- This includes subdocuments.
## Current WIPs
- rigsuits
- overmaps
- atmospherics
- science system - xenoarcheology
## Next Big Thing
- An attempt to give the server dynamic PvE content to complement the already existing secret/extended roundtypes.
### [Overmaps](/6yv10eAsRKGU6is-5hmNMg)
- Modular virtual map system backend
- Frontend involves space exploration.
- Set upon a new ship map when the overmaps themselves are done.
- Optimally using javascript/tgui for arbitrary maps, BYOND map fallback if not
- Maps are fully procedurally generated using seeds. The goal is to have round time limited by how long the station/ship wants to keep operating/can keep operating in the face of adversity, rather than by amount of content.
- WIP by `silicons`
### Planets
- Overmap-generated planets - procedurally generated, loaded on request.
- Optimal planet size is 128x128 or 256x256 - small ones for quick trips, and large, potentially multiple z-levels linked together planets for long (30-45 minutes) excursions.
- Travel to planets using ships once overmap backend is done and shuttles are rewritten
- Arbitrary landing locations on planets - no hardcoded docks.
### ~~[Dynamic Worlds - Persistence, Chunkloading](/Nj5scRYCQmGllKNtln7vOw)~~
- Theoretical plans allowing for dynamic loading of near-infinite levels with persistence in BYOND
- Likely infeasible for the time being. I haven't particularly given up on this yet, but, making it work would likely require hard adherence to 128x128 zlevels and a near single focus for map development, which, is not feasible at the time. Also would require very, very modular overmaps support.
### Unification
- If many of these systems are written correctly, their backends, and much of their systems would be usable across both Citadel servers
- The ultimate goal is to write modular, cross-compatible code.
- The only major differences between Citadel Main and Citadel RP are
- Lore
- Roleplaying standards and Policy
- Action levels
- Codewise: The frontends for Medical, Combat, Chemistry, Cooking, Botany
- Icons
- Everything are considered frontend because it's not hard to modularize.
- Maintenance cost is greatly reduced if we're able to easily sync backend and systems improvements across both servers.
- The end goal, **especially for species icons and similar**, is to make syncing a literal copypaste operation.
## By Area/Department
### Science
#### [Science System](/TOw18lhATIqBSvs13C6ljA)
- Read attached draft
#### R&D
- Rename to Fabrication
- See Science System
#### Xenobiology
- Port Cytology/vatgrowing from /tg/
- Port RP server slime AI and abilities.
#### [Xenoarch](/oEwDvoQCTciSQ0D6wa4XNg)
- Read atached draft
#### [Guncrafting](/syWpWarmSUumS6bgOaQwaA)
- Read attached draft
#### [Catalogue System](/6Eex7UhGQQ6IdHT01Lpy2g)
- Read attached draft
#### Mecha
- For now, port Polaris mecha
- Weapon, armor, utility, etc slots per mech
- Make mechs the heavily armored, slow, and less versatile alternatives to rigsuits
#### [Rigsuits](/c57MB0tTRlGRhFqhIjhNIQ)
- WIP by `silicons`
- Read attached draft
#### Telescience
- https://github.com/Occulus-Server/Occulus-Eris/pull/588
- **Yes, we are readding telescience.**
#### Cybernetics
- Wiremod port will contain BCIs - integrate them into cybernetics
- CDDA-like CBM slot + power system
- Having a few basic cybernetics like toolsets won't require much power
- Heavily augmented people, and **synthetic species**, would require power - charge from APCs, bioreactors from food, etc
#### [Nanites](/kdPuc9NnRaOq1VUhnutvkQ)
- Read attached draft
### Mining
- Low priority - mining shouldn't be touched until overmaps and planetary exploration is done
- When that is done, start on mineral cost rebalancing
#### Beltmining/Planetary Exploration
- When overmaps is done, add support for mining using asteroid belt PoIs, which will mostly be click-style KA mining, as well as planetary mining, supporting both click mining and baystation-style drilling (intended to allow people on an excursion to do other stuff while it's drilling)
#### Drills
- For when planets are done, add support for underground ore perlin generation and blast mining with bombs and mining drills
- One tile, easy setup since this is Main
### Med-Sci
#### Genetics
- /tg/oonetics (current) is pretty much the most we can go right now barring somehow better ideas
- Remove thermals, x-ray, replace with psionic boosters
#### Psionics
- TBD
- tl;dr system allowing for psionic abilities
- needs heavy balancing for usage on main
- telekinesis would be moved to this with varying powers, etc
- no design draft exists or will exist for a while due to how problematic powergaming with this would be
### Medbay
- Medical is in a pretty good state right now
- Health system refactor (see long term refactors) for synthetics
- Port stasis beds already
#### Chemistry
- Port latest chemistry backend
#### [Virology](/Adb6OKaOS3-ijOT8mrDo6w)
- See attached document
#### Surgery
- Getting rid of drapes requirement
- Allowing arbitrary surgery, a la bay/brainmed (limbs have states for "open", "sawed", etc, and surgery steps require that to continue)
- Since we never get wiki maintainers, steps to proceed should be hooked into the game itself on examine.
### Security
- Outside of plans for combat and new weapons/items, this is mostly in a good spot, as security is a reactive department that engages with the rest of the crew for their interaction.
### Cargo
#### Stock Market
- Readd stock market.
#### Exports
- These are in a good spot
#### Bounties
- These are in a good spot
#### **Factions** - extremely long term
- Allow orders from other TSCs (trans-stellar corporations)
- Different items and costs per TSC
- Each TSC having a speciality that costs more but is vastly improved than others
- Integration with Overmaps for passing trade ships?
### Service
#### Bar
- No current plans
#### Kitchen
- No current plans
#### Botany
- No current plans
- Long-term can look into integration of modular plants from Nebula code in a way that preserves current botany genemodding abilities
### Engineering
#### [Networks](/oc3K6IFoRie0veXJByPlhQ)
- Long term plans for computer networks
- Read attached draft
#### Atmospherics
- Multiple atmospherics backend changes being done.
- WIP by `putnam` and `silicons`
#### Powernets
- Refactor powernets to allow layers (1 to 5, much like atmos)
- Maybe have better datum handling to allow attaching to more machinery
- Allowing energy providers to directly connect to machinery without an APC?
#### Power Grid
- Implement grid breakers and the RCON system
- Substations for departments once thermaldynamic consistency is relatively established
- May have powersinks also drain from the input end of a SMES, so they aren't useless after this
- Given that with all bypasses off, you'd only notice when every SMES is dry, this would ironically make them more powerful in some cases.
### Command
- Not much to do here. They'll naturally have more content as other areas of the code advance, and overmaps being completed would given the captain/acting captain something to do even more.
### Silicons
#### AI
- Outside of a proper information technology/digital network system being implemented, not much to do here.
#### Cyborgs
- Nothing much to be done here unless Blackmajor does their cyborg rework idea.
### Misc
- Blacksmithing rework - using machinery/tooling availability instead of skills.
- Grinding skills is pretty awful
- Make blacksmithed weapons relatively-balanced to stuff you'd acquire otherwise including "normal" table/slapcrafted improvised weapons taking the same amount of effort to get, but also useful.
## Planned Refactors
- Contains things that are being developed or needs to be developed in house to sustain future feature development
### [Synthetic Species Design Document](/5CTM_2QDTq-05y3ORw1FIA)
- Read draft
### Guns
- Lazy init ballistic magazines
- Change eguns to /datum/firemode
- Make guns chamber/consume_next_projectile/etc generic for more guns being supported
- In general, make all guns generic and require as little proc overrides as possible between "similar" guns, while making different guns **only require proc overrides within speciic hook-like procs** like "consume_next_projectile()", "process_chamber()", etc, not "high level" procs like "attempt_fire()".
- /obj/item/gun/magnetic for hybrid energy-ballistic weapons as a base
- Change beam rifles into a long range sniper without hitscan but also without an aiming beam as a proof of concept.
- Code in that list of synthetik gun ideas to make stuff a bit more fun when this is done.
### **Clothing Accessories System**
- a la Baystation/RP server - a system allowing for arbitrary accessories to be attached to clothing of all kinds. e.g. cloaks, ties, holsters, medals, etc.
- While functional accessory (read: powergaming gear) like webbing vests and holsters will be ported, they'll not be obtainable in game unless we have a very detailed discussion about the balance implications of even more storage-creep.
### Character Setup
- Everything needs to be datumized.
- Savefile serialization/deserialization needs to be datumized so we can switch to SQL later if needed
- /datum/preferences_category, /datum/preferences_item
- Arbitary slot number support (list slots at the left of the screen instead of top)
### Physiology
- /datum/physiology_modifier
- Managed physilogy modifications to make changing it less godawful.
- Copy movespeed modifiers.
### Sprite Accessories/Species Backend/Rendering - oh god oh fuck
- **All** sprite accessories need to be generalized to a key -> value system, rather than the current mam_ears, human_ears, lizard_ears, etc.
- E.g. "ears" = "Cat"
### SPECIES
- /datum/species subtypes should **only** exist for **mechanical differences** like **health systems**
- Subtypes of **that**, e.g. /datum/species/human/lizard, /datum/species/human/felinid (**YES, this is the level of organization we require**) can contain var overrides for name, resistances, small stuff
- Stuff like cats chasing laser pointers can be delegated to /datum/element/species_modifier and whatnot
- This even includes icon base
- For things like "this species can have this part", just add lists of presets for character setup
- And then proceed to have an override option that disables the presets and lets you do whatever you want (within reason)
### **Health System**
- Overhead/feasibility of /datum/health_system/organic, /datum/health_system/synthetic, etc
- For use with species
- Composition over inheritance.
- If possible, stuff like wounds would be tied into this
- Stretch goal: Unified mobcode giving all /living mobs health system datums, and allowing both servers to use the same mob backend
### Inventory
- *This is probably impossible to pull off right.*
- Inventory slots being modular for each species
- Certain things allowing for more inventory slots
### **Limbs**, Organs
- Make organs not all require a single-slot system
- CDDA CBM-like system for cybernetics
- Integration with health system
### **Turfs**
- Investigate if having a mix of typepath and /datum/flooring would be better than bare typepath
- Probably not, but still.
- Composition over inheritance - station plating having specific properties while flooring has their own properties
- Plating over planet turfs not replacing outdoors
- Multiz backend
- Add the ability to alt-click to place rods/tiles on the level above, if a supporting floor/wall exists
- Perhaps add a zflag that makes roofing required even if no floor is above, so you can build roofing to make a turf non planetary atmos above, or plate the floor below without making it indoors
- Get rid of area assumptions on which areas are indoors
- **Add good UI for seeing unroofed tiles**
- A toggle that makes all unroofed tiles on a zlevel display?
- Only displaying unroofed tiles if they're in an indoor area otherwise?
- None of that baystation meson vision stupidity - IT SHOULD NOT TAKE MESONS TO NOTICE THE ROOF IS MISSING.
### **Sprite Accessories, Body Markings**
- Add color modes - COLOR_MODE_MATRIX (current default, RGB color matrix allows for 3 colors per part at a cost of lower quality), COLOR_MODE_SINGLE, COLOR_MODE_DOUBLE, COLOR_MODE_TRIPLE, for "use matrix to recolor one icon", "use primary/secondary/tertiary colors to recolor 1-3 overlays". Allows for higher quality sprites without disallowing matrix sprites.
- Secondary flag of USE_PRIMARY | USE_SECONDARY | USE_TERTIARY | USE_SKINTONE for what colors to use for the single/double/triple modes.
- Teak's advanced coloring system will obviously allow for overrides to not use the main 3 colors/skintones
- Body appearances should be datumized if possible
- List of sprite accessories, list of body markings by part, and a species icon base
- Use this to render mobs
- Render process should be body appearance --> items --> effects (like cold resistance's glow)
- If possible, datumize the **entire** process, with /datum/appearance/human/body into /datum/appearance/human/items or something (path inheritance undecided, given that simplemobs also could benefit from the system. Maybe /datum/appearance/body, /datum/appearance/inventory, /datum/appearance/effects with metadata on each, and a /datum/appearance/full that combines the three)
- Rendering pulls from the appearance and only re-renders changed things
- Allows for things like chameleon projectors to copy body too
- **Allows for changeling to be /datum/species/changeling, and just "appearance clone" people aroud them**
### Materials
- [Material Synthesis](/czASLc_KTzmwgdmp9QXDnA)
### Jobs/Departments
- Datumize jobs/departments
- Each job has an unique name
- Each job has **alt job titles**
- Add support for limited job spawns per map/per map job lists within the JSON
### Map stuff
- Add support for different spawnpoints
### [Planets](/cfu5XnIcSj643Cu54412cA)
- Read draft
### EMPs, Emags
- Change emags to an emag_act and emag_disrupt
- Former on harm intent, uses charges, "classic" extremely powerful emag behavior
- Latter on other intents, as well as with other hacktool-like items. Does things like temporarily open a door few a seconds, cause confusion on a cyborg, etc. Has a light-moderate cooldown to prevent spam.
- Change emps to a dampenable-system
- explosion2/wave explosion code?
- emp_burst, on_emp_burst for emp pulses
- Custom falloff, range, power
- em_disrupt, on_em_disrupt, or a similar system
- "light" disruption fields
- Unsure if this is possible - maintaining AoE effects beyond 2-3 tiles radius is hilariously expensive
- Maybe make this the "old", cheaper EMPs - more common but not as destructive
- certain mobs emitting weak disruption fields, ions disrupting things they pass and only bursting on a hit target, etc
### [Combat #8 - Hostage Taking, Gun Aiming, Armor, Wounds, Etc](/Udw9hS8NR2OAaSTDev8vJA)
## Feature Ports
- Contains important things that players will likely enjoy.
- Wiremod - /tg/
- Stasis beds - /tg/
- Experisci - /tg/
- **Dynamic** - /tg/
- Cytology/Vatgrowing - /tg/
- **Xenobio slime behaviors and AI** - Citadel RP
## Backend Ports
- Contains important things that we'll need sooner or later to sustain codebase quality and maintenance.
- Projectile system - /tg/
- pass_flags handling - /tg/ (ties into projectile system)
- mobility flags refactor - /tg/
- New fermichem backend - /tg/ (not cobbychem, just the backend and support)
- Advanced Greyscale Sprite Generation - /tg/
- Anything multiz related in the last few years - /tg/
- Plumbing updates - /tg/
- Look into NeertiAI (mob AI) from polaris.
- **Overlay Lighting** - /tg/
- **update_appearance()** - /tg/ (We don't need full conversion on the first PR, just the system ported and some thiings converted over)
- https://github.com/tgstation/tgstation/pull/59780 - reach refactor - /tg/