## About The Pull Request
title
## Why It's Good For The Game
because you pay tc for chemical room + not intended
## Changelog
🆑
fix: Fixed the nukies outpost chemical locker not having beakers inside
of a beaker box
/🆑
## About The Pull Request
- Fixes#92198
- Fixes#92298
**1) Replaces reagent `on_transfer()` with its corresponding `expose()`
proc variants**
This PR replaces all known implementations of
`/datum/reagent/on_transfer()` with `/datum/reagent/expose_mob()`. We
use `expose_mob()` & not the other `expose()` variants because all known
implementations were targeting living beings so this was the correct
replacement This has 2 benefits
- `expose_mob()` gets called correctly when an impure reagent is
converted to it's inverse variant like for Cryostylane & Cryogeldia.
This isn't the case for `on_transfer()` so we get correct behaviour
which fixes the above bug
- Removing `on_transfer()` makes the proc `/datum/reagents/trans_to()`
much faster performance wise because we aren't calling `update_total()`
per reagent transfered now but only once at the end after all reagents
are transferred
Also there was little to no functional difference between the 2 procs,
`expose()` works correctly in comparison & this won't confuse devs when
deciding which proc to use. One proc to cover all scenarios
**2) Removes unused expose signals**
`COMSIG_ATOM_AFTER_EXPOSE_REAGENTS` & `COMSIG_REAGENTS_EXPOSE_ATOM` are
not used anywhere in the codebase i.e. no listeners. They can be
discarded as dead code
**3) Fixes wrong transfer amount passed to
`/datum/reagent/intercept_reagents_transfer()` &
`/datum/reagents/expose()`**
The wrong transfer `amount` was passed when it fact it should use
`transfer_amount` which contains the multiplier & proportional
multiplier applied. Also the reagent volumes exposed was computed
incorrectly resulting in the 2nd issue listed above. Blood transferred
to mobs now go to `blood_volume` directly instead of getting added to
the mobs reagent holder as long as it's less than `BLOOD_VOLUME_MAXIMUM`
level
## Changelog
🆑
fix: reagent intercept operations use correct volumes e.g. ph buffers
fix: impure cryostylane now has inverse cryogeldia effects when applied
on mods
fix: exposing reagents now uses correct volumes i.e. injecting blood
into mobs don't increase it exponentially and stops when max levels are
reached. Exposure affects of all reagents are lessened upon continuous
exposure
refactor: refactors how reagent affects are applied on mobs. Report bugs
on github
/🆑
## About The Pull Request
For instances of athletics gains that don't involve workout
machinery/granting the exercised status effect, those sources of
experience suffer from increasing diminishing returns as the person
gains athletics levels.
## Why It's Good For The Game
While I still like that this lets more people engage with athletics
across a round, it did unfortunately trivialize getting higher levels of
athletics by doing some relatively banal activities that took really no
preparation to accomplish. The intended method of getting experience
should be the workout equipment, and so at a certain point these sources
of experience should stop granting free levels.
If someone refuses to interact with the workout mechanics and only
chooses to use these alternative methods, then uh....I guess all the
more power to them but they'll be there for a while.
## Changelog
🆑
balance: Athletics experience gain from non-workout sources, such as
climbing ladders, hopping tables and rope climbing, experience
diminishing returns as you gain athletics levels. To reach legendary
fitness, you really should hit the gym.
/🆑
## About The Pull Request
Partially reverts #84594, removing forced tint from night vision goggles
(if anyone for some reason wants to experience it again, they can toggle
it via alt click like it could be done before the [aforementioned
PR](https://github.com/tgstation/tgstation/pull/84594))
Approved by Ghom (the original PR author)
## Why It's Good For The Game
NVG tint is a pretty sizeable accessibility issue, as forced screentint
can easily cause eye strain if they're used for prolonged periods of
time, being especially bad for blue-tinted NVGs. They're already locked
pretty deep down the techweb, and this change just made everyone avoid
them. If we need to make tintless variants of them for every single
antag and special role (and bitrunners, lol), we maybe shouldn't have
added the tint in the first place.
## About The Pull Request
The list of options you could choose from when screwdrivering a custom
vending machine circuit board was hard-coded and also contained copy
pastes of every vending machine name (some of which were outdated). It
was yucky
- Add a new var on `/obj/machinery/vending` called `allow_custom`,
defaults to FALSE and determines whether that type shows up as an option
when screwdrivering a custom vending machine board, I've went through
and made assignments for it mirror what was in the old static list i.e.
this won't introduce any new options
- Change the hard-coded static list to be built on Initialize,
populating with every subtype that has `allow_custom` set to TRUE
- Eliminate a second static list that was just the inverse of the first
one (first one was typepath = name and this one was just name =
typepath)
- Changed an `istype` check to `==` because old behavior meant subtypes
of a given vending machine would have their type set to the supertype if
that was also a valid custom vending machine option
## Why It's Good For The Game
Cleaner code, no needing to maintain two separate entries for the name
of a vending machine, eligibility for a machine to be used in custom
vending machines is now a var on the type instead of in a random file
pertaining to circuit boards
## Changelog
🆑
refactor: refactored custom vending machine brand code, a new var on
/obj/machinery/vending called allow_custom now determines whether the
machine can be chosen when screwdrivering the circuit board
/🆑
## About The Pull Request
# More robust logging
## Ore silo logs have now been refactored in the UI to display:
- Number of sheets is now the relative unit when displaying a given log.
- Instead of `100 iron` being displayed when removing one sheet, it just
says `1 iron`
- Instead of `25 iron` being displayed when using a quarter sheet, it
just says `0.25 iron`
- All information from ID_DATA(log_user) now sent to tgui backend
- The items rendered to ore silo users are:
- Name on ID, job on ID
- If the ID's bank account (if one is registered) is one of the ore
silo's banned users
- If the user for a given entry was wearing a chameleon card, they will
always appear unbanned
- NOTE: The bank account ID # is (currently) not shown to players using
the ore silo.
- Full log information is rendered within a dropdown; the dropdown
one-liner shows
- Action (deposit, eject, item created)
- Amount (deposit/eject? amount of material used. item created? number
of items created.)
- Either name of material (if deposit/eject) or the name of items
crafted
- The name of the user who performed a given operation (if wearing an
unbanned ID) or ID_READ_FAILURE (if ore silo ID requirement has been
disabled and the person is not wearing an ID)
- As name, but instead, the job of the ID (or ID_READ_FAILURE)

# Access control improvements
## Single-user bans
- Anyone with QM access (not silicons) can now ban/unban a user from a
given log from using the ore silo
- Bans are associated to bank account IDs.
- Wearers of chameleon cards bypass any ban restrictions.
- Anyone with QM access on their worn card bypasses ban restrictions.
- Silicons bypass ban restrictions.
- QM access requirement is removed if the ore silo is emagged.
- Silicons can ban/unban people if the ore silo is emagged.
## Worn ID requirement
- Enabled at roundstart, can be disabled by anyone with QM access (not
silicons)
- If enabled, you must be wearing an ID with a bank account associated
to it to use ore silo materials.
- Wearers of chameleon cards bypass this restriction (so-called ID
requirement free thinkers wearing chameleon ID cards)
- QM access requirement to toggle removed if emagged.
- Silicons can toggle this on/off if the ore silo is emagged.
# Access control radio notifications
## Access control operations reported on the radio
- Any operations for access control are reported on radio channels.
- Currently, the policy is always the default.
- In the future, the ore silo UI will allow the quartermaster to modify
what operations are reported on what channels (petty QM broadcasting ban
reports on Common)
- Current default policy:
- Reported on COMMON channel:
- Anyone but the Captain attempts to ban someone with QM access from the
ore silo (nice try dumbass)
- Ore silo ID requirement toggling
- Reported on COMMAND channel:
- Common channel reports.
- Per-user banning/unbanning.
- Anyone without QM access attempts to ban/unban someone.
- Anyone without QM access attempts to toggle the restriction for ID.
- Silicons attempting to tamper with the ID requirement restriction
- Silicons attempting to tamper with the ban/unbanned user list
- A ban attempt failing because a given log entry had a user with no
bank ID.
- Reported on SECURITY channel:
- Common channel reports.
- Per-user banning/unbanning.
- Anyone without QM access tampering with the silo.
- Reported on SUPPLY channel:
- Command channel reports.
- Reporting to the radio is disabled if the ore silo is emagged.
## Modifications to the remote_materials component
- Strictly encompass the behavior for connecting/disconnecting ore silos
to material receptacles (RCDs, machines, etc) into procs on the
component, instead of handling it all over the place
## Why It's Good For The Game
Gives people with ore silo access more fine grained control over ore
silo use without having to resort to heavy-handed fabricator lockouts
Makes the logging on the ore silo more robust so we can make sure we
kill the right Roboticist for using all the materials
Offers an avenue for sidestepping all of this with a chameleon card or
emag if a given traitor (organic or otherwise) is particularly opposed
to DRM mats.
https://github.com/user-attachments/assets/effd2c63-509c-4d33-992f-837a0d62b935
## Changelog
🆑 Bisar
add: The ore silo has had a significant expansion to its logging
capabilities.
add: The ore silo now allows any ID with Quartermaster access (NOT
SILICONS!) to ban/unban specific users from the silo.
add: The ore silo now has a toggle (on by default) that a user of ore
silo materials has an ID with an associated bank account. This can be
toggled by anyone with Quartermaster access (NOT SILICONS!)
add: NanoTrasen discounts any reports that Syndicate contraband
(cryptographic sequencer, agent card) can be used to circumvent any
protocols instituted on the ore silo access control routines.
add: The ore silo now announces operations to ban/unban users and
enable/disable ID requirements on radio channels (check the Github for
actions reported to what channels.)
add: The tgui interface for ore silo log entries has been reworked.
refactor: The code for logging a given access to ore silo materials has
been significantly refactored.
qol: Ore silo log entries now display materials spent in terms of sheets
rather than the obfuscated absolute-units previously display (1 iron
ejected instead of -100 iron, 0.25 used in a craft instead of -25 iron)
/🆑
## About The Pull Request
Adds modular shield gates and puts them in holographics research (This
is the final machine to be added to holographics, if anymore are added
they will be put into a brand new adv holographics tech)
It can be rotated with screwdriver (to open panel) and wrench
It has NO ui (its meant to be used with either a remote signaler or
modular shield console in another PR)
It takes NO penalty from generating tiles indoors
It projects a field until either its max range has been reached or it
comes across a closed turf or shield that blocks it.
Regeneration rate is still based on how many tiles it projected vs the
maximum theoretical range it can project at, meaning relays are still
useful.
Infact its very inefficient at longer ranges (which is why it's called a
gate and not a directional generator, because you will most likely use
it like a gate)
its screwdrivered in the video thats why the connections are broken..
https://github.com/user-attachments/assets/4536dd5c-a515-43fc-9186-bbd2fc21b703
Makes hulks deal 30 + shield regeneration rate instead of 100+ (remember
shields don't have any armor or damage deflection)
Has shields block clicks on things under them (mandatory for the shield
gate)
Shields now react better to explosions and atmos (they used to not block
either with barely any interaction)
HALVES the bubble shield generator's max radius when set to project
tiles in doors (similar to regen)
Doubles capacity and regen (if used indoors this is not a large buff
because max radius impacts the regen calculation)
## Why It's Good For The Game
Allows engineers to use up excess power to further manipulate their
environment to produce complicated doorways, walls, and containment
fields that are nonharmful but still meaningful as breaching them is an
easy fix.
Modular shield generators are meant to be progressive content that
engineers can mess with throughout an ENTIRE round, giving them a
generator subtype that give them a bit more fine control with how to use
them seems essential.
Alot of people have asked me why the generator is so weak and told me
its trash, ive kept it weak because it affects a large area, outside in
space thats not a big deal, but inside the station its incredibly
powerful to just drop a 300 health bullet sponge wherever you want it by
ramping up the radius and blocking someone from entering/exiting a room
(this is similar to closing a door behind someone as ai except you're
completely surrounding them with that one door.)
This is deceptively powerful and by nerfing the radius indoors it's much
harder to abuse, which means that shield can now be somewhat stronger
without being oppressive.
## Changelog
🆑
add: Modular shield gates which project a shield in a line and does not
suffer indoor penalties.
balance: Modular shields now better interact with and block atmos and
explosions and melee for what they are protecting, hulks are able to
take one down eventually no matter what.
balance: Modular shields now suffer a severe range penalty when
generating indoors but are more potent in their capacity to endure
damage.
image: modular shield gate sprites
/🆑
---------
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
## About The Pull Request
fixes#90586
## Why It's Good For The Game
the poster isnt _that_ wanted
## Changelog
🆑
fix: Wanted posters now correctly return to your inventory if you move
while placing them
/🆑
---------
Co-authored-by: Xerseon <138307753+Xerseon@users.noreply.github.com>
## About The Pull Request
This does as the title says; climbing hooks are no longer limited-use,
and have had their functionality updated to where you can use them to
climb both UP and DOWN. As well, the Syndicate climbing hook has a
climbing speed of 0.75 seconds per movement, in contrast to the 4 second
speed of the emergency climbing hook.
## Why It's Good For The Game
Climbing hooks are a cool idea for people experimenting with multi-z,
either in the game or in map design, but for some reason we gimped them
with a hard and stingy usage limit. The syndicate climbing hook having
an extremely fast speed enables you to do cat burglar activities before
scuttling away and cackling evilly.
## Changelog
🆑 Bisar
add: Climbing hooks can now be used to climb UP or DOWN, instead of only
up.
qol: Climbing hooks no longer have a limit on their number of uses.
balance: Syndicate climbing hooks now have a speed of 0.75 seconds to
climb, in comparison to the standard 4 seconds for emergency hooks.
fix: Fixed a runtime in climbing hooks when you would try to climb down.
/🆑
## About The Pull Request
<img width="378" height="199" alt="1eSxYbsh0e"
src="https://github.com/user-attachments/assets/e8a658ca-c1c4-48fe-bb51-c77c85a7f824"
/>
Noticed some hard dels here, does some light refactoring/code
improvement to ensure that doesn't happen.
Crates shouldn't really be owning a hard ref to the manifest in the
first place since they are detachable. Removes some code duplication in
favor of calling `tear_manifest()` which has the safety check to prevent
`forceMove()`ing a qdeleted manifest out of nullspace.
## Why It's Good For The Game
Less server hiccups.
## Changelog
Nothing players will notice besides less server hiccups.
## About The Pull Request
puts both the grass and normal sabre sheath types under a shared parent
type for shared behavior.
considered subtyping the storage datum but it seemed overkill. can do if
requested.
## Why It's Good For The Game
less copy paste. good if someone wants to add a clay-more sheath for
similar (believe that exists somewhere downstream), would have done it
myself but no sprites.
## Changelog
N/A
## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/84319
## Why It's Good For The Game
consistency
## Changelog
🆑
fix: all hand items will now have no cooldown when used with northstar
gloves, including circle hand
/🆑
## About The Pull Request
spacemandmm, and byond, did not used to error on using `for init; test,
inc`. spacemandmm now does, and i think it's bad syntax to keep around
anyway
## Why It's Good For The Game
this syntax was mad
## Changelog
no playerfacing changes
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
## About The Pull Request
`pre_clean_callback` is asserted to be nullable, so this would runtime
if you have something with the default cleaner arguments
It probably shouldn't be invoked twice, anyways
## Changelog
Not player visible but could save a future coder or admin a minor
headache
## About The Pull Request
Adds a new parameter, `volume_preference` to `playsound` and
`/mob/playsound_local`, it takes a `/datum/preference/numeric/volume`
type path and enables you to specify a volume preference you'd like the
sound to be modified by on a per-listener basis.
## Why It's Good For The Game
Right now the only use volume preferences have is in direct,
client-specific `SEND_SOUND` calls, because modifying the volume
parameter in `playsound` modifies it for all listeners. This new
parameter allows the other 95% of situations where a sound effect is
played (i.e. code that use `playsound`) to make use of client volume
preferences.
## Changelog
🆑
code: added a new parameter to playsound and playsound_local that lets
you specify a volume pref type to use
/🆑
## About The Pull Request
I made and metek improved this regex for finding instances if(itterator)
in for loops because a downstream im working on does it an insane
amount. Im fairly certin all these instaces have no reason to be running
if checks here saying most of the for loops are typed so if it was null
or something it shouldnt be iterated on
`for\s*\(var(/\w+)*/(\w+) .*\n\s+if\(\2\)`
## Why It's Good For The Game
just kinda bad practice. Its way way way worse on the downstream tho
holy shit
<img width="1264" height="759" alt="image"
src="https://github.com/user-attachments/assets/1d0f152d-372d-49d4-a9fa-6d8e4d27a816"
/>
## Changelog
N/A
## About The Pull Request
Ensures regions of firedoors (full rooms, sections of hallways, etc)
have at least one fire alarm within, to ensure people can always reset
them.
Mappers can ignore regions with a mapping helper if they purposefully
want an area to lack a fire alarm.
## Why It's Good For The Game
A sore spot about fire alarms is when mappers forget / neglect to put a
fire alarm in a region of fire alarms, leaving people trapped.
So we brainstormed a way to automatically check that all firedoors can
be pulled or reset on either side, *somewhere*. It's not particularly
picky, so if the fire alarm is 50 tiles away, it'll still count
## Changelog
🆑 Melbert
qol: Firelock setups across every map should be more sane now, with
better coverage of fire alarms and fewer firelock boxes of doom.
/🆑
## About The Pull Request
You can now construct reinforced plastitanium walls by using a single
plastitanium sheet on a reinforced girder. These are mostly identical to
syndicate walls, but only have 2 explosion resistance like normal
reinforced walls, as opposed to the 20 of syndicate walls.
## Why It's Good For The Game
Have you ever wanted a construction project to have that cool syndicate
aesthetic, but doing so would compromise its security due to the walls
being able to be simply welded down? Now you can make a syndicate
shuttle or satellite that will at least require thermite or the aid of
an engiborg to rapidly break into.
## Changelog
🆑
add: You can construct reinforced plastitanium walls by using
plastitanium on reinforced girders.
/🆑
## About The Pull Request
New changes for Justice mech - traitor mech that can be created on
emaged fabricator(you need robo skillchip to emag it)
1. Charge attack refactor
Charged attack is now used not by pressing the action button but on
holding right click

While you press right click scope will focus on tile mouse looking for
and when you release right button you will charge on this tile (cooldown
5 seconds as before). if your mouse look at position you unable to
charge your mouse icon will become red
2. New Justice block
Now Justice don't have 60% chance to block any damage. Instead of this
rng, justice has 3 engines that orbit around him

Engines can be active and disabled. While all engines active they will
block any range projictiles back.

To deactivate engine you need to melee hit mech. When all engines
deactivated mech loses its ability to deflect for 10 seconds, after
which all cores are recharged and the cycle continues again.
Justice can also recharge one engine when pilot hits someone who not in
crit.

3.
Some balance changes:
Mech hp now 300
Mech melee armor now 50
Mech bullet and laser armor now 30
Mech now don't have speed change when you switch safety mod.
Instead mech becomes faster in invisibility and slower when holding the
right mouse button to charge a charge attack.
Invisibility mode now no longer temporary. You can be invisible as long
as you want until you attack/ bump with someone/ take damage or turn it
off yourself
AoE attack from invisibility is now x2 faster

## Why It's Good For The Game
Lots of changes from recived feedback.
Basically the most annoying thing was the block chances. Praying on luck
to not die from laser spam turned out to be not a very interesting
mechanic. Now mech justice requires more strategic actions to destroy it
and the mechanics create more fun for both the mech user and those who
fight with it. You need to get close to the mech to hit it and only then
will you be able to shoot the laser and user of justice has the ability
to recharge his cores by attacking enemies (if you don't attack, then
you won't be able to recharge the cores (well, only if your other cores
are broken)). This all creates more risk reward elements and not just
rng.
Accordance with block chance changes i also increased HP and armor of
Justice to balance the block changes a bit.
AoE attack speed was needed simply because 100/100 cases everyone said
that the aoe attack is weak and useless because it is almost very easy
to get away from it.
Changing the charge attack work mechanic is necessary to improve the
maneuverability of the mech. pressing the charge button and then getting
messages that you chose the wrong direction is very inconvenient and
deprives comfortable gameplay and pleasant use of the mech.
## Changelog
🆑
add: Justice mech: New block and charge system! Build and try it now!
qol: Justice mech: charge attack is now much more pleasant and
convenient to use!
balance: Justice mech: Increased HP and armor.
balance: Justice mech: Invisibility is now infinite.
balance: Justice mech: stealth aoe attack is now 2x faster.
refactor: Justice mech: Some code clenup and mechanic improvements.
/🆑
---------
Co-authored-by: tgstation-server-ci[bot] <161980869+tgstation-server-ci[bot]@users.noreply.github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
## About The Pull Request
- Fixes#92079
The `force` parameter in `handle_wave_conclusion()` was being
interpreted the wrong way in these 2 scenarios
- When `COMSIG_QDELETING` is sent `force` actually means are we deleting
the object forcefully & not if we want to win the wave defence
- When `COMSIG_MOVABLE_MOVED` is sent `force` gets the old location of
the drone(which gets misunderstood as TRUE because it's a non null
value) & not if we want to win the wave defence
So let's just remove this parameter so that it doesn't get
misinterpreted again. We don't lose any functionality with this because
when analysing all the places `handle_wave_conclusion()` is called, no
where is `force = TRUE` passed so the default is always assumed to be
FALSE so we can just throw it away
## Changelog
🆑
fix: You cannot win an ore vent wave defence by throwing a blue space
crystal on the drone or by moving it in any other way
/🆑
## About The Pull Request
Theses should originate from the guy being buckled, note the self
messages saying `buckels you to the x`.
## Changelog
🆑 Melbert
fix: Fix backwards default buckle feedback
/🆑
## About The Pull Request
Deletes the Void Torch from Cult
Mapped in uses have been replaced with similar red torches
Deathmatch uses were replaced with red torches as well (did they even
have a use in dm?)
## Why It's Good For The Game
Void Torch is maybe the # 1 example of bloat that comes to mind when I
think of "Cult"
- Very few people know that it does anything
- Even fewer people know how to use it
- Even FEWER people know how to use it effectively
- It isn't even uniquely produced, it comes with another object for no
reason
- In fact, I see people not even *realize* that they get a torch with
their veil shifter. In fact in fact, I see more people throw it *away*
than use it.
I don't really see a reason why it should stick around. A fair argument
I could see is "muh sandbox, you're pidgeonholeing cult in to just
swords and stun". But if that was the case, then why haven't people been
using it?
The only sad part to me is torches are cult kino thematically.
## Changelog
🆑 Melbert
del: Removes the Void Torch from Cult
/🆑
## About The Pull Request
Changes the weight of the fire extinguisher to bulky.
Changes its force to 13.
Adds a brand new alt attack, when you rightclick on the head of a target
you will wind up your extinguisher for 2 seconds and then smash it down
doing 39 damage with a wound bonus. This may need better telegraphing,
if you have any idea on how to implement this please reach out or make a
pr to this branch.
## Why It's Good For The Game
Fire extinguisher to bulky and force increase, I feel as if the regular
fire extinguisher fits better as a heavy improvised weapon / fire
fighting tool rather than just the latter, and in order to justify the
changes to increase the force of the fire extinguisher so it can act as
a fairly good improvised weapon (around the same strength as a toolbox)
its weight had to be changed. A fire extinguisher should be a superior
option to just fighting with fists and I believe that in its former
state it really wasnt. The bulky extinguisher change also comes as a
result of people repeatedly stealing and bagging the fire extinguishers
which often leaves common areas without them, greatly reducing the
capacity for fire fighting.
The alt attack, I felt like it was pretty cool and flavorful to be able
to "charge" up a hit with a fire extinguisher and be able to just smash
it down on someone, it also lends it a niche for finishers. [Also
this](https://www.youtube.com/watch?v=IhPTUog6DWc&t=180s)
## Changelog
🆑
add: Fire extinguishers now have an alternate attack, usable with right
click
balance: Fire extinguishers force: 10 -> 13
balance: Fire extinguishers weight: Normal -> Bulky
/🆑
## About The Pull Request
I would be very intrested to get this atleast testmerged, but anyhow.
This PR reduces the amount of medkits in general available in maps
(Mostly just public ones)
This PR changes the contents of Nanomed Wallvendors to include just
emergency stuff.
This PR REMOVES medigels from wall med vendors
This PR increases the sterilizine sprays amount in the drugs vendor from
1 to 3 to compensate the removal out the emergency vendors
This PR adds a tactical lite medkit to traitor uplink for 4 tc this
includes medicated suture/mesh health analyzer gauze and a atropine pen
What this PR achieves to AIM is repurposing wallmed vendors into a more
of a emergency type of vendor, while emergency lockers surgical kits are
free and RNG, this is gauranteed and costs a little bit of money.
Though i will need some help to see whats enough emergency med vendors,
so far i have 1 for every department as baseline maybe 1 every hallway
section aswell?, Pherhaps free and remove emergency medkits from
emergency lockers in general? i would love to hear people's opinion on
this
## Why It's Good For The Game
Theres alot of medkits available, so trickling down a little bit to have
medbay matter more, but in exchange there will be wall vendors to treat
your wounds with so you can bring them to medbay or have a
paramedic/doctor come to your location in time without the patient
dying.
This also removes one of the only imporant stuff in wall med vendors and
thats medigels, medigels are very popular and usually is the most common
way to treat damage (and space effecient)
## Changelog
🆑 Ezel
balance: Removes some public medkits on every map
balance: Changes the contents of wall med vendors to just have emergency
stuff
balance: Drugs vendor now includes 3 sterilizine medigels instead of 1
Balance: Tactical lite medkit added to traitor uplink for 4 tc, this
includes medicated suture/mesh, atropine pen, gauze, advanced health
analyzer
map:Adds more wall med vendors to the map atleast 1 every department.
/🆑
## About The Pull Request
It changes the fact in wish soup, Spacylibertyduff, and amanita jelly
that makes it so people eat the bowls, VIA a trash_type that spawns a
bowl once the food is finished, Fixes
https://github.com/tgstation/tgstation/issues/92155
## Why It's Good For The Game
People are using bowls which cant be returned to chef which directly
(due to them being consumed) makes chefs job more difficult and annoying
## Changelog
🆑 Glu
fix: Certain food items that required bowl now drop a bowl
post-consumption
/🆑
## About The Pull Request
Introduces perfect tense attack verbs for all of our limbs, as just
adding ``ed`` to the end doesn't work in about half the cases.
- Closes#90573
## About The Pull Request
fixes#92156
<img width="72" height="74" alt="image"
src="https://github.com/user-attachments/assets/607384a8-b0d1-4cdf-ac42-fdf071df1789"
/>
## Why It's Good For The Game
Fix bug
## Changelog
🆑
fix: Fish tails now correctly show up
fix: Mutant colors and other features now apply correctly in some cases
where they previously didn't
/🆑
When using `map-export`:
- Exports the welded state of an airlock to the welded airlock mapping
helper
- Exports the paper inside of a noticeboard to pop out and be saved on
the same turf
Both `airlocks` and `noticeboards` handle the outside objects already in
their `Initialization()` procs so I didn't have to change anything. Also
I cleaned up the paper code and added some better code documentation to
`on_object_saved()`.
We convert this:

To this:

## Why It's Good For The Game
There weren't any good examples of using `on_object_saved()` and the
documentation was lacking so I wanted to include some proof of concept
for a few objects. Also airlocks already save their welded state, but I
think it looks better to have it as a mapping helper since it shows up
in StrongDMM instead of being a VV edit.
## About The Pull Request
Big oversight from that one PR where I refactored lazy fishing spots to
halve the time spent initializing water and lava turfs that resulted in
generating new fish source datums everytime the fishing component is
added to a turf, instead of using the presets.
## Why It's Good For The Game
This will fix#91847.
## Changelog
🆑
fix: Fixed an issue with fishing turfs like water and lava having
multiple fish source datums, making it possible to fish the same
limited, rare loot more times than you should.
/🆑
## About The Pull Request
Smart metal foam places foam plating on openspace
## Why It's Good For The Game
It's supposed to fill the room but it leaves a bunch of holes to fall in
## Changelog
🆑 Melbert
qol: Smart metal foam fixes multi-z holes
/🆑
## About The Pull Request
Moves all the dna block handling onto singleton datums initialized
inside global lists, to make the handling dna less of a copy-paste mess
and make adding new blocks significantly easier. There is still some
work to be done in the copypaste department but ultimately that falls
under its own PR scope after the core refactor goes through. (Ill
probably do those but it will also be easier for everyone else as the
code is now significantly less of an eyesore)
Both features and identities have been tested through and through, and
seem to be working fine.
Also removed the reliance on weird hardcoded lookup tables for length,
and other similar things that just didn't make sense when I was passing
through DNA code. There's a lot more that fall out of scope for this
exact PR's goal however
## Why It's Good For The Game
I've been told the maintainers will love me for doing this
## Changelog
🆑
code: feature keys are no longer magical strings floating around the
codebase and use proper defines
refactor: DNA blocks are now handled with singleton datums.
/🆑
## About The Pull Request
Also fixes the issue where some empty decals (like dry gibs) claim that
the beaker is full when you try picking them up.
Closes#91831Closes#91486
## Changelog
🆑
fix: Fixed gibs not containing any actual gibs in them
/🆑
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>