# Summary
This PR has the goal of adding a base framework for tracking, saving and
otherwise managing persistent data between rounds, written from scratch.
Persistent data can be anything - Most expectedly noticeboards, dirt,
papers, etc.
_Technical details about the PR below are subject to change._
## Estimated scope
The first iteration of the persistence framework should include the
functioning subsystem and the first implementation of a persistent type
using said subsystem.
- [x] Prepare database for persistent data
- [x] Add new features to `/obj/`
- [x] Logic to get and load persistent data into objects for the
subsystem
- [x] Internal logic for tracking and other
- [x] Implement subsystem
- [x] Basics, files, integration of subsystem
- [x] Database queries for different operations
- [x] Methods for registering and de-registering object tracking for
`/obj`
- [x] Round start logic
- [x] Round end logic
- [x] Implement first persistent type: Papers on notice boards
- [ ] Code review
- [x] Scope validation
- [x] Testing
- [x] Full changelog
- Merge
- [ ] Setup logging config for new subsystem
- [x] Documentation for developers ([How to add new persistent
types](https://github.com/Aurorastation/Aurora.3/wiki/Persistence))
## Inner workings
The new persistence subsystem has the following concept:
At round start the subsystem reads existing data from the database and
creates objects for them.
During the round objects can be added to the tracking using a register
function (or removed by a de-register function).
At round end the subsystem goes over all it's actively tracked objects:
Create new objects (that don't have a persistent ID from the database),
update objects that changed during the round and expire objects that are
no longer tracked.
The objects in questions can register themselves, de-register themselves
and decide themselves what content should be stored and handle how to
set themselves up during the subsystems init phase.
## Information on the new table
`id` - database generated ID for tracking persistent objects over
multiple rounds, objects without an ID are considered new and created
during the round.
`author_ckey` - With the first implementation unused, but expected to be
required in the future to allow any staff/moderation on persistent data.
Nullable as persistent data also can be things like decals without an
actual owner.
`type` - Type of persistent data used for creating objects at round
start.
`created_at` - Statistical values.
`expire_at` - Used for cleaning the database and setting limits for
persistent data types. It's optional and allows permanent persistent
data (command notice boards?).
`content` - JSON formatted data containing the actual properties of an
individual tracked object (e.g. what's written on a paper, what's its
title).
`x`, `y`, `z` - Coordinates taken and given from/to the object during
save/load. Those can be null for future purposes.
## The goal on how to add new persistent data types
`/obj` received two new methods which need to be overriden in the to-be
added new persistent type:
`persistence_get_content()` and `persistence_apply_content(content, x,
y, z)`.
The first method has the responsibility to provide all custom content of
a new type to the subsystem in the form of an associated list (`["title"
= "Hello, World!", "value" = 1337].
What does that mean?
In the example of a piece of paper, the method needs to put the papers
title and text content into a an associated list, that list will be
saved by the persistence subsystem.
The second method has the responsibility to apply the previously saved
content when persistent data is initialized at the start of the round:
The associated list needs to be read back and applied to the paper,
additionally coordinates are provided for the object that have been
taken during saving. Note that the coordinates might be null and could
be ignored during setup.
During the round, when a new object is created, like a paper, you need
to call the subsystem and register a track:
`SSpersistence.register_track(your_object_to_track, ckey (optional)`.
The subsystem will be using the methods above when the round ends and
saves the object - and loads it at the start of the round using the
second method. The ckey needs to be given for all persistent that
contains user generated content, e.g. papers.
In case a persistent object gets removed, you need to call
`SSpersistence.deregister_track(your_tracked_object)`. At the end of the
round the object will be removed from the storage.
`/obj` contains the variable (along some other technical vars)
`persistance_initial_expiration_time_days`, which has a default value of
30 days, but can be safely overriden on a per-type basis. This value (in
days) will be used for the persistent data entry expiration date when a
new object of said type is stored in the database.
## PR description changelog
- Added *The goal on how to add new persistent data types*.
- Updates *Estimated scope* format.
- Updates *Inner workings*.
- Final iteration.
*(Grammer and formatting not tracked manually)*
This PR significantly rebalances the construction costs and times of the
"Mech" side of the machine shop in order to break up the "Light mech
hoverthruster meta" that has been severely prevalent. In general steel
usage for many things is going down, in exchange for using aluminium by
the same amount. Lead is being introduced as the material to use for
"Anything that gives you radiation protection", and most hardsuits and
some mech armors now call for its use.
The biggest thing to be rebalanced are the Hoverthrusters. Imagine my
surprise when I discover that not only were the hoverthrusters insanely
cheap, they also had the lowest power draw of any mech chassis in the
game, which meant that if you used them with the self-recharging power
cells, you essentially had infinite power and full flight.
Hoverthrusters of both kinds are being changed to require rare
materials. So I significantly increased the power draw for
hoverthrusters(For god's sake they let the mech fly at high speed,
they're the exact opposite of low power). As a small concession, the
health for the light thrusters is increased slightly.
Finally, to help encourage more experimenting with lesser-used mech
chassis, I removed the tech requirements for the quadruped chassis,
allowing Machinists to experiment with trying out different, "Less
ideal" mech designs.
I'll be honest I can't test this because I'm not on windows but I am 90%
sure this fixes#21097 and fixes#21153
The issue was caused by some refactoring of liver code in #21013 that
wasn't accounted for here
---------
Co-authored-by: Cory <cory@mejtra>
Currently, only Preferences Verbs use subcategories. As a result, all
other Verb tabs are only organized alphabetically, meaning that a single
mechanic (ie. languages) has its governing Verbs scattered rather than
grouped together.
Verb organization by Tab handles broad organization - IC, OOC, Objects,
etc.- highly effectively but requires the user to click-navigate to
other Tabs to access any other verbs.
Verb organization within a Tab can be handled by A.) subcategories and
B.) Verb name prefixes (such as Earphones - *****). The first option is
the clearest and cleanest, but consumes additional vertical space. The
second option conserves vertical space at the cost of visual clarity.
This PR attempts to reorganize Verbs by their Tabs, Subcategories, and
prefixes with the following priorities in mind:
- Minimal disruption; any radical change must be justified (don't move
shit around just for the sake of moving shit around.)
- Verbs which share common functions (such as Languages) should be
grouped together.
- Maintainability. Contributors should not need to memorize an
excessively convoluted Subcategories list; Subcategories must be
intuitive and simple.
- Subcategories should be used judiciously when grouping Verbs to
conserve vertical space. Example: Instead of creating a Subcategory for
Emotes, just rename Audible Emote and Visual Emote to Emote (Audible)
and Emote (Visual).
- Subcategories should highlight uncommon or unusual verbs when
reasonable. Example: There are several animal husbandry-related Verbs,
and because most characters will not have access to those verbs
regularly, we can be less conservative with space (because they'll be
gone most of the time) for the sake of emphasizing their availability.
This PR covers the IC, OOC, and Object Tabs.
Subcategories:
OOC.Chat (Chat functions)
- AOOC
- LOOC
- Devsay (moved from Special Verbs)
- Dsay (moved from Special Verbs)
- OOC
OOC.Debug (Fix shit)
- Fit viewport
- Fix chat
- Refresh TGUI
OOC.Round (Round information)
- Check Gamemode Probability
- Check Round Info
- Custom Event Info
- Vote
IC.Antag (Antag verbs w/o their own tab)
- Invite to the Loyalists
- Invite to the Revolutionaries
- Set Ambition
IC.Critters (More critter stuff than you'd expect there to be)
- Befriend Carp (Previous name 'Become Friends')
- Befriend Cat (Previous name 'Become Friends')
- Befriend Dog
- Befriend Ives
- Name Alien Species
- Name Animal
IC.Language (Language-related stuff)
- Check Default Language
- Check Known Languages
- Set Default Language
IC.Maneuver (Movement, positioning, etc.)
- Adjust walk speed
- Do Pushup
- Face Direction
- Look Down
- Look Up
- Move Downwards
- Move Upwards
- Rest
Object.Equipped (Equipped object stuff, mostly for drip)
- Adjust Badge
- Adjust Bag Straps (Backpacks)
- Adjust Goggles
- Adjust Mask
- Adjust Welding Goggles
- Adjust Welding Mask
- Change Glasses Layer
- Change Pants Layer
- Change Wrist Radio Layer
- Change Wristwear Layer
- Check Time
- Flip Badge
- Flip Belt
- Flip Eyepatch
- Flip Hat
- Flip ID card (ID card)
- Flip Radio (Clip-on radio)
- Flip Wristwear
- Fold Collar
- Lock Antenna(e)
- Point At Watch
- Raise Shroud
- Roll Up Cape Mantle
- Roll Up/Down Jumpsuit
- Roll Up/Down Sleeves
- Switch Belt Layer
- Switch ID Layer
- Switch Lanyard Layer
- Switch Shoe Layer
- Toggle Aviators (Like a dozen variants)
- Toggle Ceremonial Garment Lights
- Toggle Coat Buttons
- Toggle Coat Zipper
- Toggle Hair Coverage (For hats helmets etc)
- Toggle Hair Coverage (FOR BABY CARP!!!!!)
- Toggle Helmet Camera
- Toggle Hood
- Toggle Lyodsuit Mask
- Toggle Poncho Tail Coverage
- Toggle Shirt Buttons
- Toggle Suit Sensors
- Toggle Visor (Pilot helmet)
- Toggle Waistcoat Buttons
- Transform Holoclothing
- Voidsuit - Eject Suit Cooler
- Voidsuit - Eject Tank
- Voidsuit - Toggle Helmet
Object.Held (If you're HOLDING it, its probably relevant to you rn)
- Activate Held Object (Silicons; moved from IC)
- Alter Beacon's Signal (Radio beacon)
- Change Bite Size (Utensils)
- Change Pen Colour
- Choose Colour (Paint sprayer)
- Choose Decal (Paint sprayer)
- Choose Direction (Paint sprayer)
- Choose Preset Colour (Paint sprayer)
- Describe Prototype
- Draw Boot Knife
- Empty Bee Net
- Empty Spray Bottle
- Holster
- Name Gun
- Name Prototype
- Plant Flag (Flags)
- Print Plant Report
- Remove Chopsticks
- Remove Top
- Set Detector High-Bound (Light meter)
- Set Detector Low-Bound (Light meter)
- Set Hailer Message (Hailer)
- Set Timer (Timer igniter)
- Set Valve Pressure (Pneumatic cannon)
- Show Held Item
- Spin Cylinder (Revolvers)
- Switch Verbosity (Health analyzer)
- Toggle Chainsaw Power (Chainsaw)
- Toggle Flashlight Brightness (Flashlights)
- Toggle Gun Safety
- Toggle Hazard Vest
- Toggle Pinpointer Mode (Pinpointer)
- Toggle Mister (Backpack water tank. Goes into/out of hands)
- Twist Cap
- Use Scope
- Wield Pick/Drill
- Wield Two-Handed Weapon (Two-handed weapons)
Object.Cards (I fucking hate cards!!!)
- Deck - Deal
- Deck - Draw
- Deck - Pick
- Hand - Pick
- Turn Hand Into Deck
Object.Earphones (Enough here to separate out)
- Eject Music Cartridge
- Change Volume
- Next Song
- Pause/Unpause
- Play/Stop
- Previous Song
Object.Jetpack (This is probably really important to see quickly)
- Toggle Jetpack
- Toggle Jetpack Stabilization
Object.Tape Recorder (Enough here to separate out)
- Start Recording
- Stop Recording
- Clear Memory
- Playback Memory
- Print Transcript
- Eject Portable Storage
**IC tab example:**
<img width="1061" height="277" alt="Screenshot 2025-08-09 101813"
src="https://github.com/user-attachments/assets/a2afe92d-34fd-4160-bf68-b459a4195e26"
/>
**Objects tab example:**
<img width="1100" height="472" alt="Screenshot 2025-08-09 101807"
src="https://github.com/user-attachments/assets/a36e4c76-594e-4569-93ba-ffcda57e8760"
/>
- Schlorrgo egg making chance reduced from 4% to 1%
- Schlorrgos now have a max amount of eggs they can produce. With total
max of 40 (and realistic max of 10-20 considering how hard it is to
'max' fat a schlorrgo)
Co-authored-by: Ben10083 <Ben10083@users.noreply.github.com>
The Supermatter has a damage rate limiter to prevent extremely high
temperatures from just shotgunning its integrity down to zero in one
tick. That's totally fair.
Doubles that maximum limited rate.
Also reduces volume of delam sound by 25% because I'm a nice person.
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
[Original suggestion
here.](https://forums.aurorastation.org/topic/22454-tidy-up-lockers/)
- Replaces departmental/job-specific wardrobe lockers with new 'Drobe'
vending machines, each containing pertinent clothing, all with new
icons: ClothesMate, EngiDrobe, AtmosDrobe, HyDrobe, SecDrobe, BarDrobe,
ChefDrobe, ChapelDrobe, SciDrobe, MediDrobe, ChemDrobe, CargoDrobe,
RoboDrobe
- Makes vending machine ads populate at the top of the purchasing UI and
randomly cycle.
- Few vending-machine related map touch-ups (mostly vending machines
missing the floor 'hatched' pattern underneath).
- Misc code readability improvements.
Yea so apparently the "Parent of all exoskeletons" makes you faster.
Even though all the other exoskeletons in the game have either no or
some slowdown. The falcata is a very chonky armored exoskeleton, so it
should have some slowdown instead of speedup.
In round cwE-dDLE a "dilapidated hivebot beacon" was summoned by gold
slime cores. It was invisible and continuously summoned hivebots. Since
the other types of hivebot beacons are already blacklisted, this
prevents this type of hivebot beacon from being summoned by the gold
slime cores as well. I assume it got overlooked because it's in another
file - there's no reason for a single use item to spawn an infinitely
free hivebot summoner. Another PR can fix the invisibility issue, if its
cause is discovered and it's not a gold core specific interaction
causing it.
For ease of reference, the weakened hivebot beacon is here:
https://github.com/Aurorastation/Aurora.3/blob/6d7c058ee7b44ba73099f46116cbd819fb86cba2/maps/away/away_site/hivebot_hub/hivebot_hub.dm#L119
The one thing I forgot. Agony.
This PR adds in the missing circuit board datums for the falcata
exoskeleton. This is what not having a fully functional dev environment
does to a man.
## About PR
PR'd again from #21045 because a mistake I made, apologies for this.
Off-ship packages are now spawned whenever they exist in the overmap.
Adjusted the warehouse to include a small room for newer packages to
come in, given the alternative was letting them spawn and scatter out of
nowhere in the middle of the round. Packages for roundstart non-hidden
locations like exoplanets or any other location with delivery spots
aren't affected by any of these changes.
Also when an off-ship becomes available for packages, operations receive
an announcement message about it.
## Images
<img width="416" height="512" alt="grr"
src="https://github.com/user-attachments/assets/a8d82a60-e18e-4fda-ac3f-acccc256c6f6"
/>
<img width="891" height="42"
alt="469941125-59633a9b-a32f-40ea-98b8-4a38fd0d31ac"
src="https://github.com/user-attachments/assets/bf5586e6-efea-4c01-af51-6c405107a8d0"
/>
Progress on DMDocs. PRing progress so far so there's not one mega PR
later with 1500 affected files.
I want my goddamn highlight text on what all these goddamn procs goddamn
do goddamnit. >:(
No actual code change anywhere in this PR, only comments.
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
## About PR
Sprites are ported from Paradise Station, made by McRamon.
This cart is capable of holding the following:
- 2x sheet stacks of each steel, glass and plasteel.
- mechanical, electrical and emergency toolboxes, one each.
- light replacer
The one that spawns in engineering begins with all 3 toolboxes.
This cart costs 15 plasteel to craft, 100 credits to order from cargo.
Removes relevant toolboxes this cart spawns with in the department.
## Images
<img width="605" height="486" alt="Screenshot_4"
src="https://github.com/user-attachments/assets/59487676-bc5e-4f42-8c8e-d5d59add8481"
/>
https://github.com/user-attachments/assets/88e596ed-06e3-4047-89a8-452d1b13f466
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| icons/obj/engicart.dmi | McRamon (Paradise Station) | CC BY-SA 3.0 |
This PR adds a few much needed new features to mechs, with the main one
being Mechanics Hints. Mechs have a unique way of handling mechanical
hints, in that shift-clicking on a mech to get these hints will reveal
the hints for its equipped modules.
I've also gone through and eliminated all of the lag causing hard
deletes present in the mech code. In a typical round these won't occur
all that often, but if I'm touching all these files I might as well do
my part and certify them free of hard deletes.
Lastly, after talking with Shaft Mining players, I discovered that the
main reason they don't ever want to use mining mechs is that the warp
extraction bag is strictly superior to mining with a mech, as it lets
them teleport ores directly to the ship. So I've added an option to link
ore summoners directly to these "Warp crates", allowing a mech equipped
with one to teleport ores to the ship. Just like the bag can.
This PR adds a new tier 1 exoskeleton to the hardsuit designs. I've been
bothered for awhile that there exist security hardsuit modules available
at roundstart, which cannot actually be used without science first
unlocking combat hardsuits, since normal hardsuits cannot use them. So
this PR adds a new exoskeleton(notably not a hardsuit, it offers no
space protection!), which serves to provide a means of putting those
tier 1 security modules on something, without invalidating the later
combat hardsuits(which are all significant upgrades over this).
Many of these lower tier security modules were essentially invalidated
by higher tier sec modules that would get unlocked alongside actual
combat hardsuits.
The falcata exoskeleton has the same armor values as security's heavy
body armor, essentially meaning its primarily only an upgrade over said
armor in the sense that it lets the wearer use the shoulder mounted
taser module.
<img width="993" height="248" alt="image"
src="https://github.com/user-attachments/assets/68418219-b159-4a4d-92d2-5bbc8476c6ce"
/>
<img width="1274" height="316" alt="image"
src="https://github.com/user-attachments/assets/f77d7810-7b0c-4333-8ec8-5f7575fb4c61"
/>
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| icons/obj/item/clothing/rig/falcata.dmi | noblerow (discord) |
CC-BY-SA-3.0 |
---------
Signed-off-by: Matt Atlas <mattiathebest2000@hotmail.it>
Co-authored-by: Matt Atlas <mattiathebest2000@hotmail.it>
As title: grants STs a small selection of admin/mod/fun verbs without
needing them to have an admin_rank configured on the back end.
I've been extra permissive here on the assumption that Those That Be
will veto anything they don't like. The granted verbs:
/client/proc/toggle_view_range,
/client/proc/jumptozlevel,
/client/proc/jumptoshuttle,
/client/proc/jumptoship,
/client/proc/jumptosector,
/client/proc/Getmob,
/client/proc/Jump,
/client/proc/jumptomob,
/client/proc/jumptoturf,
/client/proc/check_ai_laws,
/client/proc/manage_silicon_laws,
/client/proc/odyssey_panel,
/client/proc/damage_menu,
/client/proc/change_human_appearance_admin,
/client/proc/change_security_level,
/client/proc/cmd_dev_bst,
/datum/admins/proc/create_admin_fax,
/client/proc/check_fax_history,
/client/proc/clear_toxins,
/datum/admins/proc/call_supply_drop,
/datum/admins/proc/call_drop_pod,
/client/proc/event_manager_panel,
/client/proc/toggle_random_events
This PR is full of _gross code_ but it _does_ work.
This PR adds back in missing recipes for the teargas and smoke exosuit
grenade launchers, which were present in the game files, but not
available to manufacture unlike their stinger and flashbang
counterparts. Both of these launcher types previously weren't accessible
anywhere in the game.
1. Look up now follows your mob (no more auto-removal when you move,
only when you go below a solid tile). Maybe add a hotkey?
2. Made the codebase work with the latest version of spacemandmm lint.
3. Advanced kits don't work on robotic limbs.
4. Density shifting should now always use set_density. Ported
TRAIT_UNDENSE from CM to better control the density of living mobs.
Fixes weird shifting behaviour with wall leaning -- what was happening
is that mob density was getting reset to TRUE because the mob wasn't
lying down.
5. TGUI say light prefs actually save.
---------
Co-authored-by: Matt Atlas <liermattia@gmail.com>
Currently, picking the exostellar skeleton as an offworlder means you
can't use a hardsuit since only the ESS removes the slowdown. This fixes
that by extending that property to all other hardsuits with the logic
that if they're strong enough to splint a miner's leg and let let them
walk around, they're strong enough to help noodleman with their back
pain.
Title. Giving up a backpack slot for what is essentially a fluff item is
a pretty big ask. The only real advantage it has over just popping an
RMT pill is the fact it has welding protection, which the people who
typically need it can already get from other items, and that it can
inject dexalin which, although it might come in handy in a pinch,
doesn't justify massively gimping your storage capacity for.
The storage module is still significantly worse than a regular backpack
so there are still some drawbacks to bringing the exoskeleton, but not
the extreme level that it sits at now.
This PR "Gently refactors" organs in preparation for adding in new
variant organsas requested by HumanLore. Additionally, it adds in
several organs that were requested by Human Lore, as described in:
https://docs.google.com/document/d/1SLbll969PyJ_H9J1LP8cmdso9OMozUc8MGOVZkY4HbE/mobilebasic
The new augments include: Auxiliary Heart, Platelet Factories, and
Subdermal Carpace
Additionally, all of the new Galatean Bioaugs have been added to the
antag uplink.
The bulk of this PR consists of replacing a majority of all the organ
"Magic Numbers" with variables which could feasibly be modified by any
new kind of organ object. Additionally-- although it's unused in this
PR, here's also a new optional boolean for hearts to create a "Fake
Pulse", which would be useful in the future for event character shells
to be able to fool a pulse check. Finally, the heart systems are
configured to use Signals so that arbitrarily any component can
introduce their own modifiers to the heart statistics.
This PR was requested by Human Lore:
<img width="434" height="290" alt="image"
src="https://github.com/user-attachments/assets/98236886-1c19-4621-958e-c154ae66f2ad"
/>
Sprites have been made by @NobleRow
- Readds microwaves, and most of their old recipes where applicable.
- Resprites the small oven. It was small and ugly and I hated it.
Now, you may be asking, Wezzy - some of these recipes are an affront to
god. Microwaves can't do that.
And to that I say, It's mostly there to be a decent stand-in for small
rinky-dink maps and ships where you can't particularly fit the whole
kitchen suite in a convenient place. It's nice to have a bit of an
asspull in places like these, so.
Also, donk pockets actually become hot and cool down properly again,
now. It only took 15 years. (jesus christ)
Ported from Bay which ported from us.

- Adds a Europa music cartridge, with 4 new sound tracks added for this
cartridge.
- Reduces the volume of all tracks I've added in prior PRs.
- Cannibalises the `lobby/crescent_expanse` tracks as — in hindsight — a
generic sector getting its own lobby tracks is a bit much and would mean
generic lobby tracks are never heard. saving it for major
systems/uncharted zones/special places. 1 sound file removed; 1 now used
in the Europa cartridge
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| Path | Original Author | License |
| --- | --- | --- |
| sound/music/regional/europa/casting_faint_shadows.ogg | "casting faint
shadows" by Ikaiora
(https://ikaiora.bandcamp.com/track/casting-faint-shadows-2) | CC
BY-NC-ND 3.0 |
| sound/music/regional/europa/where_the_dusks_rays_leap.ogg | "where the
dusk's rays leap" by Ikaiora
(https://ikaiora.bandcamp.com/track/where-the-dusks-rays-leap) | CC
BY-NC-ND 3.0
| sound/music/regional/europa/deep_beneath-.ogg | "Deep Beneath the
Solemn Waves a Vast Underwater Landscape, Brimming With Bizarre, Eerily
Gleaming Cyclopean Structures of, What Must Surely Be, Non-Human
Origin, Stretched Out Across the Ocean Floor" by Unknown
Oceanographer/Under Jorden
(https://under-jorden.bandcamp.com/album/deep-beneath-the-solemn-waves-a-vast-underwater-landscape-brimming-with-bizarre-eerily-gleaming-cyclopean-structures-of-what-must-surely-be-non-human-origin-stretched-out-across-the-ocean-floor)
| CC BY-NC-ND 3.0
| sound/music/regional/europa/instrument_park.ogg | "Instrument Park" by
Little Bradley
(https://myprivateunderground.bandcamp.com/track/little-bradley-instrumental-park)
| CC BY-NC 3.0
| sound/music/regional/europa/way_between_the_shadows.ogg | "Way Between
The Shadows" by Mokusei No Maguro
(https://mokuseinomaguro.bandcamp.com/track/way-between-the-shadows) |
CC BY-SA 3.0 |
All sound files compressed to 20K. No transformation or remixing done.
dredging bandcamp for decent, copyright permissive songs by non—mass
production artists has been soul-draining lol. this is the last music pr
from me
This PR adds three new variations for hardsuit stepping sounds, which I
had comissioned a sound artist by the name of majormoth to make for me.
I've also set some of the game's hardsuits to use these variations where
apropriate.
### Asset Licenses
The following assets that **have not** been created by myself are
included in this PR:
| sound/machines/rig/rigstep_chonk.ogg | majormoth (discord) |
CC-BY-SA-3.0 |
| sound/machines/rig/rigstep_heavy.ogg | majormoth (discord) |
CC-BY-SA-3.0 |
| sound/machines/rig/rigstep_medium.ogg | majormoth (discord) |
CC-BY-SA-3.0 |
Permission given by Matt. Have fun y'all.
Did a little extra code refactoring in here while fixing things up to be
a bit more consistent. Xenoarchs also had access to the pilot room for
sensor readings etc, so gave the same to xenobots/xenobios.
However, while in here I got annoyed by the fact that while
ACCESS_INTREPID exists, the other shuttles all rely on per-job manual
overrides to their mapped objects to handle access control. Therefore, I
added ACCESS_SPARK, ACCESS_QUARK, and ACCESS_CANARY, and updated all the
associated jobs/objects to use them instead of a mishmash of bespoke
edits.
_(I would have preferred to use naming conventions like
ACCESS_SHUTTLE_EXPEDITION, ACCESS_SHUTTLE_MINING,
ACCESS_SHUTTLE_SCIENCE, ACCESS_SHUTTLE_INTERCEPTOR, but I was good and
used the in-game names in the code, as was existing convention.)_
Prompted by
[this](https://github.com/Aurorastation/Aurora.3/issues/21090) (Atmos
control app not reliably updating all alarms from
SSmachinery.processing). Did what I could but barring a larger refactor
of how computer programs are initialized, didn't want to burn Too much
time so implemented a Refresh button in the application interface as an
in-game fallback option.
Also fixes the bug with Loadout-spawned laptops not booting; their hard
drives were being initialized with default software due to accidental
codeblock removal
[here](https://github.com/Aurorastation/Aurora.3/pull/20660/files#diff-40a75a936400e3c347fd8c3d4c804190a63ac9be980912f6a9995efd1b296a1e).
Restored the affecting code.
Updated several other files I discovered in passing while working on
this with proper DMdocs formatting.
Adds support for reagent/mental singletons to return different feedback
messages for different species.
Koko Reed Juice no longer delivers the 'high' feedback goodmessages to
non-Unathi.
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
### 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.
Scope creeped PR. Fixes a breaking bug in the Atmos Alarm Control
application introduced after areas-cleanup PR, but also refactors it
into a grid-based interface that actually allows you to reliably search
alarms by name, department, and deck # (possible now with all the area
metadata we have to play with).
Also does behind-the-scenes cleanup of alarm panel code in general, a
few area def problems, and some manually defined air alarm names on the
map.
---------
Signed-off-by: Batrachophreno <Batrochophreno@gmail.com>
Adds a colourable exoskeleton offworlders can choose instead of the
current one. It does the exact same things as the standard exoskeleton,
the only difference is that you can change how it looks.
<img width="766" height="576" alt="image"
src="https://github.com/user-attachments/assets/5ee0af71-042c-4249-bd4c-8005cf1cb406"
/>