# 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/