Hydroponics tray processing is a massive chunk of machinery processing
for no good reason, I have a sneaking suspicion that this is due to proc
overhead on get_trait, as process can call it upwards of 30 times per
tick per tray.
Realistically most of the things that are traits should instead be
variables, but that's a refactor for someone with more time.
### What does this achieve?
This overhauls hydroponics to integrate atmospherics mechanics more
heavily, with the hope of establishing the foundations of much more
significant mechanical depth to what has been a very shallow job for a
very long time.
Currently, this is limited to the preferences and tolerances system -
hydroponics is now comprised of five 'reservoirs' of segmented portions
of the pipe system connected to trays, with a gas heater and cooler to
change temperature across the entire system, and you can cut off each
reservoir with valves to separate it from the rest and maintain its
current temperature.
Five tiers, each with a trait, have been implemented for the different
heat ideals of different plants. Plants from Adhomai and Moghes are the
most environmentally extreme, and cannot be grown outside of drastically
low and high temperatures respectively, limiting them to hydroponics
proper, whereas colder and warmer terrestrial plants can be grown at
room temperature but will grow much slower than if they were within
their preferences. **This means there will be plants that outright
cannot be grown in the garden.**
With this, hydroponics becomes an atmos puzzle. If you need to grow
nothing but mushrooms you'll probably send every tray cold, but if you
need a diversity of different temperature ranges you'll have to
fine-tune your setup and routine to have everything within their
preferences. Once you're done growing mushrooms off one reservoir, you
may turn the heat in it up so you can grow citrus, etc etc.
This also solves several bugs and makes a lot of QoL changes, the full
changelog will list everything.
<img width="608" height="320" alt="image"
src="https://github.com/user-attachments/assets/12e53224-d9be-4e69-9c48-6185d3303a14"
/>
<img width="384" height="608" alt="image"
src="https://github.com/user-attachments/assets/1a0c2b0c-8ad6-4f5c-b992-2e78035ab52d"
/>
<img width="640" height="512" alt="image"
src="https://github.com/user-attachments/assets/1cf837d1-3db5-440a-a465-071841febaea"
/>
### What about the mapping?
Atmos has been integrated into every hydroponics tray in the mapping
changes, rather than only on D1 like at present, to support the new
mechanics. I've moved as much stuff up to D2 as I could fit, in the
interest of getting players to the more visible and socially viable spot
rather than hiding in their basement. D1 is now exclusively intended as
a storage area, laboratory, and now has an expanded Hazardous Specimens
unit.
### To-do before review
- [x] Ensure that chefs can still do alien-specific menus without a
hydroponicist, now that they can't necessarily grow their stuff in the
garden - loadout produce box, maybe?
- [x] Remap xenobotany
- [x] Review whether every alien crop can still grow on its respective
in-game exoplanet - Adhomai might be okay? (Adhomai is essentially fine,
Moghes will need work before we go back into the sector)
- [x] Make sure the yield_mod interactions aren't explosive.
### Known issues
1. Yes, the examine on hydroponics trays is huge. In the long-term, IMO
this should probably be a TGUI.
2. The TGUI on seed storage units is clunky, this is also on the to-do
list for the future.
3. The logic for calculating growth is bad, it's very RNG-skewed.
Another thing for later.
4. Atmos mechanics like these can be pretty opaque to players, so this
will certainly require a wiki update shortly after merge describing
exactly what steps you should take to operate the new atmos equipment.
This is sorta bulky on the changes since it includes a lot of shuffled
documentation, so I'll try to thoroughly summarise here.
- Introduces 'preferential' temperature and light values to plants. This
means that, while a plant is _within_ 5K and 2 lumens of their ideal
heat and ideal light, they will grow faster than otherwise. In the
current implementation, the base growth is a 15% chance of age being
increased, plus another 15% if you're within preferential temps, and
another 5% if within preferential lumens for a maximum of 35%. This is
intended to incentivise engaging with temperature mechanics to grow
plants with unusual requirements.
- This is different to the existing tolerance values, which instead
check whether the plant is _outside_ of them - if they are, it damages
them. Tolerances cause the plant to die if they're too far from their
ideals, preferences cause the plant to grow faster if they're very close
to their ideals. The range of preferences should always be inside
tolerances.
- To work better with this, the ideals of a few kinds of plant have been
tweaked. Mushrooms, Adhomian plants, and molluscs will all **not** be in
their preferences at room temperature - they will need to be cooled,
which can currently be done in D1 hydroponics. A few warmer plants, such
as sugarcane, will need to be warmed up to reach their preferences.
- None of these will go outside of their tolerances at room temperature
- they won't die, they'll just grow slower.
- Most plants will be within all their preferences without any action by
the gardener.
There's also a few assorted QoL changes to hydrotrays, see the
changelog.
---------
Signed-off-by: hazelrat <83198434+hazelrat@users.noreply.github.com>
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
Seed code DMdoc'ed and code added to allow for custom descriptions and
extended descriptions for produce.
Adhomai plants given descriptions as proof of concept (maybe)
- [x] Foundation code
- [x] Assassinate Almrah Harrlala
- [x] Adhomai Plants descriptions
---------
Co-authored-by: Ben10083 <Ben10083@users.noreply.github.com>
Refactored portals, improved handling.
Telescience console can now target overmap zlevels, provided deep scan
is not enabled and the contact is completely scanned.
Telescience portals now properly delete when the timer expires.
Greatly increased power usage for the telescience portals, especially if
aiming outside targets.
Refactored telescience console backend.
Added various DMDocs.
Our SSOverlays system is outdated, and is likely the cause of many of
the issues seen in #18895. It has also been linked to a massive server
performance decrease.
This brings an updated system from Baystation, hopefully with speed
increases.
Should be testmerged, ideally with #18895.
---------
Co-authored-by: Cody Brittain <cbrittain10@live.com>
* SDQL2 update
* fix that verb
* cl
* fix that
* toworld
* this is pointless
* update info
* siiiiick..
* vv edit update
* fix that
* fix editing vars
* fix VV
* Port the /TG/ globals controller.
* part 1
* part 2
* oops
* part 3
* Hollow Purple
* sadas
* bsbsdb
* muda na agaki ta
* ids 1-15
* 16-31
* 41-75
* bring me back to how things used to be before i lost it all
* the strength of mayhem
* final touches
* cl
* protect some vars
* update sdql2 to use glob
* stuff?
* forgot that is not defined there
* whoops
* observ
* but it never gets better
* a
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
* Initial commit of new drugs
Start on caromeg and oracle
Further work on caromeg
Fix nicotine and caromeg
Begin populating map
Designer cocaine effects
Weaken heroin, Joy now causes genetic damage
Added an artificial alternative to morphine, tramarine, that can be used in its place.
Nerf new opioids, fix tramaline recipe
Added special mentholated adhomian cigarettes, for NKA cigarettes
General fixes
Fix recipe pathing
Add coca leaves, cocaine recipes, and coca drinks
Update Chemistry-Reagents-Medicine.dm
Null name for abstract drug class
Remove abstract_class from reagents (shouldn't be used there)
* Oracle sprites by Wezzy
* .
* Begin resolving issues from code review
* Remove all per-player data from drug singletons
* Resolve Arrow's code review
* Apply suggestions from code review
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
Update code/modules/hydroponics/seed_datums/smokables.dm
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
* Removed coca plants from the standard garden and hydroponics vendors (they remain as contraband and in the xenobotany garden)
* Fix merge conflict errors caused by snack PR
---------
Co-authored-by: SleepyGemmy <99297919+SleepyGemmy@users.noreply.github.com>
Co-authored-by: Cody Brittain <cbrittain10@live.com>
* Update the codebase to 515.
* edit that
* WHOOPS
* maor
* maybe works
* libcall and shit
* do that too
* remove that
* auxtools isnt updated so get rid of it
* actually remove auxtools lol
Co-authored-by: Matt Atlas <liermattia@gmail.com>
As a continuation of #9389
As a bonus, any drugs that mentioned their IRL counterpart in their description now describe their predecessor as ancient, and the new ones as modern. The biggest difference here is just the Antihistamine which was given a full new name. They're similar enough that they'll be recognized (most of them) but different enough for us to call our own and not care what the real medicines are/do since these are our sci-fantasy versions just inspired by them.
It was a mistake to use real life chemicals on the grounds of "realism", especially when the chemical doesn't actually act realistically to how it does in real life. With the removal of the Inaprovaline medication as well, we can return the name to Norepinephrine, which was originally called Inaprovaline anyway.
Converts reagents to use typepaths instead of IDs.
Centralises reagent spawning in a lot of places to use reagents_to_add instead of a variety of custom methods or initialise overrides.
This PR will lead us towards the Promised Day, for in its wake there shall be much celebration and ecstasy as this world becomes a world suitable for developer hegemony. The first strike is thusly;
All << is converted into to_chat().
changes:
Bidirectional source Z-lights have been reverted to single-direction in favor of corner z-bleed.
Z-mimic turfs will now average their light level with their mimiced turf to better approximate Z-lighting.
Openspaces have been made significantly less dark.
Corners no longer incorrectly always take the instant update pathway.
MultiZ helpers are now macros.
More things now properly respect area dynamic lighting settings.
Implements Black K'ois
Implements K'ois Mycosis
Implements Black K'ois Mycosis
Buffs K'ois' healing properties for Vaurca
Vaurca can now control where they bite
changes:
Organs now use Initialize().
The observe message now shows the configured respawn delay instead of always 30 minutes.
Seed datums no longer have a timer in New().
External organs no longer have a timer in New()/Initialize()
Converted some spawns in organs to timers.
Floor init no longer breaks to plating first for mapped in tiles.
Added the INITIALIZE_IMMEDIATE macro to make Initialize() not wait for SSatoms init.
Mannequins now use INITIALIZE_IMMEDIATE instead of a custom-defined New().
Mannequins (from get_mannequin) now delete themselves if unused for 5 minutes or longer.
* Replace SSingulo with SScalamity; processing cleanup
- SScalamity now handles blobs as well as singularity-types.
- Processing subtypes have been simplified to not require a stop_processing definition.
* this is probably important
* Remove cascade disabling SSgarbage
* Fixed a bug where dust() did not qdel the target mob
* Misc fixes
* Fix decals surviving break-to-plating
* Subsystem flag tweaks
* Apparently subsystems are new'd before config is.
* Fix paper icons
* Speculative fix for insane lag
* Better machinery stat
* Make organs not use SSoverlay
* Misc bugfixes & tweaks
* Nightmode fixes
* Changelog for SMC
* Port /tg/'s improved MC crash handling
* Add some more SS Recover() procs
* supply_controller -> SScargo
* More New() -> Initialize()
* pAI and robot construction overlays
* Fix cargo unit tests
* Merge the DMM Suite's atom/New() into atoms_init
* Lighting pre-baking
* Lighting initialization logging
* Fix some bad SS init orders
* Fix SSlighting logging; rename Processes to MC
* Speculative fix for insane GC lag
* Prebaked openturf/icon_smooth & fix lighting prebake
* SS init status; SSatoms LATEQDEL
* Fix bug with MC init stat panel
* Fix parallax
* Misc
* Ignore SS_NO_DISPLAY during init
* apparently this is important
* REEEEEE
* Image GC fixes; broadcaster radio-new sanity
* RCON Cleanup
* Move pAI recruiter into subsystem
* Move global solars list into sun subsystem
* Make chickens not use a global
* Demote SSdisposals to SS_BACKGROUND; garbage-debug cleanup
* Speed up space init a little
* Fix bad timer flags on floor drying
* Subsystem panic-restart verb for mins
* Explosion speedup
* Minor subsystem & MC logging tweaks
* SSopenturf improvements
* Make pipenet actually initialize (whoops)
* Minor tweaks
* Implement lighting rounding
* comments are hard okay
* Minor lattice tweaks
* Fix some timer issues & better closet init
* Timer sanity
* Request console tweaks + Storage init sanity
* Minor SSmachiner RCON improvements
* Further reduce world-start timer count
* Standardize subsystem logging
* Garbage hard delete profiling from /tg/
* Timer hang detection & recovery
* Log machines that sleep in process() and fuck up SSmachinery
* Fix an issue with external airlocks sleeping in process()
* Failsafe logging
* Minor tweaks
* Revert "Request console tweaks + Storage init sanity"
This reverts commit 98d3579e35.
* Re-implement RC changes
* Fix SQL FT saving
* Fix SSmachinery sleep in disposals
* Minor SS tweaks
* Paper fixes
* Blood drying fixes
* Merge gameticker and SSticker
* Minor global list init cleanup
* Lagcheck biogenerator & bags
* Tweak SScargo init order; RIG Initialize()
* Caching tweaks
* Remove rogue comma
* Initialize fixes
* Lighting destroy cleanup
* Fix emagging airlocks
* Initial SSicon implementation
* Tweaks & Fixes
* Fire + Air alarm queued icon updates
* Overlays + Queued icon cleanup
* Runtime & background fixes
* Kill some meaningless set statements
* Kill some image qdels
* Bump up lighting rounding val
* Fix adv. scanner destroy runtimes
* Remove unneeded icon update limiting
* Move icon smoothing into helpers
* Show a warning if DM 510 compiles without memory leak hack enabled
* Re-organize subsystems & MC defines a little
* Airlock SFX
* Log of Changes
* Make SSicon_update disable itself when not doing anything
* Fix respawn verb runtime when used early in server-init
* Add more information to MC's stat_entry()
* Replace direct refernces to gcDestroyed with QDEL* macros
* plant_controller -> SSplants
* More plant tweaks
* Add more humor to changelog
* Move parallax globals into SSparallax
* Lighting responsiveness tweaks
* Fix parallax init order & better MC init panel stat
* Make mobs GC
* More overlays + Remove intercom spawn()
* SSfast_process; make pinpointers not use spawn-recursion to process
Also made the SM Cascade beach process with SSprocessing instead of a spawn loop.
* Update changelog
* Mob GC tweaks
* Del() cleanup
* Fix insomniac ZAS connection edges
* Minor pAI cleanup
* Convert more things to SSoverlay; fix duplicated overlay in field gens
* SM Bluespace turf tweaks
* Update SSgarbage debug globals list
* Human-type qdel tweaks
* Subsystem suspension; stat_entry improvements
* SQL Statistics cleanup
* Fix runtimes with ambrosia
* More disable() -> suspend(); fix nightmode again
* Human qdel fix; minor tweaks
* Update turbolift to work with StonedMC
* Make lifts use timers instead of a subsystem
* Make SSassets start earlier
* Convert the radio controller into a subsystem
* Fix some missing CHECK_TICKs in asteroid generation
* MC stat tweaks; make shouldnt_see a typecache
* Kill some redundant debug-controller entries
* radio_controller -> SSradio
* Better SSgarbage hard-del logging from /tg/ upstream
* Logging tweaks + GELF
* Misc client caching improvements
* Slime SSoverlay
* Oven icon fixes
* Implant fixes
- Death implants will no longer spam Common on death of user.
- Death implants should handle a deleted user better.
* Holder tweaks + Welding tool Initialize()
* Fix some bad subsystem logging
* Fix suit cooling units spawning without cells
* Starlight tweaks
* Gibber infinite gib fix
* More SSoverlay stuff
* Make crates use CUT_OVERLAY_IN
* Make SSarrivals suspend instead of disable
* Make openturf use split/phased tick checks
* Speculative fix for unwet timer runtimes
* Blood overlay tweaks/fixes
* Update crusher to play nice with SMC + SSoverlay
* Openturf improvements and fixes
* Minor turbolift tweaks
* Lighting performance improvements + ChangeTurf tweaks
* this is probably important
* Fix wall weld noises on changeturf
* More ChangeTurf tweaks
* Explosion tweaks
* Pre-game lobby tweaks
* Openturf tweaks
* Prevent admins from starting the game before init finishes
* Fix Travis
* Kill an unused var
* Fix ChangeTurf runtimes on openturfs
* Fixes
* Browser datum fixes, asset caching
* Update changelog
* Changelog
* Lobby tweaks
* Ticker tweaks; kill ticker var
* Further lobby tweaks
* Cascade tweaks
* air_master -> SSair
* Reduce overhead from radio autosay
* alarm_manager -> SSalarm
* bomb_processor -> SSexplosives
* corp_regs -> SSlaw
* ZAS overlay fixes
* Small wall icon optimization
* Fix effects master
* Assembly tweaks
* Megavend fixes
* Shuttle fixes
* Camera alert performance improvements
* Fix some world.log spam from lighting overlays
* Fix some Initialize() procs
* Openspace responsiveness tweaks
* Make HE pipes animate through openturfs
* Kill a spawn