Commit Graph

12582 Commits

Author SHA1 Message Date
Jacquerel 9fb7c20daa Cargo can buy more presents at Christmas time (#94251)
## About The Pull Request

Last Christmas we had and resolved this bug #88595 where via the
mechanic of buying random trash, Cargo could roll on the roulette to try
and get random Christmas presents and open them for random items.
This was removed because it's not supposed to work that way and was a
way of exploiting Christmas cheer for personal gain, which is grinchsome
behaviour.

That said, being able to order Christmas presents is also kind of
soulful, so this PR brings that mechanic back but on purpose this time.

During the Christmas season _only_, Cargo can spend 3000 credits of
their budget to order a "Surplus Christmas Gifts" crate which contains
4-6 presents _with pre-assigned recipients_.
In a similar system to addressed mail, only the person written on the
gift tag can open the present, so unless you're sufficiently scroogeous
to collect a huge pile of presents on the cargo room floor in hopes of
getting a couple with your name on (in my testing these contained raw
unbaked croissant dough, and a piece of paper from a space ruin) you
should mostly be using this to deliver generalised holiday cheer to the
crew rather than just yourself.



This PR also contains (maybe as more lines than the actual feature) a
refactor changing a bunch of boolean vars on `/datum/supply_pack` into
bitflags, because I needed to add one more and it seemed silly to have
so many booleans.

## Why It's Good For The Game

It allows those with the yuletide spirit to deliver some christmas cheer
to their fellow man, isn't that the season's reason?

## Changelog

🆑
add: When the game considers it to be Christmas, Cargo can order
additional Christmas gifts pre-addressed to random crew members.
/🆑
2025-12-12 02:10:31 +11:00
archbtw 9afb722ed1 Canned Ink Balance (#94366)
## About The Pull Request

Canned ink/ink sac: remove 2 second paralyze, lowers stagger & blind to
2.5 (max 3) seconds, remove TRAIT_UNCATCHABLE

(current) Canned ink stats:

2 second paralyze [forced knockdown, legs dont work, hands dont work,
drops all items]
3.5 (max 6) second confusion [changeling shriek stagger]
7 (max 10) second blindness [no matter what helmet protection -
bio-hood/eva-helmet, etc.]

Reskinned banana cream pie

Cant catch with throw mode

Buy as many as you want from the chef console (13 credits)

## Why It's Good For The Game

Worth 13 credits (chef's console)
Overtuned (see above)
No counter - You can't catch them with throw mode
Permanent paralysis hard stun - Keep throwing them at the person lying
on the floor

## Changelog

🆑 ArchBTW
balance: Canned ink: Remove uncatchable & paralyze. Lower stagger &
blind
/🆑

---------

Co-authored-by: glue0000 <230859540+glue0000@users.noreply.github.com>
2025-12-10 20:40:23 +00:00
Bloop 2ab2be0f37 Guards against qdeletion in afterattack (#94211) 2025-12-10 11:33:06 +01:00
Fghj240 ca2e8dd8b2 You can put defib paddles back into defibs using hotkeys (#94375)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-12-09 09:45:44 +01:00
MrMelbert 296f3a7cbd Minor rebalance of blood loss effects / blood regeneration chemicals (#93993)
## About The Pull Request

- Across the board, bleeding wounds cause ~0.85x slower blood loss.
   - Wound clot rate while bandaged has also seen a ~0.85x reduction.
- And slashing wounds have also had their natural clotting rate reduced
by ~0.85x.
- All in all, blood wounds are expected to last marginally longer while
keeping the same level of deadliness.

- Sutures blood flow reduction has been reduced by ~0.85x as well.
Medicated suture is unaffected.

- Blood Mary now scales blood regeneration based on drunkness. 
   - Old: Flat 3 blood/tick.
- 0 drunkness = 0 blood/tick. 40 drunkness = 2 blood/tick. 80 drunkness
= 4 blood/tick.

- Epoetin Alfa saw drastic changes.
   - No longer heals liver damage.
   - No longer adds Sanguirite to the system. 
- Now directly clots 0.1 flow of bloodiest wound (almost effectively
quadrupling clot rate, but 3x less effective than sanguirite)
   - Blood/tick reduced from 3 blood/tick to 1 blood/tick.
   - Now causes minor heart damage (0.2 damage/tick).

## Why It's Good For The Game

- A while back we were talking about how volatile blood wounds were.
Blood wounds are super scary, which is good, but just how scary they
were meant that the extent to which you interacted with this was a bit
stifled. My thoughts are slowing their pace a bit should open up more
opportunities for interaction while keeping them as scary.

- See above.

- Bloody Mary was ridiculously good at healing blood loss, better than
any chemical. The tweak to the effect aims to keep it as a pocket option
for aspiring bartender-alchemists without overpowering other chemicals
in medical contexts.

- Epoetin Alfa is effectively a producible form of Sanguirite which is
something that I believe is not mass producible for a reason (it's
really strong). The changes to it aim to make it a bit less potent that
sanguirite itself while keeping it as a viable blood healing option.
- I understand the liver healing is kinda a real world analog but in the
context of our chemical system, liver damage is something intentionally
not very common. It allows for complete negation of several other chem's
downsides. While I like this form of emergent chem mixing (mannitol and
bath salts, for example), this one earns a "particularly problematic"
badge due to negating 100% of the downsides of many chems.

## Changelog

🆑 Melbert
balance: Blood flow and clotting has universally been slashed by about
0.85x. This means blood wounds kill you slightly slower, but heal
slightly slower.
balance: Sutures now heal 0.85x less blood flow and gauze's clotting
bonus is also 0.85x lower. Medicated sutures are unaffected.
balance: Bloody Mary's blood healing effect now scales with how drunk
you are. Worse in low amounts, better in high amounts.
balance: Epoetin Alfa no longer generates Sangurite. It now directly
clots bleeding wounds (at a rate ~3x worse than sangurite, but still ~4x
better than the natural clotting rate)
balance: Epoetin Alfa no longer heals liver damage.
balance: Epoetin Alfa regenerates 3x less blood. It's still 4x effective
than Saline Glucose or Iron.
balance: Epoetin Alfa now causes minor heart damage (0.2 damage per
tick).
code: All "coagulating" effects now use a shared function. 
/🆑
2025-12-07 22:09:44 -05:00
Thunder12345 1d270f5f27 Converts pre-rework generic heretic gear into chaplain clothing and a null rod (#94363)
## About The Pull Request

Reused the old pre-rework heretic robe and blade assets as a new set of
chaplain gear and null rod option.

Replaced the last few existing uses of the now spriteless generic robe:
- Deathmatch, changed heretic warrior to use blade robes
- Deathmatch, changed ripper to use the new chaplain armour
- Tribal mothman legion corpse, changed to use new chaplain armour
- Heretic preview and hallucination, changed to use rust robes
- Heretic virtual domain, changed to use rust robes

<img width="127" height="131" alt="image"
src="https://github.com/user-attachments/assets/690e848e-5191-44d4-bd58-5e338fa2aa4e"
/>

## Why It's Good For The Game

Chaplains are the playground of old magic content assets, where they
find a second life as cosplay outfits. Chaplains can already cosplay
cultists, it's only fair that they can pretend to be a heretic as well.

## Changelog
🆑
add: Added a new set of chaplain armour based on the generic heretic
robes unavailable since the path rework.
/🆑
2025-12-07 19:50:19 +00:00
LT3 1c96273825 Portable crew monitor drag-drop element (#94327) 2025-12-06 16:14:42 -07:00
Leland Kemble 2adaabde71 Fixes malf AI destroy rcds power not fully exploding Mech RCDs (#94164)
## About The Pull Request

Malf AI blow rcds didnt work right on mech rcd module, because the
module isn't an RCD and simply holds an internal real rcd. This led to
the rcd "blowing" but remaining intact, just useless as its internal rcd
was gone. This modifies the exosuit variant internal RCD's detonation
proc such that it properly destroys the fake rcd shell.

## Why It's Good For The Game

fixes #93921

## Changelog
🆑

fix: Malf AI "Destroy RCDs" power now properly destroys mech RCDs

/🆑
2025-12-05 19:37:08 -05:00
RikuTheKiller be1f231869 Lock R&D console boards by default (#94114)
## About The Pull Request

This PR makes all R&D console boards that are either printed or sourced
from tech storage start out locked. They can be unlocked by swiping them
with an ID that has research access.

R&D consoles can also be unlocked with an emag, but doing so will break
their comms circuit as well, making all researched nodes broadcast over
public comms. You can still emag the console itself after it's been
constructed without breaking it in any way, while also silencing
announcements instead. (that's definitely a noob trap, but it's out of
scope for this PR)

The reason why the tech storage board is locked as well is because the
goal of this PR is to stop engineers from making R&D consoles, and
engineers have access to tech storage. Leaving the board unlocked and
moving it to secure tech storage would make engineers break in there
every shift.

The changelog basically has a FAQ for "Okay, so what do I do instead?",
because I know people will be confused about what route they're intended
to take when science closes their desk shutters for the umpteenth time
this week.
## Why It's Good For The Game

Engineering has a habit of making an R&D console every round to bypass
having to ask science or a head of staff to research things. Locking the
consoles at least makes engineers consider asking science to do
science's job.

Note that this doesn't solve the issue entirely, it just removes the
easiest and most convenient way of bypassing science. Engineers can
still break into R&D extremely easily using their wire knowledge, and do
so regularly.

More importantly though, this might shine some light on the fact that
heads of department like the CE have remote access to the research
network via their PDAs. This means engineers can ask the CE to research
things for them.

Asking people with access to the research network to research things is
a lot better for roleplay and immersion than having engineering
construct R&D consoles every shift.

## Changelog
🆑
balance: R&D console boards sourced from printing or tech storage are
now locked by default. It's recommended to ask your respective head of
department or the science department to complete research for you. Heads
of department can remotely access the research network using their PDAs.
/🆑
2025-12-05 19:12:22 -05:00
Ghom 043677c6f6 Storing objects with slowdown in a backpack or belt (or any such storage) now properly updates your speed (#93967)
## About The Pull Request
Another one of those things that I've noticed when playing around with
fish tanks; The slowdown lingered even when the fish tank (which depends
on the total weight of fish inside it) was no longer held and was only
updated another item is equipped or held.

This is because `attempt_insert` doesn't end up calling `DoUnEquip`,
which along with `equip_to_slot`, is one of the cornerstones of the
whole inventory system that we have had for over a decade. Luckily, this
doesn't break things entirely because `item/doMove` seems to have a
fallback, but it only covers held items and only does half of what
`DoUnEquip` does, because it's its own copypaste code, disconnected from
the standard unequip call stack.

I've done some changes to make sure `DoUnEquip` is always called on
`doMove` if we find that the item still has the IN_INVENTORY flag. I've
also updated the code comment for it as well, to emphasize that the
measure is a fallback and not an excuse to call forceMove or Move if we
know that the object is held or equipped on a mob.
If something doesn't work, it'll be likely caught by the CI (it's a core
feature of the game after all) or stack traces.

Also, despite equipment slowdown supporting all mob types, when
equipping/unequipping items it's only applied to carbon mobs. This is
not _strictly_ a contributing factor to the titled issue but it still
limits a balance feature that ought to affect all mobs with hands and/or
equipment slots.

## Why It's Good For The Game
Fixing issues with inventory and storages. Hopefully improving and
modernizing years old code a little.
2025-12-04 17:40:16 -06:00
Bloop 7754938c72 Makes a bunch of lists lazy (#94239)
## About The Pull Request

Empy lists. There are a lot of 'em.

<img width="981" height="512" alt="image"
src="https://github.com/user-attachments/assets/b94b041a-2904-466b-ab89-54bd1de11b4e"
/>

Going through ways to reduce memory I found a few easy ones here. Wires,
the edible component, the seethrough component. None of these are really
a concern when it comes to needing lists in memory for performance
reasons. Wires aren't going to be cut most of the time for each door. A
lot of food does not have any junkiness. Seethrough component lies
dormant most of the round. Etc.

Making lists lazy in these cases should be a no brainer.

Everything I tested still seems to work exactly the same.

## Why It's Good For The Game

Frees memory that is just taking up space a lot of the time.

## Changelog

Not player-facing, this is all under-the-hood stuff.
2025-12-03 13:42:16 -07:00
FalloutFalcon 0ff70f7497 adds the cardboard crates to spawners and crafting (#94110) 2025-12-03 11:26:33 +01:00
LT3 f24d464abc Updates silent jaws of recovery (#94082) 2025-12-03 11:25:11 +01:00
MrMelbert 0d41f5e2e0 Allows you to drop stuff in disposal bins (sort of) (#94249)
## About The Pull Request

If you are **within**
(inside)
(as in you climb into a disposal bin)
(like if you're about to be flushed)
a disposal bin or chute, and drop something, the item goes into the bin
(with you)
(inside the bid)
(like if you put an item in a bin like normal)
(it will also be flushed)
rather than onto the floor around the bin

https://github.com/tgstation/tgstation/pull/40723 added a bunch of
snowflake `Bumped` calls to mimic this effect - they have been removed.

## Why It's Good For The Game

Seems logical to me. It might break a bunch of stuff but it probably
won't.

## Changelog

🆑 Melbert
qol: If you are within a disposal bin or chute, and drop an item, the
item will go into the bin, rather than onto the floor outside of the
bin.
/🆑
2025-12-02 20:41:48 -07:00
Yobrocharlie c83a070266 First new gateway in a year. (#93894)
## About The Pull Request

This PR adds a new gateway with not too much threat a, a little bit of
reward more often in the form of gimmicky items or armor.

credit to https://github.com/NovaSector/NovaSector/pull/4880
For the gun and sfx sprite
## Why It's Good For The Game

The gateway system is about as decrepit and old, the last gateway that
was added was the museum which was made by somebody who would short
after receive a rule 8 ban and plus that away mission is a neat scenery
and has a lot of cool locations to look at but it has no loot, and you
know what? that's okay and it achieves what it sets out to do
beautifully, but if we discount that one for that reason alone (which
for the record is a bad reason to discount something) then the last
gateway that was added and that stuck was added in 2018? and it was
snowdin? I dont actually know, correct me on this. But basically, more
content good.

## Changelog

<details>
<summary>Screenshots/Videos</summary>
<img width="862" height="431" alt="image"
src="https://github.com/user-attachments/assets/d56add04-4b8c-4cd0-be7f-36d895e43868"
/>
<img width="654" height="665" alt="image"
src="https://github.com/user-attachments/assets/1ccd15c4-5c31-4b00-b5f8-9a662efa3436"
/>
<img width="651" height="571" alt="image"
src="https://github.com/user-attachments/assets/08ab4c1d-d9d0-413c-bc02-a3c51eda8761"
/>
<img width="1177" height="172" alt="image"
src="https://github.com/user-attachments/assets/8df5e28d-5041-4676-8370-b8ab351f5b52"
/>
<img width="850" height="586" alt="image"
src="https://github.com/user-attachments/assets/c03e6cbe-b290-421e-bbed-80a203221de4"
/>
<img width="1248" height="912" alt="image"
src="https://github.com/user-attachments/assets/aa3c415d-52de-46b9-b317-e397b481b1b7"
/>
<img width="885" height="697" alt="image"
src="https://github.com/user-attachments/assets/dd96d364-deae-4c56-9fc1-68b5e738ef4a"
/>
<img width="1284" height="646" alt="image"
src="https://github.com/user-attachments/assets/b433f591-d92f-4bea-921c-b231fce2e7d9"
/>

also NO you cannot make the sm sword using the slow recharge shrink ray
<img width="621" height="240" alt="image"
src="https://github.com/user-attachments/assets/75f7d235-33c2-424e-9260-a3cc8c931ab9"
/>
</details>

<details>
<summary>Documentation of all notable loot 11/8/2025</summary>
  /obj/item/clothing/shoes/gunboots/disabler
/obj/item/gun/energy/shrink_ray/one_shot (A shrink way that has a long
recharge time and can only shoot once)
  /obj/item/slimepotion/lovepotion x 2
  /obj/item/slimepotion/genderchange x 1
  /obj/item/slimepotion/slime/mutator
  /obj/item/gun/energy/disabler/smoothbore
  /obj/item/gun/energy/alien/zeta
  /obj/item/gun/magic/midas_hand
/obj/item/autosurgeon/xeno (A autosurgeon that only allows xenomorph
organs, here because it looks unique)
  /obj/item/organ/heart/gland (abductor organs, random.)
  /obj/item/organ/eyes/corrupt
  /obj/item/organ/appendix/corrupt
  /obj/item/clothing/suit/utility/radiation/cbrnsuit x 2
  /obj/item/clothing/head/utility/radiation/cbrnhood x 2
  /obj/item/clothing/gloves/combat x 4
  /obj/item/clothing/shoes/combat/swat x 2
  /obj/item/clothing/mask/gas/atmos/glass x 2 

/obj/item/clothing/under/rank/engineering/atmospheric_technician/nova/utility/advanced
  /obj/item/gun/ballistic/automatic/wt550/p90 x 2
  /obj/item/ammo_box/magazine/p90_mag x 14
  /obj/item/gun/energy/modular_laser_rifle/carbine x 2
  /obj/effect/spawner/random/armory/laser_gun
  /obj/item/grenade/c4 x 3
/obj/machinery/deployable_turret/hmg x 3 (you think these are good, but
they're not, they are really not, they're only good if you hit somebody
with them when they're not expecting it, otherwise people will simply
just avoid it, or if your being defensive of an area this thing will
have you just be a beast.)
/obj/machinery/mounted_machine_gun x 8 (But with no ammo, so theyre only
setpieces, okay well there IS ammo on the map but its anchored, and
theres no way to unanchor anchored items, if fallout thirteen players
cant do it over the course of 4 years then tg players sure cant.)
  
Also hello there it looks like you actually read this section, if you
have dont worry, this PR wont get merged, why? I dont want to salt about
that here.
</details>

🆑
map: added the "heretic" gateway map (it has nothing related to
heretics)
/🆑
2025-12-03 01:04:49 +00:00
MrMelbert 2619b728ba Compact defib can be worn in medical suit storage slots (#94255)
## About The Pull Request

Compact defib can be worn on the suit storage slot of labcoats, medical
coats, surgical aprons, and medical MODsuits

## Why It's Good For The Game

This thing is dope but sucks to use because you have to juggle your
belt.
Allowing docs to wear it on their coat so they don't have to inventory
juggle with their belt would make it 10x more usable.

## Changelog

🆑 Melbert
add: Compact defib can be worn and used on the suit storage slot of
labcoats, surgical aprons, and medical MODsuits
add: Drones and Dex Holoparasites can (hypothetically) wear and use
compact defibs
/🆑
2025-12-02 16:47:27 -07:00
Ghom 0b0c5ea91e Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.

## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.

Currently a WIP as I slowly deal with the unit test reports.

## Changelog

🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
2025-12-02 18:29:01 -05:00
tonty 8c45d4466c [MDB IGNORE] Cleans up AI core structure, un-spaghettis some AI code (#93873)
## About The Pull Request

The AI core structure now fully integrates item/tool interactions and no
longer uses attackby/take_damage overrides. Construction behaviour has
been isolated into its own file.

All handling relating to the AI core's status when shunted has been
turned into signals. For this reason, helper procs for managing core
link state have been made and integrated into the relevant users (APC
shunting, mech takeover). The AI core no longer references the remote AI
mob.

/obj/structure/ai_core/deactivated has been removed from code since it
had no function after refactoring. There was only a single instance of
it being used in a map, which has been replaced with a var edit.

There may be more things I changed, but I'm h
2025-12-02 12:38:51 -06:00
necromanceranne ac6c47f601 Several file changes just to make high frequency blade null rods block mechs, mech melee blocking finally implemented (#94089)
## About The Pull Request

High frequency blades, both null rod variant and admeme variant, can
block mech melee attacks. For the former, that is the only thing it can
block. Great if you're fighting a lot of mechs as a chaplain I guess.
And you're also really committed to the bit.

Weapons that were vibro subtypes are now claymore subtypes. The only
difference here is that they now have 30% block instead of 35% AP.

Null rod high frequency blades are now two-handed. This mostly
determines force changes (10 unwielded, 18 wielded), and mech attack
block chances.

Mech melee attacks respect block...assuming the blocking source can even
block the attack in the first place. Currently, the few sources that can
block/avoid mech attacks are;
- high frequency blades
- energy katanas
- Those staff nullrods (its a holy force field, iunno)
- wizard modsuit shield (and it will eat literally every single charge
it has to do that)
- Sleeping Carp evasion (and only at half the possible chance)
- CQC defense mode (themed as dodging the attack, and also halved)
- probably something I overlooked when I implemented OVERWHELMING_ATTACK
originally and have overlooked here as well.
 
Just think 'could this help avoid being hit by a road roller being
dropped on you' and go with your gut as to whether or not it is
appropriate if you spot something in the wild that seemingly can block a
mech.

## Why It's Good For The Game

> High Frequency Blade

I wanted to elevate the meme and that is as deep as this goes. Also I
wanted to make this two-handed, much like the true version.
The only thing it is lacking is the cool attack functionality, but I'll
be damned if I can get that to work in a sensible fashion for a crew
weapon...

> Vibro subtype

A lot less of these than I thought. And most of them seemed more
appropriate as claymore types anyway.

> Mech Block

I seeded this previously by making mech clamps respect block. I've now
come back to fully implement it in order to facilitate MGR memes.

For the most part, mechs should still enjoy being largely unblocked by
most sources, even from things like operative suit shields, and
certainly not from actual shields (which I've stripped the ability to
block the attack from entirely) and melee weapons.

The sources that can block them do so poorly. Or, in the case of the
high frequency blade, very well and that's pretty much the only thing it
IS good at blocking.

## Changelog
🆑
balance: High frequency blades (both null rod and admin versions) are
able to block melee attacks from mechs.
balance: High frequency blade null rods are now two-handed weapons.
balance: Mech melee attacks can be blocked or avoided by a few rare
sources.
/🆑
2025-12-02 01:13:58 -05:00
Nick 595b9c00b3 Removes Defibrillators from being printable, and adds cmo compact defib as a spy objective. (#94182)
## About The Pull Request
This PR removes Defibrillators from being printable in the techlathe.
Which means the Compact belt becomes CMO exclusive item.
And adds a objective for spies to steal compact belt because it feeds it
into the black market, which other antags can maybe buy and emagg it to
turn it into a reasonable weapon
This pr also makes it so the baseline of roundstarting defibs is 4

## Why It's Good For The Game
Years ago we made defibrillators never printable, and there was no way
to get them unless it was trough cargo, and later we added it to the
techlathe which immediatly voided the cargo crate.
Medical starts with 4 defibrillators medbay usually uses 2, and then the
other 2 go to medical borgs (and theres not really ever a real reason to
print out another since you got plenty).

We also have spefific upgrade modules for medical cyborgs which is
voided by just printing a defib and inserting it into the medical borgs.

TL;DR order it from cargo either 1 using your departmental budget, 2
using your free ordering console, or 3 just from cargo

## Changelog
🆑 ezel
add: Compact Defibrillator is now a Spy objective
balance: Compact Defib is CMO exclusive again
balance: you can no longer print Defibrillators in techlathe (purchase
them via cargo if needed)
sprite: CMO compact defib now looks unique from other ones
map: catwalk defibs trimmed to 4 instead of 6
map: metastation defib added from 3 to 4
map: wawastation defib added from 3 to 4
map: tramstation defib added from 3 to 4
map: nebulastation defibs trimmed from 6 to 4
/🆑
2025-12-01 00:17:21 -05:00
MrMelbert 6ebfbccebb Refactors unique_reskin, deletes retool kit (#93775)
## About The Pull Request

Closes #93635

`unique_reskin` is no longer a list on `/item`, now `/datum/atom_skin`

The actual reskinning behavior has been moved out to
`/datum/component/reskinable_item`

PKC reskinning is now handled via alt-click reskin, rather than via the
retooling kit. The retooling kit has been removed.
There's no limit on how many times you can reskin your PKC (though
perhaps we limit it to one reskin and keep the retooling kit as a way to
allow a miner to reskin it a second time?)

The Ashen Skull unique reskin is still a trophy, and instead unlocks its
unique reskin option in the alt-click radial.

## Why It's Good For The Game

I'm unsure why the retooling kit exists on its own, when it's relatively
cheap and just performs the behavior of alt-click reskinning.

So to keep it consistent with all other forms of reskinning I've just
made it baseline. To accomplish that I refactored reskinning.

The new form of reskinning allows for greater potential in adding
reskins, allowing far more than just an icon state change. Also we can
put it on turfs and mobs and structures now which is cool I guess

There's also the added benefit of being able to see an item's reskins
without needing to instantiate it, which the loadout menu uses to great
effect.

## Changelog

🆑 Melbert
refactor: Refactored item reskinning (the alt-click way), report any
oddities with that
del: Deleted the crusher retool kit, now you can just reskin your
crusher with alt-click. The Skull skin is still locked behind having the
Ashen Skull trophy applied.
fix: Stunswords no longer have an incorrect lore blurb
fix: Fixed loadout item reskinning's UI
/🆑
2025-11-30 19:31:29 -07:00
SyncIt21 39a196824a Enhances algorithm for finding an atom mount (#94076)
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting

## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
2025-12-01 00:50:16 +01:00
Bloop 9c8a60a0b8 Removes some cargo cult string interpolations (#94210)
## About The Pull Request

Macros that are strings do not need to be doing this.

## Why It's Good For The Game

Less improper things to copy paste existing in the codebase
2025-11-30 13:25:45 -06:00
SmArtKar 316a58948c Assembling med/repair/secbots will now put their assemblies in your main hand instead of your offhand, and only do so if you held the original item (#94078)
## About The Pull Request

Bot assemblies will only be picked up if you held the item you attached
the arm/sensor to, and will be put into the hand which you held the
storage item in.
Also changed firebots assemblies to item_interaction

## Why It's Good For The Game

Usually you don't want to pick up the assembly if you're making a bunch
of bots on the ground en-masse, and having the assemblies be put in your
offhand and not your main hand despite the latter just being freed is
weird and clunky.

## Changelog
🆑
qol: Bot assemblies will only be picked up if you held the
medkit/toolbox/helmet/etc in your hands when creating one.
qol: Assembling med/repair/secbots will now put their assemblies in your
main hand instead of your offhand
/🆑
2025-11-30 03:07:31 +01:00
Fghj240 8853e12f2a Weapon rechargers don't wait an extra tick before announcing they're finished (#94196)
## About The Pull Request

Currently they announce they're done if they attempt to recharge and
find out that the battery is already full. This PR makes it so that they
announce after they perform a successful charge that fills the battery
to max. Also gets rid of an unnecessary variable along the way. Also
when a battle rifle finishes recalibrating it'll say that it finished
recalibrating instead of recharging.

## Why It's Good For The Game

You can already inspect the charger to check the weapon's charge and
take the weapon out once it hits 100% even before it alerts you. This
just makes it not wait 2 seconds for no reason.

Also spellcheck.

## Changelog

🆑
qol: weapon rechargers don't wait an extra tick before announcing
they've finished recharging
spellcheck: weapon rechargers no longer claim a battle rifle has
"finished recharging" when it's finished recalibrating.
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-11-29 19:07:05 -07:00
Aliceee2ch 544b73e13a Some welding tools inhands (#94167) 2025-11-29 07:38:29 -05:00
Joshua Kidder 7a3ad79506 All camelCase (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case. UNDERSCORES RULE! (#94111)
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.

<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>


I'll upload the .cs script I used to do it shortly.

## Why It's Good For The Game
Just minor code cleanup.

Script used is located at https://metek.tech/camelTo-Snake.7z

EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
    static async Task Main(string[] args)
    {
        var readFile = new FileStreamOptions
        {
            Access = FileAccess.Read,
            Share = FileShare.ReadWrite,
            Options = FileOptions.Asynchronous | FileOptions.SequentialScan
        };
        FileStreamOptions writeFile = new FileStreamOptions
        {
            Share = FileShare.ReadWrite,
            Access = FileAccess.ReadWrite,
            Mode = FileMode.Truncate,
            Options = FileOptions.Asynchronous
        };
        RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
        Dictionary<string, int> changedProcs = new();
        string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
        Regex camelCaseProcRegex = new(regexPattern, regexOptions);

        string snakeify(Match matchingRegex)
        {
            var vals =
            matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
            var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
            string logString = $"{vals[0]} => {newVal}";
            if (changedProcs.TryGetValue(logString, out int value))
            {
                changedProcs[logString] = value + 1;
            }
            else
            {
                changedProcs.Add(logString, 1);
            }
            return newVal;
        }
        var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();

        // uses default ParallelOptions
        // https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
        await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
        {
            var reader = new StreamReader(filePath, readFile);
            string oldContent = await reader.ReadToEndAsync();
            string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
            if (oldContent != newContent)
            {
                var writer = new StreamWriter(filePath, writeFile);
                await writer.WriteAsync(newContent);
                await writer.DisposeAsync();
            }
            reader.Dispose();
        });
        var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
        foreach (var pair in logToList)
        {
            Console.WriteLine($"{pair.Key}: {pair.Value} locations");
        }
    }
}

```

## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
2025-11-27 15:50:23 -05:00
FalloutFalcon cee8aae62d More /living/ abstract_types (#94092) 2025-11-27 06:24:16 -07:00
san7890 8400284868 Illusion Basic Mob Refactor (#93860)
## About The Pull Request

Another relatively simple simple_mob to basic mob refactor. I wish more
people were doing these since I was saving these for people to get their
feet wet, but I think it's better to pivot away from that and just have
only the gargantuan ones outstanding (since those ones are pretty much
their own framework).

I also delayed this one because we didn't actually have the AI framework
available 1-2 years ago for this to be seamless and easy, but now we
have easy fleeing functionality so that's an easy plug and play.

This rework contains the following:

* General code readability changes and standardization (i.e. removing
single letter vars, `SECONDS` defines)
* Moves more stuff to subtypes instead of having it be on parent
* Removes the necessity for define "attack modes", that's on subtypes
now
* Fixed instances where args weren't defined. I think cult apparitions
via the mirror shield have been much weaker than what they were
originally intended to, so I changed it to what I thought was correct. I
can change the health to be down but it really doesn't make sense as a
lot of the args were not standardized (ideally we would have more
subtypes). I can change this back to the original arg order, let me
know.
* Clones now replicate on damage taken as well as when they attack. I
wanted to tweak this around more but this was originally added since I
confused myself, but it gave a more realistic mitotic effect I liked
more for the replicating clones.
## Why It's Good For The Game

If we want more flamboyant mirage escapes or sneaky clone AI behavior,
it is now far easier to implement. It's very simplistic at the moment
but is pretty much fully featured and representative of the simple mob
version of illusions. They were already laden to the item/mob that was
spawning them in anyways, so this is really the most simple stuff we got
going on.

I tested this with the mirage grenade, reactive stealth armor, and the
mirror shield. I have no clue how the heretic stuff works but it appears
to be a really simple framework plug-and-play so no real worries there I
think.
## Changelog
🆑
refactor: The Cult of Nar'Sie realized that they were installing the
mirrors on their mirror shields the wrong way around, thus altering the
makeup of their mirror clones health, damage, and re-replicability.
refactor: In response to the recent updates in clone magic, Nanotrasen's
Stealth Reactive Armor should now generate more convincing clones.
/🆑
2025-11-26 13:02:00 +11:00
Leland Kemble 042fc47983 Fixes borg RTD (#94096)
## About The Pull Request

It's the same problem.

## Why It's Good For The Game

fixes #94095
fixes #94093


## Changelog
🆑

fix: cyborg RTD works again

/🆑
2025-11-25 11:33:35 -05:00
Alien 371e9cb281 Gives the bartender a service plumbing constructor. (#93928)
## About The Pull Request

Puts one service plumbing constructor in bartender's wardrobe vendor
Lets plumbing constructors actually build the chemical teleporters
(before this only the sender could be made)

## Why It's Good For The Game

An alcohol factory isn't anything game changing. Not forcing the
bartender to wait for very niche research nobody will ever do to play
with it is a good thing

## Changelog
🆑 Cat
balance: Bartender's wardrobe vendor starts with a service plumbing
constructor
/🆑

---------

Co-authored-by: John Doe <markkavalerov87@gmail.com>
2025-11-24 09:47:14 -05:00
SmArtKar b27d9e0668 Improves borg hypo reagent handling (#94081)
## About The Pull Request

We don't need to create a new reagent datum every time, plus this allows
us to transfer data between two containers, if reagents with data
somehow end up in a borg hypo.

## Changelog
🆑
code: Improved borg hypo reagent handling
/🆑
2025-11-22 11:46:13 -07:00
ArchBTW 7590072570 Removes the limit for how many times you can emag an emag (#93916)
## About The Pull Request

Original PR [#84219](https://github.com/tgstation/tgstation/pull/84219)

Removes
<img width="499" height="59" alt="image"
src="https://github.com/user-attachments/assets/ba7d283f-2df3-47f5-999b-9dddf4f59f7a"
/>
(changed to 127 - non-player facing (realistically). prevents overflow
incase someone somehow manages to stick 128 emags onto eachother)

<img width="677" height="135" alt="Screenshot 2025-11-12 232035"
src="https://github.com/user-attachments/assets/5b962f8a-5f4a-47f7-91ce-46f4de66ed9b"
/>

<img width="765" height="456" alt="Screenshot 2025-11-12 231114"
src="https://github.com/user-attachments/assets/55b50dc5-eba3-475a-9e27-a647922d2e4a"
/>


<img width="1858" height="982" alt="Screenshot 2025-11-12 231814"
src="https://github.com/user-attachments/assets/8a58df5d-476f-4b74-b550-6799fa9702f3"
/>


## Why It's Good For The Game

- Progtot was removed, so there is less TC to go around
- Niche use case - has to be willing, and there has to be an emag
discount, or traitors coming together to combine TC
- Fun

## Changelog

🆑 ArchBTW
del: Removes the limit for how many times you can emag an emag (6->127
max)
/🆑
2025-11-20 23:25:04 -05:00
SyncIt21 4c4f5cbd6a [NO GBP] Some miscellaneous RCD fixes (#94008)
## About The Pull Request
Sometimes we notice our mistakes only after the
[PR](https://github.com/tgstation/tgstation/pull/93945) gets merged.
This one's one me sorry!!

- The exosuit RCD now uses charge again when not connected to silo link
- The deconstruction RCD sound fx plays again for the borg RCD & RTD

## Changelog
🆑
fix: exosuit RCD uses charge without silo link
fix: deconstruct sound fx plays for borg rcd & rtd
/🆑
2025-11-20 23:21:44 -05:00
necromanceranne d76d2f5438 Laser Gun Update: Deep Lore, Gun Variety, Pew Pew (#93520)
## About The Pull Request

Updates the laser gun into four proper subtypes: Standard, Pistol, Rifle
and Carbine.

<img width="229" height="210" alt="image"
src="https://github.com/user-attachments/assets/12c03076-8ebf-4d87-8c98-6a8cce6821db"
/>

Current sprites are pending a palette change.

**Standard:** Functions as you would expect. Same as ever.

**Pistol**: Lower charge, 20 force, normal sized, recharges faster.

**Carbine**: 15 force, 26 mag, two round burst. Projectiles flight
slightly faster. Cannot dual-wield.

**Rifle**: 20 force. 40 mag. Two round burst. EMP resistant (not
immune). Projectiles fly slightly faster. Cannot dual-wield (not that
you need to).

All but the rifle can be sourced from cargo. You can also buy the sovl
version of the laser gun if you're especially nostalgic.

### Armory Changes

The Armory now can potentially spawn either pistols, carbines or
standard. The weighting leans closer to spawning carbines and standard
as opposed to pistols.

### Lore Dump

The laser line of weapons now all have lore. That rich, deep lore that
every game needs and is totally not important at all to the meat and
potatoes of the game. I'm paid by the hour ($0.00)

### Code Tidying

Lasers are old and a total mess code-wise so we've tidied up while we're
here.

## Why It's Good For The Game

Variety is the spice of life and also some of these weapons could have
used a face lift. Especially the laser carbine. Both functionaltiy wise
and appearance wise.

A bit of randomness in the armory means some rounds might have unique
outcomes compared to others. Sometimes, items in cargo don't see
particularly much use, so peppering in a few random potential deviations
can maybe nudge people to utilize variant gear on future rounds.

I'm obsessed with writing too much information. I blame Hatterhat.

## Changelog
🆑
add: Three variants of the laser gun; Carbine (replacing the existing
one), Pistol and Rifle! Find it (possibly) in your armory today!
balance: The armory laser guns might be different variants of the laser
gun, rather than always being the standard. The standard is the same as
ever, even if it looks different.
add: If you care, the sovl version is available as a goodie. And in the
hands of pirates...
spellcheck: Lore! LORE FOR LASER GUNS! LOOOORE! Examine laser guns
closely and you might learn more about them.
balance: The new set of laser guns come with brand new sprites.
/🆑

---------

Co-authored-by: StaringGasMask <62149527+Exester509@users.noreply.github.com>
2025-11-20 22:21:16 -05:00
MrMelbert 09c4d53cd8 Fixy borg rcd (#94047)
## About The Pull Request

Fixes #94046

Pretty self explanatory fix

## Changelog

🆑 Melbert
fix: Fixes borg RCD
/🆑
2025-11-20 18:33:35 -07:00
FalloutFalcon 5eeb3e4d53 makes xenobio stuff use interact_with_atom (#93918)
## About The Pull Request
Makes slime potions, injector, and cookies use item_interaction.
generizices behavoir that potions typed under
`obj/item/slimepotion/slime/` only affect slimes, moves the handful of
potions that did not do that out of that type.
removed a random type casting for slime cookies to verify there human
before it checks for `TRAIT_AGEUSIA` as there is no reason other mobs
wouldn't be able to taste it.
do to the refactor you wont "bash" a lot of items if the interaction
fails.

## Why It's Good For The Game
<img width="439" height="68" alt="image"
src="https://github.com/user-attachments/assets/f398fb6c-8cbd-4092-9a64-8cccce87f8b6"
/>
2025-11-20 19:06:23 -06:00
UwUMacaroniTime 47328b6fc2 Nerf Cyborg Hypospray (#93743)
## About The Pull Request
Nerfs Cyborg hypospray:
 - +20% recharge time (from 10s to 12s)
 - +50% charge cost (from 0.5 Joules to 0.75 Joules)
 - -17% reagent volume (from 30u to 25u)

## Why It's Good For The Game

I love mediborg, but the hypospray needs to be nerfed. It overshadows MD
like crazy and allows you to stabilize upwards of three people by
yourself at once. In my opinion, one of two things needs to happen:
 - Reagents recharge slower and have a lower max capacity
- The charge cost of reagents is increased substantially to be *closer*
(note: Not nearly at the same level) to a tool like the borg RCD, where
a great deal of spam will have a noticable impact on your battery.

Either of these, if not overzealous, would reduce mediborg's ability to
heal multiple critical people at once without majorly impacting their
ability to heal slightly injured people or a single critical patient.

This PR mostly leans to the first solution. I don't expect this PR to
majorly impact the viability, but it should be a good "jumping off
point" to test the waters.

## Changelog

🆑
balance: Nerfed cyborg hypospray across the board, notably refilling
chems 20% slower.
/🆑
2025-11-20 17:20:34 -05:00
ArchBTW a767e5b10a Increase Captain's Sabre damage (15 -> 20) (#93996)
## About The Pull Request

Increase Captain's Sabre damage (15 -> 20).

For reference, a toolbox deals 13 (*unarmored).

## Why It's Good For The Game

- Captain's Sabre deals 15 Brute - unarmored comparison: miner's
survival knife(15), chaplain's base nullrod(18)/chap claymore(18+30%
block), craftable spears (18-21), vibro(18+35% AP) - Not including the
sabre's assistant buff 'bane effect'.
- Exclusive one-time item, given to the most important person, Captain.
It's supposed to be a sharp, scary sword.
- Little reason to use as a melee for it's damage. Usually just used as
off-hand blockchance, since it's damage is too low.
- Bulky, requiring you to take up your whole belt (and the special
sheathe alongside it).
- Git blame: The base damage has been left untouched for I believe 9
years (/ever since it came out).
- There is a craftable sub-variant of the captain's sabre, although a
meme, this is the 'powercrepe' - it's damage is comparable to an
Esword(30), double that of the Sabre's 15. It also has increased armor
penetration and block chance.
- Melee is always risky (stun territory), and requires a high skill cap.
Should be rewarded for opting into into this playstyle.
- Sabre suffers melee cooldown. For a sword with such status, it
currently takes too long to be effective in practice.

## Changelog

🆑 ArchBTW
balance: Increase Captain's Sabre damage [15->20]
/🆑

---------

Co-authored-by: Aki Ito <11748095+ExcessiveUseOfCobblestone@users.noreply.github.com>
2025-11-20 17:18:01 -05:00
Hatterhat c695c13b77 actually makes it so you can arm guncase evidence disposal bombs (#94015)
## About The Pull Request
About what it says on the tin. I don't know how long it's been broken
for but now you can finally use this as the funny explosive it was
always meant to be.

## Why It's Good For The Game

haha guncase go boom

## Changelog

🆑
fix: Makarov gun/ammo cases (the ones with the evil red S and the
evidence disposal bomb) no longer require you to be stunned to arm the
evidence disposal bomb.
/🆑

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2025-11-19 21:47:52 +01:00
SyncIt21 81427cd5cf Unit tests, refactor & realignment for map loaded wall mounts (#93662)
## About The Pull Request
This 1st has to be PR'd so the integration tests can point out all
wallmounts that could not find a support structure to mount on. I then
will do many map edits to align them onto the closest atom

Yes we no longer use wall mount but atom mounted component. All objects
that are mounted on windows/tables & fences now also fall off when
destroyed

It'll probably be a WHILE before I can fix all wall mounts. Long day.
Expect me to misalign many stuff to fix failing CI so make sure to
provide suggestions when possible

Improved wallmount code overall
- Fixes #93793


## Changelog
🆑
fix: fixes all incorrectly maploded wall mounts that aren't actually
hanging on any support structure
fix: objects mounted on tables, windows & fences also fall off now when
destoryed
qol: lights can be mounted on windows
qol: cameras can be mounted on windows
qol: buttons can be mounted on tables
refactor: improved how wall mounts interact with objects as a whole
report bugs on github
/🆑
2025-11-18 22:37:12 -07:00
Leland Kemble 9f1d18dbdf Prevents you from putting yourself in the DNA vault multiple times (#93905)
## About The Pull Request

You can't put more than one of the same dna in the vault, because the
probe checks when it scans you that your dna isn't in the probe's
storage or the vault's storage. But it doesn't check other probes, so
multiple probes can have the same dna, and can all upload the same dna
to the vault for duplicate DNA.

This PR adds a check when you upload to a vault that throws out dna
already in the vault before it's counted.

## Why It's Good For The Game

Duplicate DNA is clearly not intentional

## Changelog
🆑

fix: You can no longer duplicate DNA for the DNA vault objective by
scanning yourself on several probes at once.

/🆑
2025-11-19 05:10:58 +01:00
MrMelbert 1728bcaee6 Husk reports prioritize incurable forms of husking (#93998)
## About The Pull Request

Husk report priority is now ling -> unknown -> burns rather than burns
-> ling -> unknown.

## Why It's Good For The Game

Stops doctors from wasting time by hiding sources

## Changelog

🆑 Melbert
qol: Other forms of being husked are now reported before burns
/🆑
2025-11-18 17:46:25 -07:00
SyncIt21 7e31936558 Some RHD(Rapid Hand-Held Device) Fixes (#93945) 2025-11-17 23:37:02 -07:00
Roxy 4d9471ee95 Fix grilled cheese sandwich never burning [MDB IGNORE] (#93957)
## About The Pull Request

`/obj/item/food/sandwich/cheese/grilled` inherited
`/obj/item/food/sandwich/cheese`'s `make_grillable()` definition so the
product of grilling a grilled cheese sandwich was a grilled cheese
sandwich. Repaths grilled cheese to not be a subtype of cheese

## Why It's Good For The Game

grilled cheese sandwiches should burn eventually

## Changelog
🆑
fix: fixed grilled cheese sandwich grilling into grilled cheese sandwich
/🆑
2025-11-17 22:55:38 -07:00
muchatras f8d33fef1a fixes spraycans left-click (#93932)
## About The Pull Request
The spraycans were rendered unable to paint some items via left-click,
it forced the use of right-click which paints all over the object
instead of primary parts.
## Why It's Good For The Game
Crayons are available everywhere to rename stuff, the spraycan
left-click recoloring shouldn't have vanished so soon

Here's an example:

The regular det's revolver:
<img width="67" height="66" alt="image"
src="https://github.com/user-attachments/assets/6b6c422b-ecbd-4ed5-adf0-0b5c524204db"
/>

Spraycan left-click:
<img width="65" height="68" alt="image"
src="https://github.com/user-attachments/assets/b3b952f2-ac8d-42a5-8805-d41b9ef42125"
/>

Spraycan right-click:
<img width="65" height="63" alt="image"
src="https://github.com/user-attachments/assets/c5c6f7d6-da91-48c9-a920-278939ff2f0a"
/>

And crayons/pen can still be used to change description and name.
## Changelog
🆑
fix: fixed the spraycan left-click
/🆑
2025-11-15 18:00:10 +01:00
necromanceranne 500b74dded Small spear change: slightly better stats but they fall apart (#93685) 2025-11-14 20:32:09 +01:00
RikuTheKiller c7cb0674cc Preliminary blood refactor (#93854)
## About The Pull Request

Moves all blood handling into procs and adds ways to easily hook into
basically every basic blood behavior.

This PR is not meant to fix every single case of janky blood logic in
the game. The main point and motivation of this PR is to add hooks for
blood behaviors. This allows for way more flexibility with blood code.

I am not going to fix our 3000 instances of single-letter vars, wacky
blood transfers, etc. This is just the groundwork for future PRs to
build off of, and by itself, should do very little to change blood
behavior.

I also added a rigorous set of unit tests for verifying that all of the
basic blood volume procs work correctly.

## Why It's Good For The Game

Previously, blood was handled via directly reading/writing
[var/blood_volume]. This was INCREDIBLY inconsistent and there was no
way to hook into it. This PR makes blood handling way more consistent,
which is great for all sorts of features.
2025-11-13 11:45:36 -06:00
Ghom 8c89b371af [NO GBP] Fixes ear protection equipment doing nothing. Flashbangs don't work well in vacuums (#93866)
## About The Pull Request
Turns out ear protection was subtracting the values rather than adding
them to the protection, and I didn't notice that much until later (now).
Also flashbangs don't have much of a bang (flashbangs without the bang
basically) when there's no air.

## Why It's Good For The Game
Also everyone should know that IRL sounds don't work well in vacuums cuz
there are no molecules to carry sound waves around. Unfortunately we are
not so refined about it in game, which is a fucking shame. This is a
very simplistic implementation than anything. The fact that I'm adding
it to this PR as well is because being in a vacuum gives you plenty of
sound protection now. It's about *some* consistency.

## Changelog

🆑
fix: Fixes ear protection equipment doing nothing. 
balance: Detonating a flashbang in space or any environment with little
to no air no longer stuns anyone NOT on the same tile as the flashbang
with loud bangs. Flashing still works as intended though.
/🆑
2025-11-13 22:22:39 +11:00
LT3 1ea5608fe3 Fixes shears not allowed surgery tray (#93900)
## About The Pull Request

- Fixes shears being unable to be stored in the surgery tray
- Adds shears to the debug surgery tray on runtimestation

## Why It's Good For The Game

- Shears can be consistently stored like other surgery tools
- Saves time debugging bodyparts with runtimestation

## Changelog

🆑 LT3
fix: Shears now able to be stored in the surgery tray
/🆑
2025-11-13 00:33:01 +01:00