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.
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.
Turns the z-level restriction procs into macros
Changes z-level restrictions to use the macros
Use contact_levels for announcements (instead of player_levels)
Restricts the teleporter to station_levels instead of player_levels
Restricts AI tracking to station_levels instead of player_levels
Mechs only get tracking beacons if they are on station_levels (instead of player_levels)
Construction Drones gib if they enter a station level
Mining Drones gib if they leave the station levels
Removes the mining equipment vendor from the scrapheap
PROPERLY allows unathi to wear boxing gloves.
PROPERLY and completely removed the buckle resist cooldown by fixing code oversights.
Removes duplicate definition of ethanol in the scrubber alert reagent table.
Fixes Xenoarch floating light and clean tiles outside the airlock.
Overview
Now that when scrubbers hit you, you will breathe in the reagents along with digesting and touching them. Since breathing in is 50% more effective than digesting, this nerfs scrubber reagent potency by reducing the amount of chemicals each smokecloud has.
Also added the following reagents to reagent scrubber RNG:
paint, luminol, fuel, blood, sterilizine, ipecac
changes:
Maps are no longer compiled in, instead loaded directly from the DMMs at runtime.
Z level defines have been moved from the config to map datums.
Unit tests now use typecaches.
DMMS now actually works.
DMMS has been updated slightly.
DMMS is now capable of loading simple lists of non-text types.
DMMS is now faster when loading many types without mapped in attributes and when loading area instances.
Asteroid generation is now defined on the map datum instead of being hard-coded in SSasteroid.
Holodeck presets are now defined on the map datum.
Atmos machinery now uses Initialize().
Removes a whole bunch of in world loops.
Reworks SSmachinery to hold two lists: all_machines and processing_machines. all_machines contains all machines 5ever. All of them. Literally. Forever. And ever. processing_machines only contains machines that process with the SSmachinery controller.
I checked most types at runtime on the live server to see whether they're in processing_machines or in all_machines, and did debug to ensure that most machinery ends up and stays in all_machines.
Includes a basic UT to make sure all mapped in machinery types remain within the all_machines list post-init.
The announcement system just got an upgrade.
Also made the delta siren more concerning.
And made a custom slightly annoying sound for the night mode announcement.
New PR to fix merge issues
Porting an event from tg. Scrubbers get clogged and eject some chemical smoke with potentially fun effeects
I looked through chemsmoke code while doing this, and found it wanting, so i improved it. Added a duration input, adjusted all uses of chemsmoke in the code. Generally gave them all higher durations, chemsmoke grenades were a disappointing poot
Adds a new mundane event, false alarm.
It picks a random moderate or severe event and fakes its announcement without actually running the event.
Three minutes later, CC sends another announcement apologising for the false alarm
Also added an event var allowing events to exclude themselves from being picked for faking