Commit Graph
6066 Commits
Author SHA1 Message Date
Alexis 88e84645b1 Merge commit '6b52b564a50e4f3091470529c683587e5de15d49' into upstream-sync-7-22-2026 2026-07-22 13:39:09 -04:00
ee6818f4df Replaces Immunosilence with sepsisillin, nerfs aggressive healing. (#96972)
## About The Pull Request

Attempts to balance aggressive healing by slightly cutting back on its
incredible constant healing (which is still doable because I don't have
the heart to kill virology uses) and removes immunosilence because we
already have a chem that does that. Sepsisillin pills are mapped into
virology to take its place.

## Why It's Good For The Game

With immunodeficiency, an aggressive healing virus with high severity
becomes incredibly powerful. The combination of chills and fever to buff
severity while they cancel each other out along with a second symptom
like nocturnal regen (because you have the stats for it) makes
aggressive healing too powerful in the right situation but too weak for
everyone else.

Aggressive healing was given high stats under the assumption that they
were necessary to resist natural recovery in hosts that aren't
immunodeficient. That was probably a mistake since it also makes it a
buffer symptom stronger than any other, so its stats are heavily tuned
down.

Immunosilence was removed (because it's just sepsisillin) and
sepsisillin pills were mapped into virology in order to let people
without immunodeficiency be able to better benefit from aggressive
healing. Immunosilence was rather ineffective at its job because it
still let viruses regress to their first stage, which disables your
healing. Sepsisillin can also be used for testing viruses on monkeys.
Pills were added to virology because sepsisillin is a pain to make and
you can also use it to test on monkeys. The whole bottle should last one
person 23 minutes and 20 seconds.

Also I removed the no_self_cure trait that is now unused (it was given
by immunosilence) and changed the description of the aggressive healing
severity threshold to clarify that it starts scaling with any amount of
positive severity, not just after the first point.

## Changelog

🆑
del: Removed ImmunoSilence and its trait
balance: Aggressive healing has much lower stats
fix: fixed a few things
map: Added sepsisillin pills to virology
spellcheck: Clarified the description of aggressive healing
/🆑

---------

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2026-07-17 00:05:06 +02:00
bc6233a03f Chemical reactions are no longer exothermic by default (#96963)
## About The Pull Request

This might break some stuff.

I originally was trying to fix accidentally boiling plasma when trying
to make virus plasma, but then I realized that the reason it happens in
the first place is because every reaction in the game is exothermic.
Like, every reaction. I tried mixing water and saltwater and the mixture
heat up by 50 kelvin. That's a little wack, so this PR makes them stop
heating up.

Medicines remain exothermic, and food/drinks already had their own
thermic_constant set. I also manually added 50 thermic_constant to
things like acetone or phenol that are used in chemistry. The only
things affected by this change are miscellaneous chemicals like mixing
salt water, ice melting into water, and other stuff that I might've
forgotten about. Since temperature doesn't affect purity and the
reactions that care about temperature set their own thermic_constants,
this shouldn't do too much.

## Why It's Good For The Game

Literally every chemical reaction being exothermic by default is a
little ridiculous.

## Changelog

🆑
fix: Many chemical reactions are no longer exothermic.
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2026-07-16 14:57:34 +02:00
SmArtKarandGitHub 677f070995 Elevates (almost all) inventory variables from /carbon to /human (#96955)
## About The Pull Request

Moves all inventory slots but handcuffs/legcuffs (as those can be used
by xenos) from ``/carbon`` onto ``/human``, as xenos do not use any of
those inventory slots, only leaving them in use by humans. Their
presence on ``/carbon`` is an artifact of times when monkeys weren't
humans, and some of the slots had to be shared by all carbons.
In some places I've used ``get_item_by_slot`` rather than swapping
checks to ``ishuman`` for simplicity's sake, in some places it might not
be the most optimal solution but in cases like help act any other
solution would require a refactor of the whole (massive) proc.

## Why It's Good For The Game

Cleaner/more sensible code, one step closer to fully datumized
inventories.

## Changelog
🆑
refactor: Moved a lot of human-specific inventory code onto human mobs,
report if inventories break!
/🆑
2026-07-16 03:03:50 -07:00
Aliceee2chandGitHub c7408ce841 Mapping previews tool for mapper's mapping needs (#96872)
## About The Pull Request

Makes more machinery using MAP_SWITCHes so their fancy preview icons
could be displayed in SDMM. MAP_SWITCH takes original icon+icon_state of
machinery as first argument and icon+icon_state (basically a machinery
part because the naming system, like `MAP_SWITCH("computer",
"/obj/machinery/computer/slot_machine")` ) from
icons/obj/fluff/map_previews.dmi

Adds a tool (subsystem) for that need that generates preview icons for
stuff that has overlays. To include them in preview generating you have
to set specific variable to TRUE.


## Why It's Good For The Game

Lets us do this instead of black boring consoles: 
(before)
<img width="641" height="575" alt="image"
src="https://github.com/user-attachments/assets/35fc5a19-bc24-4c02-957a-43ddef86e684"
/>
(after)
<img width="641" height="575" alt="image"
src="https://github.com/user-attachments/assets/99310823-747f-4e0a-acf8-60abcc8f2ed1"
/>


## Changelog

🆑
qol: Made machinery with overlays actually be properly displayed in SDMM
editor.
/🆑
2026-07-15 12:48:22 +00:00
CabinetOnFireandGitHub ef8cfb8b8d Fixes some procs that sleep inside SHOULD_NOT_SLEEP procs (#96959)
## About The Pull Request

I fixed should_not_sleep() locally as it wasn't catching all cases. I
PR'd this but want to do some damage control before its merged so our
linters dont fail on master

This revealed some procs that are sleeping but could run in
SHOULD_NOT_SLEEP procs.

I'll probably keep doing more of these.

## Why It's Good For The Game

prevents procs that shouldnt nap from napping

## Changelog

🆑
fix: Fixed some sleeping procs that could run in procs that arent
allowed to sleep
/🆑
2026-07-14 21:12:31 +02:00
JacquerelandGitHub 2cf56ab1e1 Allows gorillas to kill themselves with items (#96736)
## About The Pull Request

This PR moves most of the code for using an item to commit suicide from
`human` to `living`, so that anything with hands can use what it is
holding to commit suicide.
This was surprisingly painless, as most `suicide_act` procs were already
written without the assumption that the person killing themselves was a
human even though they couldn't be anything else.

This might occasionally mean that in some cases (like drones) it may
reference anatomy that they don't have (like necks) but I think that's
not a big deal and don't worry about it.

## Why It's Good For The Game

It's funny.

## Changelog

🆑
balance: Anything with hands can now use the things it is holding to
commit suicide
/🆑
2026-07-09 16:55:53 +02:00
MrMelbertandGitHub a6500ba33e Fix BSRPED potentially bricking reagent containers (#96870)
## About The Pull Request

Fixes #96867
Reverts part of #88909

The PR removed the signal in favor of flipping off reagent flags on
insert, and restoring flags on removal
This caused the linked issue: We didn't check if the thing we were
restoring was a cell, so we'd just flip off a bunch of flags, leaving
the cell's reagent container with `NONE` flags set

However in fixing this, I noticed a pretty core issue with the idea of
flipping off flags, and that's "well what happens if something else
messes with the reagent container's flags"? Sure enough, if you lid and
unlid a beaker in an RPED, you completely bypass the exploit check and
can bomb like days of old

So I reverted the flipping of flags back to a signal. It was the easiest
way to handle the "flags" conflict without adding a bunch of traits or
whatever.

## Changelog

🆑 Melbert
fix: Fix the BSRPED potentially bricking reagent containers on removal
fix: Fix a potential exploit with BSRPED and reagent containers
/🆑
2026-07-09 16:34:26 +02:00
SmArtKarandGitHub 7e12ea8e6f Fixes cube monkey cap runtimes (#96861)
## About The Pull Request

Closes #96842
Could've moved INITIALIZE_HINT_QDEL to the very end but then we'd still
be doing the expensive carbon initialization on monkeys about to be
deleted, better to just move the check outside into relevant code.

## Changelog
🆑
fix: Fixed cube monkey cap runtimes
/🆑
2026-07-08 19:58:51 +02:00
Leland KembleandGitHub ad860bc23e Moves a great many more things from attackby() to item_interaction() (#96657)
## About The Pull Request

30 more(files, counting by files now). In combination with the other pr
this means that we are now at more `item_interaction()` overrides than
`attackby()` overrides, not counting `[tool]_act()`s.

Changes beyond conversion:
You can no longer repeatedly put gravitational or bluespace cores into
the gravity and wormhole guns, respectively. One's enough.
A runtime that occured when boxcuttering a package open no longer occurs

## Why It's Good For The Game

300 GBP for the cost of 3. A steal if I've ever seen one. You should get
in on this.

## Changelog
🆑

fix: You can no longer repeatedly put anomaly cores into the anomaly
core guns
fix: A runtime that occured when opening a package with a boxcutter no
longer occurs.

code: 30 files have been moved from attackby() to item_interaction()

/🆑
2026-07-07 22:02:24 +02:00
FalloutFalconandGitHub e7fc4366a7 Fixes update_overlays() being called by itself (#96825)
## About The Pull Request
calling this proc by itself SHOULD do literally nothing as all it does
is builds and returns a list of icons

I wonder if this changes anything.
## Changelog
🆑
code: Ensures some code actually updates overlays instead of return a
list of them to nobody
/🆑
2026-07-07 09:18:47 +02:00
GhomandGitHub 6eb2d1674a Implementing materials checks for techweb designs. (#96257)
## About The Pull Request
In similar fashion to what was done with crafting recipes last year,
this year it's time for techweb designs and printed items to be audited.
This is mostly just about consistency, we've a lot of items that can be
printed by protolathes, autolathes, circuit printers and techfab etc.
However they almost all (except most stacks, mainly) have custom
materials that do not match in one way or another with the materials
used by the design, which is what this PR is for.

"But items printed from lathes etc. already get the mats used to make
them." Yes, they do, however that isn't the case for items of the same
type that were spawned in some other way (cargo shuttle, space/maints
loot, mapped, admins), this create a subtle discrepancy. It isn't a huge
deal (in spite of the size of this PR, ton of designs), but given that I
have done something similar with crafting recipes before, I may as well
give it a second arc of some sort and bring things to completion. And
fix a few possible oversights.

TL;DR consistency and stuff

## Why It's Good For The Game
Consistency, unit test checks to make it harder not to be consistent in
the future. Still has a few TODOs like:

- [x] Fixed newly printed, fully charged RCDs costing less than the RCD
cartridges required to fully charge one. EDIT: I had to tweak the newly
added RDD as well because it suffered from the same fundamental issue.
- [x] Fixed plates being made of iron and yet shattering like ceramic
ones. A new subtype for metallic ones has been made.

## Changelog

🆑
refactor: Refactored a few things with techweb designs (the ones for
autolathes, protolathes, circuit printers, mechfabs etc.) to make sure
that the materials of items that can be made from these designs more
closely match the materials used to make them.
fix: Lizard fries no longer need a plate to be made, like all other
treats that used to require plates in a distant past.
balance: Tweaked the materials cost of RCD, RDD and RCD cartridges.
image: Oven trays now have a more metallic hue.
balance: Plates printed printed from lathes won't shatter like ceramic
ones, in virtue of them being made out of iron instead.
/🆑
2026-07-06 00:13:02 -07:00
f4512b89a9 Add screentips for beaker assemblies (#96784)
## About The Pull Request

Add screentips for toggling the lid of a beaker and the different parts
of building a beaker assembly

## Why It's Good For The Game

I didn't even know you could toggle a lid

## Changelog
🆑
qol: added screentips for beaker assemblies
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2026-07-05 07:27:50 +02:00
RoxyandGitHub c2628a9644 Fix mousetrap beaker assemblies not activating when container is opened (#96783)
## About The Pull Request

Beaker needs to pass `on_found` down to the assembly

## Why It's Good For The Game

Fixes #95826 

## Changelog
🆑
fix: fixed mousetrap beaker assemblies not triggering when container is
opened
/🆑
2026-07-04 20:05:44 +02:00
SmArtKarandGitHub cb10c13541 Anchors nutraslop trays (#96745)
## About The Pull Request

Closes #96695

## Changelog
🆑
fix: Anchored nutraslop trays
/🆑
2026-07-04 20:03:39 +02:00
ff006aa4a5 verb macro system (pr 1/3) (#96720)
## About The Pull Request

just macro-izes all the usages of verbs in the codebase as a
pre-requisite to my follow up pr that serializes all the verbs arguments
so we can tgui-ify the command bar, so we can then put it on the
onscreen map.

this also basically does the same as #94487 so can easily be integrated
into the verb queueing stuff... but does not actually do any verb
queueing by itself. basically im just trying to be
https://github.com/tgstation/tgstation/labels/Atomic
## Why It's Good For The Game
it doesn't really do anything by itself but it does let us do more stuff

## Changelog
🆑
code: the backend to all verbs in the game has been played with, please
report any issues to github
/🆑

---------

Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
2026-07-04 02:45:07 -04:00
cb87e54d93 Lung cleanup ft. minor suffocation tweak (#96659)
## About The Pull Request

### Notable changes

Before: When taking suffocation damage, 3 oxyloss damage is dealt, or
0.66 damage if below 0 health (soft crit threshold). If below 0 hp, and
you have `NOCRITDAMAGE`, gets nullified.
After: When taking suffocation damage, 3 oxyloss damage is dealt,
reduced if you had a partially successful breath (i.e. 75% of a breath =
0.25x damage) or are in soft crit or hard crit (0.22x less damage). If
in crit, and you have `NOCRITDAMAGE`, gets nullified.

Before: You skip 1 in every 4 breaths when your health is below 0 (soft
crit threshold), and skip every breath when your health is below -30
(hard crit threshold)
After: You skip 1 in every 4 breaths when in soft crit, and skip every
breath when in hard crit

Before: You don't heal from successful breaths when below 0 health (soft
crit threshold)
After: You don't heal from successful breaths when in soft or hard crit

### Other changes

- Removed `gasp` from losebreath processing, ie removed chance to gasp
twice in one tick when choking.
- Deletes `respiration_type`s
- Deletes `crit_stabilizing_reagent`
- Deletes species `breathid`, replaces it with `get_breath_type` that
checks the species' lungs

## Why It's Good For The Game

- There was a strange inconsistency where being in crit would
drastically reduce the amount of suffocation damage you were dealt, but
only if you were not breathing. If you were somehow breathing, you took
the full damage. I thought this was a little obtuse, so I wanted to
change it to be consistent: Being in crit is just a multiplier.

- Making them check for `stat` instead of `health` means they affect
people with `NO_SOFTCRIT` or `NO_HARDCRIT` nicer.

- See above.

- Really just to be cleaner, handle gasping in one place.

- I'm not sure why we have `respiration_type`. The only time they're
(practically) referred to is in reagent handling, but there are no
reagents that set it anything but `ALL`. All it does is make our oxyloss
handling made more complicated and harder to read for no purpose. So I
decided to axe it - I think anything special handing that should arise
should just have some bespoke checks instead.

- Nothing set this value to anything else. And guess what, if you
changed it, epinephrine still worked because it applies `NO_CRITDAMAGE`.

- Species de-hardcoding. Makes it easier to add new breath types. 


## Changelog

🆑 Melbert
balance: Suffocation damage is slightly more consistent now: You take 3
oxyloss per suffocation tick, reduced for partially successful breaths
and or if you are in crit. Alternatively, if you are in crit and you
have epinephrine/atropine in your system, it gets nullified entirely.
code: Cleaned up lungs a bit, particularly relating to abnormal lungs
like plasmamen or fish, report any oddities with them.
del: You no longer have a chance to gasp twice in one suffocation tick.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: san7890 <the@san7890.com>
2026-07-02 01:59:27 +00:00
SmArtKarandGitHub 2867e823bc Fixes a few incorrect shuffle() usages (#96675)
## About The Pull Request

Both wilderness and eigenstate treated shuffle() as shuffle_inplace()
2026-07-01 15:07:43 -05:00
GhomandGitHub adf838c32a Holidays content: Kitchen has more ingredients on some holidays, more mail items, special bar kegs on St Patrick Day, Beer Day and Talk-Like-a-Pirate Day. (#96509)
## About The Pull Request
This PR adds a simple holiday spawner type that can be used for objects
that are only spawned if the holiday they're associated with is being
celebrated. Right now it has three subtypes, all related to the kitchen
(liquid ingredient, powdered ingredient, meat ingredient).

The involved holidays are the fictional tiziran and mothic festivities
Atrakor's Might and Fleet Day. Extra stuff is also spawned on Bee Day
and Beer Day. On Vegan Day, the monkey meat slabs in the meat fridges
are replaced with plant-based meat slabs (killer tomato slices and pod
people meat, plus veggies) and the fridge is renamed from "meat fridge"
to "vegan fridge".

This PR also adds a few more holiday-specific mail objects such as
Speak-Like-a-Pirate Day, Fleet Day, Atrakor's Might, Chernobyl's
Disaster Anniversary (it's just a geiger counter), Monkey Day and
Draconic Language Day.

EDIT: I've decided to make the bar backroom beer keg into a spawner that
will spawn special kegs on specific days (otherwise it's a 1 in 25
chance). These kegs can contain drinks a little more refined than the
average beer keg. Also it comes with a resprite of kegs because the old
one was starting to look a little ass compared to other reagent
dispensers.

## Why It's Good For The Game
For being fictional festivities revolving around food and culture, and
despite the lot of recipes for moths and lizard people, we aren't
offering anything to chef players to let them cook said recipes beside
what's given on any bog-generic round. This is a step toward a slightly
less lackluster implementation of those festivities and recipes into the
game. Also chance for cooler kegs for the bartender.

## Changelog

🆑
add: The kitchen fridges may have additional ingredients on certain
holidays, in particular Atrakor's Might (lizardpeople) and Fleet Day
(mothpeople), and Vegan Day.
add: Added a few more holyday-specific mail items.
add: Replaces the beer keg in the bar backroom with special kegs on St.
Patrick's Day, Beer Day and Speak-Like-a-Pirate day. On any other day,
there's a chance that the beer keg will be replaced with one containing
whiskey or rum, or in rare cases, one of those special kegs.
imageadd: resprited the keg as well.
/🆑
2026-07-01 10:26:56 +12:00
7f4171fd4d Adds bodyshape arg to a lot of missing spots, generalizes 'wear_digi_version', adds female gender shaping to digi sprites (#96633)
## About The Pull Request

Adds female gender shaping to digi species (such as lizards), for the
top half only.

<details><summary>Shown here</summary>

<img width="337" height="464" alt="dreamseeker_HhKjfrmJ1f"
src="https://github.com/user-attachments/assets/a5a57580-6798-40e4-925c-b3a63e0e540e"
/>

</details>

Also just adds a bunch of bodyshape args now that we are passing that to
the clothing rendering. This will help with anything where you want
unique digi handling for any specific items. Also fixes some missing
args and even improper args in some of these proc overrides.

## Why It's Good For The Game

Makes things more convenient for coders. Adds some more customization
options for feminine lizardfolk.

## Changelog

🆑
code: bodyshape is now accessible in build_worn_overlays() and similar
procs.
image: lizards now have support female gender shaping for their suits
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2026-06-30 20:02:53 +00:00
MrMelbertandGitHub 2d1bd6a39a Mutation toxins work on skeletons/plasmamen and the undead (#96709)
## About The Pull Request

Adds `MOB_SKELETAL|MOB_UNDEAD` to affected biotypes of mutation toxin

## Why It's Good For The Game

This solely stemmed from the discovery that you can mutation toxin into
plasmamen but you cannot mutation toxin out of plasmaman. Then I figured
"why not vampires and zombies too"

## Changelog

🆑 Melbert
balance: Mutation toxins now work on plasmamen, skeletons, zombies,
spirits, and vampires
/🆑
2026-06-30 21:37:46 +02:00
HatterhatandGitHub dc2739c898 ChemMaster QoL: Reusable Custom Transfer Amounts (#96563)
## About The Pull Request


https://github.com/user-attachments/assets/a6c6d3d9-3284-4a45-80c4-14dbc4956cf8

Adds custom transfer amount functionality to the ChemMaster UI through a
number input (by the eject button) and paired button.

## Why It's Good For The Game

If I have to hit the one-off custom transfer button, several times in a
row, for my artisanal chemical atrocities one more time, I'm going to
lose it.

Less-jokingly, maybe someone has some oddly specific mixing things they
need it for (I know I do!).
2026-06-25 21:35:39 -05:00
Roxy de4c3b255d Merge branch 'master' of github.com:tgstation/tgstation into upstream-2026-06-23 2026-06-23 15:51:55 -04:00
4e2585e477 Adds a new healing symptom for virology and an immunosupressant chemical (#96305)
## About The Pull Request

Adds a new virology symptom:
Agressive Healing - The virus provides a healing effect, scaling with
the severity of the virus, always. However despite being a positive
symptom it has a severity of 1, meaning that unless something is done
about it your positive virus will eventualy be killed by your immune
system.
It also provides medium stat boosts and decreases the stelth value of
the virus.

Also adds a new chem, ImmunoSilence, which prevents viruses from being
cured naturaly while it is being metabolised. It is made from ammonia
and diphenhydramine.

Suggestions for better flavour and more balanced numbers welcome.

## Why It's Good For The Game

It is a symptom that allows for pretty interesting gameplay, as it can
both just work as a stat boost for other symptoms at the cost of having
to use immunosupressing medicine (as alternatively tour virus will die
faster, especialy if it is positive), and/or alternatively provide
strong healing at the cost of having to endure with some negative
symptoms.
The new chem is meant to synergise with this symptom but can be
obviously used for other goals.

## Changelog
🆑
add: Added a new virus symptom
add: A new chem that prevents viruses from being naturaly cured
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: ATH1909 <42606352+ATH1909@users.noreply.github.com>
2026-06-22 03:23:50 +02:00
carshalashandGitHub be340e2fdf Changes basic cocktail ratios for realism and recalculates certain boozepwr levels. (#96446)
## About The Pull Request

I have grown tired of having to input such absurd ratios into the game,
a gin and tonic with twice as much gin as tonic water? Such levels of
juniper and deficits of quinine would make a horrible drink, we can't
punish the playerbase with subpar drinks.

While going through things, a lot of drinks had odd boozepwrs, I ran
some calculations for more accurate levels of some drinks. I tried not
to touch any drinks that have unique effects/had unique designs.

If anyone has any idea why Ale is at 65 boozepwr, please let me know.

## Why It's Good For The Game

Uhhhhhhhh. We will prevent any naive idiots from making drinks with
wrong ratios IRL I guess. That's good for the game right?

## Changelog



🆑
qol: Made certain cocktails reflect real-world ratios. Including gin
fizz, rum and coke, whiskey cola/soda, screwdriver, and both tonic
cocktails.
/🆑
2026-06-13 14:49:00 -07:00
SmArtKarandGitHub 89b1b064c6 Fixes rugs runtiming when cleaning objects (#96463)
## About The Pull Request

all_cleaned can contain nulls if an object didnt have any blood on it

## Changelog
🆑
fix: Fixed rugs runtiming when cleaning objects
/🆑
2026-06-13 14:46:17 -07:00
cool20141andGitHub e439979ab2 Fix TTX healing (#96428)
## About The Pull Request

I had problems with pufferfish TTX with infusion, guess that was the
case
## Why It's Good For The Game

Fixes problem with pufferfish toxin not removing paralysis correctly(it
had null reference)
## Changelog
🆑
fix: fixed TTX healing
/🆑
2026-06-11 03:14:31 +02:00
cacogenandGitHub 51708d5504 Adds beef space ramen (#96393)
## About The Pull Request

Adds beef space ramen packets as an uncommon maintenance spawn. These
are small boxes that contain a brick of dehydrated space ramen and a
beef flavour sachet (these are all they can hold). These items can be
used on the soup range to create beef ramen.
## Why It's Good For The Game

The existing option for ramen leaves something to be desired. You just
add water and it magically heats itself. The ramen is treated as a
reagent rather than an object like other noodles.
## Changelog
🆑 cacogen
add: Adds packets of beef ramen as an uncommon maintenance spawn
/🆑
2026-06-10 09:08:10 +12:00
Ugo ManzoandGitHub d6f0fe75f2 Fix: Water cooler reagents are now visible to observers and scientists (#95636) (#96335)
## About The Pull Request

This PR adds a `can_see_reagents()` check to the `examine()` function of
the water cooler (`/obj/structure/reagent_dispensers/water_cooler`).
It loops through the reagents and prints their specific volume and name,
mirroring the behavior of standard transparent containers when examined
by an authorized user.

Fixes #95636

## Why It's Good For The Game

The current state of the water cooler is inconsistent with other reagent
containers. As reported in the original issue, observers cannot see what
custom reagents are inside.

Furthermore, during local testing, I verified that this also negatively
impacts active gameplay, Chemists and Scientists wearing Science Goggles
are unable to read the chemical breakdown of the cooler's contents,
breaking immersion.

This PR implements the standard check without altering the cooler's
opaque identity for regular players.

**Before:**
<img width="2559" height="1391" alt="Screenshot 2026-06-03 155849"
src="https://github.com/user-attachments/assets/8b74fca7-5fe8-4a08-af23-9a1d4b5a5647"
/>
<img width="819" height="717" alt="Screenshot 2026-06-03 155929"
src="https://github.com/user-attachments/assets/21150f27-9806-4a6a-90b0-2ec4129b5492"
/>

**After:**
<img width="2559" height="1393" alt="Screenshot 2026-06-03 163407"
src="https://github.com/user-attachments/assets/84b368c7-46e6-4134-9ccb-65956fa5d58f"
/>
<img width="2559" height="1390" alt="Screenshot 2026-06-03 163422"
src="https://github.com/user-attachments/assets/7b13070f-193b-467f-9166-a00fdf8ea65e"
/>

## Changelog
🆑
fix: Water coolers now properly reveal their custom reagents when
examined by ghosts or players with science goggles.
/🆑
2026-06-06 18:34:52 +02:00
TheRyeGuyWhoWillNowDieandGitHub 6d59b406a3 cryoxadone is capable of healing you (#96316)
## About The Pull Request

Closes #96078

Cryox has been nerfcrept over the years so hard that at the moment you
can use it to softlock people by trapping them inside with burn damage,
as cryoxadone heals so slowly that the 73k air will hurt you nearly more
than the cryox even heals you. This PR changes cryox so that sleeping is
no longer a hard requirement, rather it simply doubles the "power" of
the cryoxadone, like how being on fire doubles the power of pyroxadone.
Even with this it's still not a great heal, doing about 2-3 of each
damage per tick, far inferior to a proper healmix. When you're awake it
heals you the same as it does now.
## Why It's Good For The Game

Helps cryoxadone actually fill its niche a bit better (Healing
wounds/triage with the cryo tubes/less efficient new player fallback
option) without reintroducing the abusive abilities that got cryox
nerfed in the first place, namely naked spacewalking since pressure
damage has been doubled and waking cryox will no longer let you outheal
it. The hard requirement on unconsciousness is also very uninteresting
and anti-sandbox (you MUST use the cryo tube or this reagent does
NOTHING)

## Changelog
🆑
balance: instead of the hard requirement for sleeping, cryox's healing
power is doubled by being asleep instead
fix: on default settings a cryo tube filled with cryoxadone can no
longer softlock you by outdamaging its own healing potential
/🆑
2026-06-04 12:28:15 -06:00
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
f5fc272810 Random recipe logging (and other stuff) (#96148)
## About The Pull Request
-Log outcomes of random recipe init
* Whether recipe failed to load, and why
* Whether recipe failed to generate, and why
* Whether recipe regenerated due to conflicts, and how many attempts it
took

-Stop saving random recipe results to the persistence file
* They aren't randomized anyway

-Split recipe loading and recipe generation into separate procs
* It was kind of a mess
* This way, you can regenerate recipe without qdel'ing it and then
reinitializing

-Generate recipe if it failed to load
* We used to qdel it instead

-Consider recipe generation to be a failure if there aren't enough valid
ingredients or catalysts
* We used to only check whether possible ingredient list is empty
* Since the possible ingredient/catalyst lists don't change from round
to round, this could probably be made into a unit test in the future

-Reorganize random recipe conflict checks to make them more streamlined
* I had to do it in order to log regeneration outcomes

-Fix bugs which won't ever matter anyway
* optimal_ph_max no longer rolls above 14
* optimal_ph_max can no longer be below optimal_ph_min + 1 (we used to
check for CHEMICAL_MIN_PH + 1, which is just 1)
## Why It's Good For The Game

Logs help spot&diagnose issues which might not come up when testing
locally, like the issue where timestamps wouldn't update which was fixed
by #95895
## Changelog
🆑
fix: random recipes can no longer have upper pH bound above 14
/🆑

---------

Co-authored-by: l0 <-->
2026-06-03 08:04:56 +02:00
SmArtKarandGitHub b952f0ac4d Fixes spilled flour not containing any flour (#96265) 2026-06-01 22:22:51 -04:00
e68c1edad1 Streamlines Life() a little (#96215)
## About The Pull Request

Main changes

- `handle_mutations` is gone, DNA Injectors are now managed via a status
effect
- `handle_diseases` is gone, disease stages are just handled via life
signal
- `handle_bodyparts` is gone, it was unused and in the future any
implementations should use a life signal
- `spec_life` is gone, the main content of it is now in `human/Life`,
most children implementations now use life signal, zombie tongues now
handle zombie groans
- Life signal was split in two (pre and active)

Other changes

- DNA injector code was cleaned up considerably
- HARS now alerts admins when you inject someone else with it like
Monkey
- `COPY_DNA_SE` is no longer mistakenly unused (meaning stuff like
transformation sting no longer copies "active mutations")

## Why It's Good For The Game

Across the course of a full round we spend the same amount of time doing
literally nothing in life as we spend on handling human breathing.

Now in the context of a full round this is 8 seconds. Which in the grand
scheme of things, not a whole lot, but if we can get a tiny performance
gain from... not doing literally nothing (especially when we can do
these things cleaner with signals) that's a win in my book

## Changelog

🆑 Melbert
refactor: Refactored dna injectors (both the ones that change appearance
and activate mutations), report any oddities with them like failing to
revert your appearance or mutations not applying correctly
code: Ever so slightly changed how diseases tick, report any oddities
code: Ever so slightly changed how some species mechanics tick, like
golems and slimes, report any oddities
code: The code behind printing appearance modifying dna injectors from
genetics has changed, report any oddities
code: Some backend transformation sting code changed slightly, report
any oddities
code: Zombie "idle" groaning is now tied to the tongue rather than the
species itself
admin: Force-injecting someone with HARS give an admin alert, the same
as force-injecting someone with Monkey
fix: Several methods of copying DNA (including transformation sting)
mistakenly copied "active mutations", this has been fixed
/🆑

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2026-05-29 22:48:16 -06:00
TimandGitHub d7e2a3ba5e Plant nutriment is now beneficial to mobs with the MOB_PLANT biotype (#96208) 2026-05-27 23:48:10 -04:00
a85369b66a New foam reactions for water varients (#96095)
## About The Pull Request
Adds slipless foam + one slipless foam for each life time + adjusted
long foam's life time from 30 seconds to 24.
Adds new foam reactions, list of what they produce below.
salt water = lasts shorter + no slip
soda water = lasts shorter
ice = no slip
holy water = lasts longer + no slip
hollow water = lasts longer
## Why It's Good For The Game
Sometimes, you want to flood medbay with a colorful reagent grenade
WITHOUT it slipping everyone and blocking it for a stupid amount of
time.
## Changelog
🆑
add: New reactions for water variants that make foam
code: New foam types that either slip or last longer or shorter
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2026-05-24 11:07:09 +02:00
Time-GreenandGitHub 64f76f52a9 Interface Science | The Mariana Trench of Feature Content (#95857)
## Interface Science

You know what the problem is with our features? They're all too easy,
too optimized to use. Look at Genetics; we went from a confusing UI that
a 14 year old hardcoded with html into byond to a polished UI using
tgui, optimized for player comfort, and gameplay has suffered. Too long
we have coddled players with fun and easy content, no more I say!!!

To fix ss13, I have added a feature with the most awful, unusable UI
ever. It's just wires with random sequences that may or may not do
something. And yet, you will use it till your fingers bleed and your
eyes go white, and you will be grateful. "Thank you coder daddy", you
say as you sacrifice yourself to a display of unending, procedurally
generated dogshit.

<img width="563" height="294" alt="image"
src="https://github.com/user-attachments/assets/e56c947f-a40c-4df9-beed-672812357576"
/>

Or maybe you're a sick little deviant, and you don't respect me. Instead
of using my awful UI, you start optimizing. You've forced the secret
pulse code, and you're not going to pulse them again and again. You make
your own interface by connecting it with signallers, or integrated
circuits. Ahhh, you beat me! Damn it, and you're gonna get away with it
too.

## About the Pull Request

Adds new job content to science. Science spawns with a few "gizmo"
devices and can order more through cargo. These gizmo's have random
functionalities, like the strange objects you can find in maintenance.
These functionalities come with different settings to change how they
operate.

However, there are no buttons, just wires or a voice interface. You need
to solve, for example, a wire puzzle. You just pulse the wires, and if
you hear ping the sequence is good, if you hear buzz its bad. Just keep
going till you hear a creak sound.

If you do a sequence correctly, there are a bunch of randomly generated
ways this interacts with the functionality, mimicking real life settings
and interactions. Imagine a TV remote with randomized buttons, and you
have to map them out again.

Once you've mapped the sequences, you can make an interface. For simple
ones, you can just make some signaller assemblies. For the best control,
you could connect it with a bunch of integrated circuit signallers, and
program sequences into an integrated circuit machine.

Below is a short video of how the puzzle solving works. (I can't be
arsed to figure out how to record tgui, here's a video I made with my
phone. Also I had the sequences written down, which I STRONGLY recommend
you do.)


https://github.com/user-attachments/assets/93f79f0f-df14-4ff9-8096-f079ebae7e91

<details>
  <summary>Actual details</summary>
  
I have hidden the details to make exploring the feature itself more fun.
The whole thing was written to be convoluted, but intuitive. You should
be able to hit it with a multitool, and figure out everything from
there. It will take a bit to get the gist of it.

Nonetheless, for review purposes I have written down the details here.
If you're reading this for non-review purposes, you should know I have
embedded an internet curse that will at some point in 2026 teleport you
2 meters in a random direction. Continue reading at your own discretion.

The gizmo objects is usually generated with 1 or 2 'gizmodes'.
'Gizmodes' contains the fun-ctionality, and holds different operating
modes (so dubbed 'gizpulse'). You can't directly select a gizpulse, but
instead it generates a bunch of mode selections.

For example, a function that toggles lights has two gizpulses: toggle_on
and toggle_off. There are four different mode selects:
Cycle mode: Adds signal to cycle to the next gizpulse, and to activate
the current gizpulse
Select mode: Adds a signal for selecting every gizpulse, and a signal to
activate whatever the activate gizpulse is
Direct activate mode: Adds a signal for selecting every gizpulse, and
also immediately activates that gizpulse
Cycle-active mode: Cycles to the next mode, and activates it
(inconvenient but only has 1 signal to worry about)

So a light gizmode with the randomly selected 'select mode' has three
signals: select toggle_on, select toggle_off and trigger the currently
selected gizpulse.

Currently implemented gizmodes:
- Lights: toggle on, toggle off
- Move: start moving, stop moving 
- Food printer (its filled with the spongebob grey goop thing): print
food (donut or burger)
- Mood pulser (AOE): happy pulse, sad pulse, radiation pulse
- Mopper: select different reagent, dump onto tile (1/2/3 range), make
smoke cloud
- Teleporter (5 to 15 tiles, random dir): Teleport self, teleport mobs
in range 1, do both
- Electric: charge from nearest cell (looks into objects and stuff),
magically gain some charge, make lightning, make emp, charge nearby
object, defibrillate in an area
- Copier (makes fake copies of mobs and objects, visual copy only): scan
objects, print objects, erase all copies
- Sputter: dump oil and shake, throw self
- Bad: explode, explode, explode harder, explode with fire, stab you,
warning, make robot spider, breaks your bones, throws a grenade at you,
radiation pulses
- Some behind the scenes gizmodes (language toggle for voice interface,
for example)

The voice interface starts with wires, with signals to toggle the
language or dump the code words. After that, you can talk to it using
the code words similarly to the wire sequence to solve the rest of the
gizmodes.

</details>

I've added two to every map, somewhere in or near the experimentor room.
They may ocassionally spawn from a maintenance crate spawner
<img width="611" height="331" alt="image"
src="https://github.com/user-attachments/assets/3782700f-57d3-4591-9282-e0de590056e1"
/>


## Why It's Good For The Game

It's really difficult to have "experimentation" type features in the
game. It all has to fit into 1h rounds, and people get used to it real
quick. The experimentor and strange objects kinda try, but it's just one
button and praying a bear doesnt spawn you explodes you.

I don't claim to have solved this perfectly, but I think this is fun.
You truly have to start experimenting, be systematic and write things
down. If you figure out how something works, you can go to the next
stage of making it more convenient to use. I think it's really fun to
mess around with integrated circuits and USB's, and make, for example, a
BCI controlled bluespace launchpad.

So I lean into it! There's different settings to account for, and its up
to you to make it usable! If you like integrated circuits, you'll love
this (maybe).

The gizmo functions are aimed at benefiting the station as a whole in
some ways, to motivate people to make some fun systems for these to get
maximum benefit! A mood pulser near a busy area will make everyone
happier! (I do need to add more like these, I got distracted doing
stupid shit.)
2026-05-23 18:59:25 +00:00
SmArtKarandGitHub 46389605f2 Fixes certain reaction overheats being always treated as impure (#96108)
## About The Pull Request

Closes #96063

## Changelog
🆑
fix: Fixed certain reaction overheats being always treated as impure
/🆑
2026-05-23 11:02:00 -04:00
SyncIt21andGitHub eaba74a2eb Fixes for boulder processing machines (#96033)
## About The Pull Request
- Opening the panel of a boulder refiner machine or un-wrenching it now
turns off its environment light
- The boulder refiner machine has reagent holder of type
`/datum/reagents/plumbing` which fixes rounding errors & has other
plumbing optimized features
- The boulder refiner machine now only takes in booster reagents & only
outputs waste reagent. This means even if you have a tank with random
reagents attached to it, it will only take in booster reagents if
present & exclude the rest thus saving you time & space from taking in
other reagents
- booster reagents is now a static list shared by all machines thus
saving memory
- Removed `supply_offset` & `demand_offset` vars from core plumbing
component. These vars were making the pipes extend outside the tile
causing it to overlap with adjacent tile machine pipes making everything
ugly. Now the pipes are perpendicular to the conveyer belt sprite and
will only take in boulders from the conveyer belt direction


https://github.com/user-attachments/assets/5583a790-32b6-40df-a414-1602dd84fefd




- Map edited smelters so the conveyer belt is in the direction of the
refiner


## Changelog
🆑
fix: opening panel of boulder refinery with screwdriver or un-wrenching
it turns of its light
fix: boulder refinery only takes in booster reagents and excludes others
and only outputs waste chemicals as intended
fix: boulder refinery machines outputs waste reagents without rounding
errors in them
qol: removed conveyer sprite from boulder smelter & pixel shifts the
refiner so you can see it's plumbing pipes properly
sprite: smelters will now only take in boulders in the direction of its
conveyer belt. It's plumbing pipes are perpendicular to its conveyer
belt
/🆑
2026-05-22 14:58:52 -04:00
Y0SH1M4S73RandGitHub 18af823b19 Taking damage from attacks while on synthpax grants temporary immunity to synthpax (#95950)
## About The Pull Request

Whenever you take damage from an attack while metabolizing synthpax, you
become immune to specifically synthpax's pacification for a number of
seconds equal to the damage taken (max. 5 seconds). Additional instances
of damage add to the immunity timer.

## Why It's Good For The Game

Peacekeeper borgs have largely used synthpax as a way to make sure an
antagonist can't fight back as security arrests them, or, when their
laws permit, as they kill said antag themselves. This seems like a
severe abuse from the cyborgs, and/or any security that ordered the borg
to take this course of action. Synthpax should be used either to
de-escalate conflict between individuals the borg's laws require them to
protect, or to ensure that a threat cannot harm individuals they are
bound to protect until appropriate responders arrive, while leaving
minimal room to weaponize the pacification effect.
2026-05-22 06:40:47 +00:00
tontyandGitHub 960d0a7278 Removes /proc/type2parent, replaces it with ::parent_type (#96155) 2026-05-20 17:49:32 +02:00
RusselNotSCPandGitHub 5ce1082164 Adjusted aperitivo nutrition drain (#96055)
## About The Pull Request

Aperitivo liqueur's hunger inducing effect has been toned down, and
Spritz and Negroni's have been removed entirely
## Why It's Good For The Game

When making the PR that added these to the game I kinda just copied
values from some of the fernet drinks without really realizing that they
were supposed to be near-deleteriously effective at causing hunger, and
that's why they're locked behind contraband (among other reasons). Now,
you can actually serve drinks the negroni and spritz without causing
your customers to starve to death and putting a ton of undue pressure
onto the kitchen to serve your newly-empty bellied clientele.
## Changelog
🆑
qol: Aperitivo Liqueur's hunger inducing effect has been reduced
qol: The Negroni and Spritz cocktails no longer induce hunger and now
only reduce overfull-ness
/🆑
2026-05-20 14:36:52 +12:00
MrMelbertandGitHub 97721b82e0 Adds REACTION_TAG_DAMAGING to Thermite (#96125)
## About The Pull Request

Adds `REACTION_TAG_DAMAGING` to Thermite, so it shows up in the chem
dispenser's recipe browser.

Also deletes a duped flag 

## Why It's Good For The Game

So you can easily search it up. 

## Changelog

🆑 Melbert
qol: Thermite chemical reaction is tagged as "Damaging", making it
easier to refer to.
/🆑
2026-05-18 08:44:17 +02:00
MrMelbertandGitHub 02dc41e46c Buffs the good aspects of Spacer by a little bit, so people might actually notice them (#96009) 2026-05-16 11:34:14 +10:00
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
Leland KembleandGitHub 5511bda793 Carnivorous Blood : A new DNA-targeting traitor chemical that eats away at your bloodstream (#95915)
## About The Pull Request

Adds a new chemical: Carnivorous Blood. This chemical is acquirable via
traitor uplinks, at the cost of 3 telecrystals for a 30 unit bottle.

This chemical's purpose is to eat blood. When it enters its victim's
bloodstream, it begins consuming their blood at a base rate of 2 units
per second, consuming itself at a rate of 0.3 units per second. This
means that a dose of 15 units of it will consume roughly 14% of its
victim's bloodstream over the course of roughly a minute. That isn't
anything to call home over, obviously. This is because you are supposed
to pair it first.
To pair it, you acquire a blood sample from your chosen victim, in any
form that retains their intact DNA. You mix this with the carnivorous
blood, and the blood is now three times as effective inside that
specific person(or anyone sharing their DNA). The paired version,
assuming a dose of a full 15 units that is allowed to fully metabolize,
will take the paired victim's blood down to roughly 55% over the course
of roughly a minute(assuming nothing is impairing or improving the
person's natural blood regeneration). This is just slightly less than is
required to knock out a victim from just blood loss, but is certainly
enough to significantly impair them.

(Up to three sets of DNA can be paired with a single set of carnivorous
blood. It cannot be de-paired in any useful way.)

Additionally, the chemical is twice as effective in the dead, allowing
one fifteen unit dose to fully drain a paired person of their blood.

The chemical can be duplicated using protein.

As a necessity in order to let the thing be used how I want it to be
used, this also makes it so that blood taken off the ground out of
bloodstains has DNA(unique enzymes) in with it. As it'd be absurd to
track how much of each specific DNA was in each specific bloodstain for
just this purpose, and because blood(the reagent) can only have one set
of DNA within it, it's been made such that the DNA you get from blood
taken from bloodstains is a random pick of the DNA present within the
bloodstain. If you don't get pure blood, you might not get what you
want.

## Why It's Good For The Game

A reasonably powerful traitor item that requires not just preparation on
your part, but INVOLVED preparation. The chemical itself is fairly
cheap(and could probably be cheaper but I'm being safe), but to get your
benefit you have to actually involve yourself with your target. Hurt
them a little bit, telegraphing yourself, or lurk around them until a
carp bites them and they leave their blood on the floor. Get them in a
rage cage, run a blood drive, whatever. There's a lot of ways to get
someone's blood, but all of them require active involvement, and I think
that that, on its own, will lead to interesting situations.


Also, side benefit that isn't really material but is worth mentioning
anyway, finding a body with no blood is currently absolute 100% no holds
barred completely airtight proof of bloodworms unless some psychopath
manually took a million years to slowly drain their blood manually. As
one dose completely drains a dead person, this provides an alternate
theory and reasonable means of faking.


Balance-wise, I say this every feature PR I make, but I don't think this
will be a problem. The chemical basically necessitates putting yourself
at risk in order to set it up, and is not a one-hit-kill. That is more
than can be said for several other crew-obtainable chemicals, BUT the
benefit of this chemical is that it takes a very long time to recover
from naturally. If someone succeeds the lexorin knowledge check and
survives, the oxygen damage goes away in a flash. Losing half your blood
takes an extremely long time to recover from naturally(and specific
items to recover from quickly), and leaves you quite vulnerable in the
meantime.

## Changelog
🆑

add: Added a new traitor item, Carnivorous Blood. It is purchasable in
uplinks. Carnivorous Blood is a reagent that eats away at a victim's
blood once in their bloodstream, doing so significantly faster if it has
been mixed with the victim's blood beforehand.

/🆑
2026-05-12 14:29:17 -04:00
Y0SH1M4S73RandGitHub b9618d9cc3 [I ded] Xenomicrobes and Nanomachines are maintenance pill only (#96012)
## About The Pull Request

See title.

## Why It's Good For The Game

These reagents are far too disruptive to the round to allow to be
produced in the vast quantities and with the distribution vectors that
botany offers. The amounts of them that can be procured through natural
maintenance pill spawns and the silver-extract-exclusive food items
containing them is still acceptable.

## Changelog

🆑
balance: You can no longer get Xenomicrobes and Nanomachines from botany
mutations.
/🆑
2026-05-08 07:13:05 +02:00
TheRyeGuyWhoWillNowDieandGitHub 42268e9b20 modernizes granibitaluri (#95850) 2026-05-08 00:40:34 -04:00
Time-GreenandGitHub b9dfbcaca3 Adds more SeCrEt ChEmS (#95952) 2026-05-05 10:25:32 -04:00
MrMelbertandGitHub cee225fecb Moves hair and eyes into standing overlays (#95781) 2026-05-04 22:50:36 +02:00