Commit Graph
5847 Commits
Author SHA1 Message Date
xPokee b308ee9d78 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-24 10:13:01 -04:00
TimandGitHub 44b35180fe Add cooking oil, nutraslop, and beer keg to cargo supply packs (#93083)
## About The Pull Request
This adds the cooking oil vat, nutraslop serving tray, and beer keg as
purchasable items from cargo. I also removed the anchored state from the
cooking oil and nutraslop so that they can be moved.

## Why It's Good For The Game
These objects had no method to be created in game. Allowing them to be
purchased via cargo should lead to more usage. I'd honestly love to see
the crew's reaction to a mean chef who decides to feed the entire crew
nothing but nutraslop for the shift.

## Changelog
🆑
add: Add cooking oil, nutraslop, and beer keg to cargo supply packs.
Nutraslop serving trays and cooking oil vats can now be pushed and
moved.
/🆑
2025-09-23 21:42:22 +02:00
GhomandGitHub 852f6f8868 [NO GBP] recipe speed fix (#92939)
## About The Pull Request
This PR aims to fix another issue with #92577. The main problem is that
the list of instances we get from `get_surroundings()` doesn't contain
items that are found within the person that's crafting the recipe, since
those are checked separately in `check_tools()`. This ends up making the
recipe hella slower because the appropriate tool couldn't be found in
the checks for calculating the duration of the craft.

This also trims a few lines of code and other small things worth of a
small refactor.

EDIT: Found out the real problem. the list of instances was an assoc
list of type -> instances, while I thought otherwise.

## Why It's Good For The Game
Fixing some recipes taking too long to make. Fixes
https://github.com/tgstation/tgstation/issues/93003

## Changelog

🆑
fix: Fixed some recipes taking too long to make.
/🆑
2025-09-21 14:19:34 -04:00
MrMelbertandGitHub 750ca9d2ec Two as anything greps (and some other cleanup) (#92974) 2025-09-20 13:44:28 -04:00
xPokee 9b282a850e Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-17 11:45:44 -04:00
RusselNotSCPandGitHub 72580ce0bb Adds Various Classic Cocktails (#92955)
## About The Pull Request
TL;DR: "What do you mean we didn't have an old fashioned in the game
before?"

This adds a bunch of different classic cocktails to the game that I
always felt were rather odd holes in the lineup of drinks that
bartenders could make, as well as a few less classic ones 'cause why
not. Adds thirteen new alcoholic drinks and one non alcoholic one.
Mechanically relevant drinks include the Blue Blazer and Hot Toddy which
warm you up like coffee, Bitters and Soda which settles upset stomachs,
and the Suffering Bastard which, in it's role as a hangover cure, calms
nausea, prevents headaches, and very slowly heals brain damage, giving a
way to heal chip brain damage that doesn't require chemistry or surgery.

Full list here: https://hackmd.io/@0lHAWBNkSXixU4v6xxYS_w/SkjlmIbsgx

<img width="439" height="435" alt="drinks"
src="https://github.com/user-attachments/assets/406ca285-63af-49d4-b0e8-176edb251291"
/>


PS This is basically my first real project and also my first time
spriting for anything, so I would really appreciate any advice or
reccomendations.
## Why It's Good For The Game
More variety for service is always nice, but also many of these drinks
are extremely commonly ordered in real world bars. Adding them here
fills some weird gaps in the bar's line up, allows people to order more
drinks that they personally like, and decreases the amount of awkward
interactions in which people order a drink that they're familiar with
and then get confused when a partender somehow can't give them an
daiquiri despite having everything to make it.
## Changelog
🆑
add: You can now make 15 new classic (and some less classic) cocktails.
Includes old standards like the Old Fashioned, Daiquiri, Ramos Gin Fizz,
and more!
/🆑
2025-09-14 21:17:27 -04:00
FalloutFalconandGitHub d2f34e33be moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621



https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa

small warning: I dont have EVERY abstract type defined right now but,
ive done a good enough job for now. Im tired of data entry rn
## Why It's Good For The Game
standardizing behavior. Might be a micro hit to performance however

having this lets us not rely on icon state to determine whether
something is a parent type and makes it much easier to tell something is
a parent type (could be applied further to things like admin spawning
menus and things like that).

need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
2025-09-13 00:36:15 +02:00
xPokee 939f2fc9ac Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync 2025-09-10 14:12:16 -04:00
nikothedudeandnevimer ee99d0e5b0 Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/79691

A while back, I made this PR, but lost motivation after diving too deep
into the code soup of can_breathe and related procs. Now, I have removed
those parts, and have simplified that part of the code to the point I
think it's ready for review.

Many reviews from the previous PR have been addressed in this PR.

<hr>

<details>
  <summary>Details</summary>

Asthma is a 4 point negative quirk that emulates real life asthma. It
works by slowly decreasing the amount of pressure each breath you take
receives, until your lungs completely seal, ensuring death if you dont
get oxyloss meds/windpipe surgery.

Inflammation (the tracker for intensity) increases whenever you breathe
smoke, use a cigarette, metabolize histimine, or suffer an asthma
attack.

Asthma attacks have a low chance of happening every second, starting 10
minutes after you spawn and with a 20-30 grace period between attacks.
They are "diseases" that cant be outright cured by albuterol, only put
into remission. They increase inflammation at varying rates depending on
their severity, with extreme asthma attacks being a immediate threat to
your life while mild ones might not even cause inflammation. The
response to these is always the same - use your inhaler before you start
choking.

Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded
with albuterol, which I will get to later.

Albuterol is a new medicine thats a little tricky to make but still
doable. It can be efficiently created with inverse convermol, or
transmutated from salbutamol and convermol. The opposite is true, with
albuterol able to be turned into salbutamol. Two canisters are available
in chemvends.

Upon use, it increases the virtual pressure of all breaths taken by 40%.
This allows for you to breathe in lower pressure environments, as well
as enhancing the effects of things like healium.

It's OD causes your diaphram to spasm, causing sporadic losebreath and
forced breathing.

Inhalers are a fancy new reagent application apparatus that uses the
INHALE reagent bitflag.

Inhalers themselves are rather unremarkable, they are merely the method
of using inhaler canisters (they also have a rotary display
approximating the uses left in a canister - just like real life
inhalers).

Inhaler canisters are the reagent containers, and are generally low
capacity. They can only be used in a inhaler, and contain aerosolized
chemicals.

Inhaler canisters and inhalers are unlocked from chemical synthesis, and
are printable for cheap from a medlathe.

In order to use a inhaler, one must uncover the mouth of a carbon and
wait a few seconds (its faster if its a self-application) before a small
amount of the reagents are delivered via the INHALE bitflag. This only
works on things currently breathing - if theyre dead, have no lungs, or
just, arent breathing - it will fail. This includes asthmatics with 100%
inflammation.

</details>

<img width="181" height="74"
alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521"
src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e"
/>

<img width="1465" height="202"
alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963"
src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667"
/>

Sprites are not mine; they are from swanni and I can NOT sprite for the
life of me
## Why It's Good For The Game

1. Asthma is just cool. One of my favorite features on bay was the fact
lung damage required you to turn up the pressure on your O2 tank to
survive, and this does precisely that.
2. Its always fun to add new ways to interact with atmos as a player
that arent grossly broken, and I fail to see how a 40% increase of gas
intake will really affect balance too badly.
3. Inhalers are badass.
## Changelog
🆑
add: Asthma quirk, based on IRL asthma
add: Inhalers, a new reagent administering method that uses INHALE
add: Albuterol, a new reagent that increases the amount of gas you
inhale by 40%
balance: Inverse convermol now forms once the reaction is done, not on
metabolize
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
# Conflicts:
#	code/datums/quirks/negative_quirks/allergic.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
2025-09-09 23:24:54 -04:00
50499dba9a Adds opium and meth rocks! (#92699)
## About The Pull Request


![demo2](https://github.com/user-attachments/assets/26223fa6-6eb8-43eb-ba87-54be7d2c19b3)<img
width="612" height="185" alt="dreamseeker_SNMvxqCRiR"
src="https://github.com/user-attachments/assets/1d3103e9-edc1-4e50-8793-c8c2ace53aea"
/>

This is a small expansion to narcotics, their production, and presence
in the game! For my esteemed Terry and Manuel/Sybil sector colleagues
I've added:
- 2 new solid drug items: **crystal meth and opium**!
- A **precipitation reaction** for meth after it's been cooled,
producing a solid crystal form, 2u sulfuric acid, 10u meth. **Above 90%
purity, the meth will gain an increasingly blue tint!**
- A production method for opium! Slice a well developed poppy pod with
any sharp item, **before it's fully mature and flowered** to extract a
small amount of opium to enjoy! It's a small container for morphine. Can
be pressed together to combine the concentrations up to 10u, as each
extraction contains trace amounts. Scales off poppy's potency.
- Populated narcotics/contraband spawners with new items, and items that
really should have been on there.
- Added a brand new smoking apparatus, the glass pipe! Can be crafted.
Fixed the transparent pixel.
- **Fixed methsplosions so that now spacemen can finally smoke meth
without exploding!!!** Omegaweed too. Normal methsplosions are
untouched!
- **Expanded the ability for players to insert all drug items into
pipes**, so now players can smoke moon rocks, SaturnX, and my new items!
Previously, only 'dried' items were.
- Fentanyl patch box for narcotics spawner, also for a new ruin I've
made.
- **Expanded these changes to the black market uplink.** 
<img width="640" height="256" alt="demo"
src="https://github.com/user-attachments/assets/c8a0eb2c-b0fa-4e70-b6c1-2e741cd170a2"
/>

Now, players can precipitate meth into a solid form, and produce opium.
I added a lot of these substances and the ones that didn't exist into
spawners that they were partially in, or could reasonably be in. The
opium poppy extraction required a new variable that can be used for
similar interactions too. Crystal sprites are transparent, smoked sprite
has a nice little animation and glow.

These items are now on the black market uplink, in both expensive dealer
shipments of varying rarities for different narcotics, as well as
personal use quantities on a different rotation, at a steeper price.
Expanded randomized spawners to give the black market and ruins more
teeth and edge, without adding another weapon.

Credit to the moon rock guy, I'm just happy I made your stuff smokable!!
<img width="219" height="201" alt="dreamseeker_N8x9bsN3kS"
src="https://github.com/user-attachments/assets/64d23c27-92b9-423b-91ac-903b8476d0b4"
/>


tl;dr added opium and meth
## Why It's Good For The Game
For **too long**, narcotics, chems and stims have been mere integers or
buffs/debuffs in pills or syringes, so I introduced two new methods for
making them and populated niche, criminal vectors with them. These are
real items now, with more interactions. Allowing these to be smoked also
allowed moon rocks and SaturnX to be smoked too, including them into
this and enticing players to have another reason to make them as well.
Buffs with drawbacks, addictions and problems are actually great.

It's a new venue for flavor. I've put thought into the balance for
addition and quantity. It'll add a criminal, or exotic tone to a round,
provide new business opportunities, and new access to stims and chems
without going over the top. Perhaps something peaceful antagonists can
do. More proverbial floor pills give security or command something to
selectively enforce, and absolutely provide novel opportunities for
medical staff!

Also, methsplosions now don't happen in cigarette items! You can smoke
omegaweed without fucking dying!
## Changelog
🆑
add: Added meth, opium, and their production! Also added to black market
uplink.
add: Added a craftable glass pipe.
add: Added to contraband spawners. 
qol: Can now insert any drug item into a pipe.
fix: Spacemen can now smoke meth without exploding!!
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2025-09-09 01:13:46 +00:00
fadbf16e1b Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

Revival of https://github.com/tgstation/tgstation/pull/79691

A while back, I made this PR, but lost motivation after diving too deep
into the code soup of can_breathe and related procs. Now, I have removed
those parts, and have simplified that part of the code to the point I
think it's ready for review.

Many reviews from the previous PR have been addressed in this PR.

<hr>

<details>
  <summary>Details</summary>
  
Asthma is a 4 point negative quirk that emulates real life asthma. It
works by slowly decreasing the amount of pressure each breath you take
receives, until your lungs completely seal, ensuring death if you dont
get oxyloss meds/windpipe surgery.

Inflammation (the tracker for intensity) increases whenever you breathe
smoke, use a cigarette, metabolize histimine, or suffer an asthma
attack.

Asthma attacks have a low chance of happening every second, starting 10
minutes after you spawn and with a 20-30 grace period between attacks.
They are "diseases" that cant be outright cured by albuterol, only put
into remission. They increase inflammation at varying rates depending on
their severity, with extreme asthma attacks being a immediate threat to
your life while mild ones might not even cause inflammation. The
response to these is always the same - use your inhaler before you start
choking.

Asthmatics start with a rescue inhaler, a low-capacity inhaler loaded
with albuterol, which I will get to later.

Albuterol is a new medicine thats a little tricky to make but still
doable. It can be efficiently created with inverse convermol, or
transmutated from salbutamol and convermol. The opposite is true, with
albuterol able to be turned into salbutamol. Two canisters are available
in chemvends.

Upon use, it increases the virtual pressure of all breaths taken by 40%.
This allows for you to breathe in lower pressure environments, as well
as enhancing the effects of things like healium.

It's OD causes your diaphram to spasm, causing sporadic losebreath and
forced breathing.

Inhalers are a fancy new reagent application apparatus that uses the
INHALE reagent bitflag.

Inhalers themselves are rather unremarkable, they are merely the method
of using inhaler canisters (they also have a rotary display
approximating the uses left in a canister - just like real life
inhalers).

Inhaler canisters are the reagent containers, and are generally low
capacity. They can only be used in a inhaler, and contain aerosolized
chemicals.

Inhaler canisters and inhalers are unlocked from chemical synthesis, and
are printable for cheap from a medlathe.

In order to use a inhaler, one must uncover the mouth of a carbon and
wait a few seconds (its faster if its a self-application) before a small
amount of the reagents are delivered via the INHALE bitflag. This only
works on things currently breathing - if theyre dead, have no lungs, or
just, arent breathing - it will fail. This includes asthmatics with 100%
inflammation.
  
</details>

<img width="181" height="74"
alt="282863233-77a7cd6b-44d2-458e-9966-06d485df1521"
src="https://github.com/user-attachments/assets/293b6659-0834-4e9a-b033-cc3b0cfde18e"
/>

<img width="1465" height="202"
alt="282863346-2a247736-0c3a-43b0-a60b-7cff10ce4963"
src="https://github.com/user-attachments/assets/5d9a13dc-b7b2-4de2-adda-8fbc8276e667"
/>


Sprites are not mine; they are from swanni and I can NOT sprite for the
life of me
## Why It's Good For The Game

1. Asthma is just cool. One of my favorite features on bay was the fact
lung damage required you to turn up the pressure on your O2 tank to
survive, and this does precisely that.
2. Its always fun to add new ways to interact with atmos as a player
that arent grossly broken, and I fail to see how a 40% increase of gas
intake will really affect balance too badly.
3. Inhalers are badass.
## Changelog
🆑
add: Asthma quirk, based on IRL asthma
add: Inhalers, a new reagent administering method that uses INHALE
add: Albuterol, a new reagent that increases the amount of gas you
inhale by 40%
balance: Inverse convermol now forms once the reaction is done, not on
metabolize
/🆑

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-09-08 13:31:21 +12:00
SyncIt21andGitHub b0a69a4023 Zombie powder works through inhale/ingest again (#92880)
## About The Pull Request
- Fixes #92873

ignore commit message, that's a typo

## Changelog
🆑
fix: zombie powder works through inhale(now faster acting)/ingest again
/🆑
2025-09-07 11:11:30 +02:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
SmArtKarandGitHub 7b2564628f Fixes water cooler weird code/runtimes (#92758)
## About The Pull Request

``liquid_amount`` does nothing as its an atavism from main tank
explosions (which use it for welding fuel effects), and ``chem_splash``
requires an integer range. Latter is also a problem in main boom proc,
so we gotta floor the values before passing the range.

## Changelog
🆑
fix: Water cooler explosions no longer runtime
/🆑
2025-09-04 23:02:19 -04:00
SmArtKarandGitHub 0792b5fcb4 Makes synthflesh patches not spam visible messages every tick (#92838)
## About The Pull Request

Patches rely on show_message to prevent spam due to microdozing, which
synthflesh proudly ignored. Fixed this by making unhusk failure messages
respect show_message, and moving stat check to only affect the dead
person's personal to_chat

## Why It's Good For The Game

The spam is absurd and clogs up chats of everyone in medbay

## Changelog
🆑
fix: Made synthflesh patches not spam chat messages every tick
/🆑
2025-09-04 22:31:36 -04:00
BloopandGitHub 810847c9c2 Stops geysers from glitterbombing CI randomly (#92843)
## About The Pull Request

Fixes https://github.com/tgstation/tgstation/issues/92509
Fixes https://github.com/NovaSector/NovaSector/issues/6017

Glitter everywhere...

<img width="1762" height="162" alt="image"
src="https://github.com/user-attachments/assets/ad92a9dd-3aa0-4e20-b15a-e15894c0296f"
/>

`/datum/reagent/glitter/random` is uniquely the only reagent that
instantly transforms into another type when created. The geyser unit
test does not understand this, so every now and then when a random
geyser picks glitter it will break CI.

Makes random glitter no longer replace itself with another reagent

## Why It's Good For The Game

Less spurious runtimes.

## Changelog

Not player-facing
2025-09-03 06:02:11 -07:00
bda68348a8 lets you put pills in slices of cheese and meats (#92630)
## About The Pull Request

Adds the food storage component to cutlets, cooked and raw, as well as
slices of cheese. This means you can put pills in them.
Also changes pills on accidental consumption, if you like the food they
are stuck into, then you don't even notice that you just ate a pill. Mmm
cheese...
## Why It's Good For The Game

Food storage is a really funny component but only works on very few
foods, like whole wheels of cheese or loaves of bread. Everyone knows
the best way to sneak a pill is to put it in a slice of cheese.
## Changelog
🆑
add: Lets small items be stuck into slices of cheese or lunch meat
balance: Pills in food no longer alert you that you've just swallowed
one if you like the food they were stuck in (yum... cheese...)
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-08-24 14:59:10 -04:00
Pickle-CodingandGitHub 58beba801c Water evaporation no longer cools below 0C. (#92411)
## About The Pull Request
Water evaporation no longer cools the air below 0C. It will also cool
the floor now.
## Why It's Good For The Game
The maximum humidity in the air rapidly drops when it gets below 0C, and
there is no more heat to boil the water since it already got cooled. For
compensation, water evaporation now cools the floor too. Extinguishing
fires caused a problem where the room went way too cold and slippery,
which was just ridiculous and annoying. It was also too powerful and
made a lot of fires an insignificant problem. It was also used to cheese
hypernoblium formation, which wasn't the intended method, skips intended
progression and felt extremely gamey.
## Changelog
🆑
fix: Fixes water evaporation cooling the air to 2.7 Kelvin.
balance: Water evaporation can cool the floor.
/🆑
2025-08-21 14:42:11 -07:00
SyncIt21andGitHub 041f16b678 Improves & fixes /datum/reagents/convert_reagent() (#92640)
## About The Pull Request
- Fixes `/datum/reagents/convert_reagent()` not taking into account
purity & ph of removed reagents in its final product when using
conversion threshold
- Fixes `/datum/reagents/convert_reagent()` transferring incorrect
reagent data when converting multiple reagents.
- Makes the proc overall faster as it does no expensive proc calls to
`remove_reagent()` & `del_reagent()`

## Changelog
🆑
fix: converting reagents now computes correct purity & ph when
conversion threshold is set
fix: converting reagents transfers reagent data correctly only when not
filtering sub types
code: converting reagents is faster performance wise
/🆑
2025-08-21 20:15:03 +02:00
nevimer 99be7d565e Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-08-19
# Conflicts:
#	.github/CODEOWNERS
#	.github/CONTRIBUTING.md
#	.github/workflows/auto_changelog.yml
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/compile_changelogs.yml
#	.github/workflows/gbp.yml
#	.github/workflows/gbp_collect.yml
#	.github/workflows/stale.yml
#	README.md
#	SQL/database_changelog.md
#	_maps/_basemap.dm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/KiloStation/KiloStation.dmm
#	_maps/wawastation.json
#	code/__DEFINES/combat.dm
#	code/__DEFINES/icon_smoothing.dm
#	code/__DEFINES/inventory.dm
#	code/__DEFINES/mobs.dm
#	code/__DEFINES/subsystems.dm
#	code/__DEFINES/surgery.dm
#	code/__HELPERS/roundend.dm
#	code/_globalvars/bitfields.dm
#	code/_globalvars/lists/mobs.dm
#	code/_globalvars/traits/_traits.dm
#	code/_globalvars/traits/admin_tooling.dm
#	code/_onclick/hud/hud.dm
#	code/_onclick/hud/human.dm
#	code/_onclick/hud/screen_objects.dm
#	code/controllers/subsystem/processing/quirks.dm
#	code/controllers/subsystem/sprite_accessories.dm
#	code/controllers/subsystem/statpanel.dm
#	code/controllers/subsystem/ticker.dm
#	code/datums/brain_damage/creepy_trauma.dm
#	code/datums/browser.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/components/echolocation.dm
#	code/datums/components/leanable.dm
#	code/datums/dna/blocks/dna_features_block.dm
#	code/datums/dna/dna.dm
#	code/datums/emotes.dm
#	code/datums/map_config.dm
#	code/datums/mutations/_mutations.dm
#	code/datums/mutations/chameleon.dm
#	code/datums/quirks/negative_quirks/allergic.dm
#	code/datums/records/manifest.dm
#	code/datums/ruins/icemoon.dm
#	code/datums/station_traits/_station_trait.dm
#	code/datums/station_traits/job_traits.dm
#	code/datums/station_traits/neutral_traits.dm
#	code/datums/status_effects/debuffs/dna_transformation.dm
#	code/datums/storage/storage.dm
#	code/datums/storage/subtypes/bags.dm
#	code/datums/storage/subtypes/belts.dm
#	code/datums/storage/subtypes/others/misc.dm
#	code/datums/storage/subtypes/pockets.dm
#	code/datums/weather/weather.dm
#	code/datums/weather/weather_types/ash_storm.dm
#	code/game/data_huds.dm
#	code/game/gamemodes/objective.dm
#	code/game/machinery/computer/communications.dm
#	code/game/machinery/computer/dna_console.dm
#	code/game/machinery/computer/orders/order_computer/mining_order.dm
#	code/game/machinery/computer/records/medical.dm
#	code/game/machinery/dish_drive.dm
#	code/game/machinery/dna_infuser/organ_sets/fox_organs.dm
#	code/game/machinery/doors/airlock.dm
#	code/game/machinery/doors/firedoor.dm
#	code/game/machinery/requests_console.dm
#	code/game/objects/effects/decals/cleanable/blood.dm
#	code/game/objects/items/climbingrope.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/dualsaber.dm
#	code/game/objects/items/stacks/sheets/sheet_types.dm
#	code/game/objects/items/storage/backpack.dm
#	code/game/objects/items/storage/belt.dm
#	code/game/objects/items/storage/boxes/clothes_boxes.dm
#	code/game/objects/items/storage/dufflebags.dm
#	code/game/objects/items/storage/medkit.dm
#	code/game/objects/items/storage/toolboxes/weapons.dm
#	code/game/objects/items/surgery_tray.dm
#	code/game/objects/items/tools/painter/paintable_decals.dm
#	code/game/objects/structures/crates_lockers/closets/utility_closets.dm
#	code/game/objects/structures/girders.dm
#	code/game/objects/structures/kitchen_spike.dm
#	code/game/objects/structures/mirror.dm
#	code/game/objects/structures/tables_racks.dm
#	code/game/sound/sound.dm
#	code/game/world.dm
#	code/modules/admin/admin.dm
#	code/modules/admin/create_mob.dm
#	code/modules/admin/topic.dm
#	code/modules/admin/verbs/admingame.dm
#	code/modules/admin/verbs/ert.dm
#	code/modules/antagonists/brother/brother.dm
#	code/modules/antagonists/cult/cult_armor.dm
#	code/modules/antagonists/fugitive/hunters/hunter.dm
#	code/modules/antagonists/space_ninja/space_ninja.dm
#	code/modules/antagonists/wizard/equipment/spellbook_entries/summons.dm
#	code/modules/client/preferences.dm
#	code/modules/client/preferences/language.dm
#	code/modules/client/preferences/middleware/_middleware.dm
#	code/modules/client/preferences/species_features/moth.dm
#	code/modules/client/preferences/species_features/mushperson.dm
#	code/modules/client/preferences/species_features/pod.dm
#	code/modules/client/preferences_savefile.dm
#	code/modules/clothing/head/hat.dm
#	code/modules/clothing/shoes/boots.dm
#	code/modules/clothing/shoes/sneakers.dm
#	code/modules/clothing/suits/utility.dm
#	code/modules/clothing/under/color.dm
#	code/modules/clothing/under/jobs/security.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/hydroponics/grown/replicapod.dm
#	code/modules/jobs/job_types/chaplain/chaplain_nullrod.dm
#	code/modules/jobs/job_types/cyborg.dm
#	code/modules/loadout/categories/pocket.dm
#	code/modules/mapfluff/ruins/spaceruin_code/hilbertshotel.dm
#	code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm
#	code/modules/mob/dead/dead.dm
#	code/modules/mob/living/blood.dm
#	code/modules/mob/living/blood_types.dm
#	code/modules/mob/living/carbon/carbon.dm
#	code/modules/mob/living/carbon/examine.dm
#	code/modules/mob/living/carbon/human/_species.dm
#	code/modules/mob/living/carbon/human/dummy.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_defense.dm
#	code/modules/mob/living/carbon/human/human_update_icons.dm
#	code/modules/mob/living/carbon/human/inventory.dm
#	code/modules/mob/living/carbon/human/species_types/felinid.dm
#	code/modules/mob/living/carbon/human/species_types/mothmen.dm
#	code/modules/mob/living/carbon/human/species_types/mushpeople.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_item_handling.dm
#	code/modules/mob/living/silicon/ai/ai_say.dm
#	code/modules/mob/living/silicon/robot/examine.dm
#	code/modules/mob/living/silicon/robot/robot.dm
#	code/modules/mob/living/silicon/robot/robot_model.dm
#	code/modules/mob/mob_say.dm
#	code/modules/mod/mod_activation.dm
#	code/modules/mod/modules/_module.dm
#	code/modules/modular_computers/computers/item/computer.dm
#	code/modules/power/smes.dm
#	code/modules/projectiles/gun.dm
#	code/modules/reagents/chemistry/holder/mob_life.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/impure_reagents/impure_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/religion/honorbound/honorbound_rites.dm
#	code/modules/shuttle/mobile_port/shuttle_move_callbacks.dm
#	code/modules/surgery/bodyparts/_bodyparts.dm
#	code/modules/surgery/bodyparts/head_hair_and_lips.dm
#	code/modules/surgery/organs/external/_visual_organs.dm
#	code/modules/surgery/organs/external/spines.dm
#	code/modules/surgery/organs/external/tails.dm
#	code/modules/surgery/organs/external/wings/moth_wings.dm
#	code/modules/surgery/organs/internal/ears/_ears.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/surgery/surgery_step.dm
#	code/modules/tooltip/tooltip.html
#	code/modules/unit_tests/changeling.dm
#	code/modules/unit_tests/designs.dm
#	code/modules/unit_tests/screenshot_humanoids.dm
#	code/modules/unit_tests/screenshots/screenshot_airlocks_icons.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_blobinfection.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_bloodbrother.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_obsessed.png
#	code/modules/unit_tests/screenshots/screenshot_humanoids__datum_species_human.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body.png
#	code/modules/unit_tests/simple_animal_freeze.dm
#	code/modules/vending/medical.dm
#	code/modules/vending/sovietsoda.dm
#	config/dynamic.toml
#	config/maps.txt
#	config/spaceruinblacklist.txt
#	icons/map_icons/clothing/_clothing.dmi
#	icons/map_icons/clothing/head/_head.dmi
#	icons/map_icons/clothing/head/beret.dmi
#	icons/map_icons/clothing/mask.dmi
#	icons/map_icons/clothing/neck.dmi
#	icons/map_icons/clothing/shoes.dmi
#	icons/map_icons/clothing/suit/_suit.dmi
#	icons/map_icons/clothing/under/_under.dmi
#	icons/map_icons/clothing/under/costume.dmi
#	icons/map_icons/clothing/under/dress.dmi
#	icons/map_icons/items/_item.dmi
#	icons/map_icons/items/encryptionkey.dmi
#	icons/map_icons/items/pda.dmi
#	icons/map_icons/objects.dmi
#	interface/skin.dmf
#	modular_zubbers/code/modules/storyteller/event_defines/ghostset/alien_infestation.dm
#	modular_zubbers/code/modules/storyteller/event_defines/ghostset/changeling.dm
#	modular_zubbers/code/modules/storyteller/event_defines/ghostset/nightmare.dm
#	modular_zubbers/code/modules/storyteller/event_defines/ghostset/space_dragon.dm
#	modular_zubbers/code/modules/storyteller/event_defines/ghostset/space_ninja.dm
#	modular_zubbers/code/modules/storyteller/event_defines/ghostset/spider_infestation.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/abductor.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/blob.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/fugitives.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/morph.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/pirates.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/revenant.dm
#	modular_zubbers/code/modules/storyteller/event_defines/major/slaughter.dm
#	strings/pirates.json
#	strings/traumas.json
#	tgui/packages/tgfont/icons/nanotrasen_logo.svg
#	tgui/packages/tgfont/icons/syndicate_logo.svg
#	tgui/packages/tgui/index.tsx
#	tgui/packages/tgui/interfaces/AntagInfoBlob.tsx
#	tgui/packages/tgui/interfaces/AntagInfoGeneric.tsx
#	tgui/packages/tgui/interfaces/AntagInfoTraitor.tsx
#	tgui/packages/tgui/interfaces/Orbit/JobIcon.tsx
#	tgui/packages/tgui/interfaces/PersonalCrafting/constants.ts
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/QuirksPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/index.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/loadout/ItemDisplay.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/loadout/base.ts
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/loadout/index.tsx
#	tgui/packages/tgui/interfaces/Vending.tsx
#	tgui/packages/tgui/interfaces/VotePanel.tsx
#	tgui/packages/tgui/styles/interfaces/NtosMessenger.scss
#	tgui/packages/tgui/styles/interfaces/PreferencesMenu.scss
#	tgui/packages/tgui/styles/main.scss
#	tools/ci/copy_build_output.sh
#	tools/maplint/lints/window_spawner.yml
#	tools/pull_request_hooks/autoChangelog.js
2025-08-19 23:36:21 -04:00
Rhialsandnevimer 906ac46477 Makes water coolers more mechanically interesting, fills them up with fruit punch sometimes (#92480)
## About The Pull Request

This overhauls Water Coolers (now referred to as "liquid coolers"
internally and in most external cases). They'll feel less like a useless
prop now.

(sprites may look off because of the gif software I use)

**Important Thing # 1:** The reagents are now handled by cooler jugs.
You can pop the jug off of a cooler, fill it with whatever the hell you
want, and put it back on. Fill it with drugs. Fill it with acid. I don't
care, I'm not your mom.

<img width="41" height="56" alt="image"
src="https://github.com/user-attachments/assets/4c618cab-99b4-4a72-ae7b-7b900d7f5eaf"
/>

The sprite now uses an overlay to change colors based on the mix. Water,
when present in the cooler, is magically turned blue to keep that
classic water cooler look.

<img width="280" height="333" alt="image"
src="https://github.com/user-attachments/assets/8a6a905c-bef4-4f5f-9393-5ce5dcca0620"
/>

The jugs are 200 reagents, and are mechanically comparable to the jerry
can. No 200 unit acid splashes or anything.

Y'know, unless you put the jug in a cooler and knock it over...

![JUST COVER ME IN ACID WHY
DONTCHA](https://github.com/user-attachments/assets/7536a13c-1cb4-4af1-bfcc-25842215b393)

**Important Thing # 2:** They can be anchored, tipped, and crafted.

Tipping them requires the cooler be unanchored. If you want to use one
of these tactically, unwrench it beforehand.

![the
tipperrrr](https://github.com/user-attachments/assets/6b2cef28-bfb6-457a-b191-d91ec4fd9028)

**Important Thing # 3:** They can be bought from cargo now!

<img width="501" height="605" alt="image"
src="https://github.com/user-attachments/assets/6f261aab-f11a-4126-98ce-d9278d01d0a0"
/>

**Important Thing # 4**

Fruit punch.

<img width="175" height="127" alt="image"
src="https://github.com/user-attachments/assets/ac81e48c-47ff-461f-85f8-3e77a6a6ca55"
/>

Fruit punch is a drink with impressive (slightly faster than omnizine)
healing qualities. Unfortunately, it's so unbearably sweet that it can
only be safely consumed near a liquid cooler! Drinking this stuff is a
commitment, since if you stray from the cooler while digesting it, you
will be hurt and disoriented. You should avoid drinking too much at
once, in case an emergency comes up!

For this reason, we encourage drinkers to _take small sips from your
paper cooler cup, hang around the cooler, and maybe chat with other
people who are healing too._

(Mapload) water coolers have a 1% chance to start full of punch instead
of water. Maybe you'll get lucky and start with a healing station in
your department, or maybe a hopeless space explorer will find one in a
ruin and be saved.

You can also buy one from cargo but it's priceyyyyy. It's also the only
source of punch.
## Why It's Good For The Game

Realizing how little functionality water coolers have was super
disappointing. They do hardly anything but take up space and look
pretty. And now, they're getting mapped into all of the new stations! We
can't have a bunch of inert, sandbox-shunning furniture just sitting
around, the other codebases would laugh at us!

Now, coolers are more congruent with how most people would expect one to
behave in the game environment. Even minor changes like making them
unanchorable or refillable helps them fit in with most players'
intuitive understanding of how atoms typically behave.

The reagent storage change gives coolers their own unique niche in the
sandbox. Tipping them over can also give you an edge in escaping
someone, so even the untouched roundstart coolers can serve a purpose to
savvy players.

For the punch cooler, I figured "why not make a reagent that rewards
players for treating the water cooler like a water cooler?" The punch
encourages players to stand around it, slowly sip from the cooler, and
chat with their co-workers. Just like people do in offices! It's
thematically sound!
## Changelog
🆑 Rhials
add: You may now remove water cooler jugs and put whatever you want in
them. Go nuts.
add: Water coolers are now craftable (with plastic), orderable from
cargo, and tippable when unanchored.
add: Rarely, water coolers will spawn full of healing fruit punch
instead of water! Be careful not to stray from the cooler while
digesting this stuff.
add: You can also just buy the punch cooler from cargo if you feel like
it.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
# Conflicts:
#	code/modules/reagents/reagent_dispenser.dm
2025-08-19 22:42:52 -04:00
Thunder12345andnevimer 6618c9d694 Misc File Purge: The Return (#92438)
## About The Pull Request

Purged several files inthe theme of misc.dm and broken the contents out
into better organised files.

Incidentally done some minor cleanup by removing an unused global list
referring to a string file that no-longer exists, and removing a useless
proc that replicated the behaviour of file2list().

## Why It's Good For The Game

See #60358 and all its successors

## Changelog
🆑
code: Reduced the number of files named misc.dm or similar by 14%.
/🆑
# Conflicts:
#	code/_globalvars/lists/flavor_misc.dm
2025-08-19 22:35:47 -04:00
Time-Greenandnevimer 147df9ec59 Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>

# Conflicts:
#	code/modules/clothing/head/tinfoilhat.dm
2025-08-19 22:29:26 -04:00
4f6e27ca92 Makes water coolers more mechanically interesting, fills them up with fruit punch sometimes (#92480)
## About The Pull Request

This overhauls Water Coolers (now referred to as "liquid coolers"
internally and in most external cases). They'll feel less like a useless
prop now.

(sprites may look off because of the gif software I use)

**Important Thing # 1:** The reagents are now handled by cooler jugs.
You can pop the jug off of a cooler, fill it with whatever the hell you
want, and put it back on. Fill it with drugs. Fill it with acid. I don't
care, I'm not your mom.

<img width="41" height="56" alt="image"
src="https://github.com/user-attachments/assets/4c618cab-99b4-4a72-ae7b-7b900d7f5eaf"
/>

The sprite now uses an overlay to change colors based on the mix. Water,
when present in the cooler, is magically turned blue to keep that
classic water cooler look.

<img width="280" height="333" alt="image"
src="https://github.com/user-attachments/assets/8a6a905c-bef4-4f5f-9393-5ce5dcca0620"
/>

The jugs are 200 reagents, and are mechanically comparable to the jerry
can. No 200 unit acid splashes or anything.

Y'know, unless you put the jug in a cooler and knock it over...

![JUST COVER ME IN ACID WHY
DONTCHA](https://github.com/user-attachments/assets/7536a13c-1cb4-4af1-bfcc-25842215b393)

**Important Thing # 2:** They can be anchored, tipped, and crafted.

Tipping them requires the cooler be unanchored. If you want to use one
of these tactically, unwrench it beforehand.

![the
tipperrrr](https://github.com/user-attachments/assets/6b2cef28-bfb6-457a-b191-d91ec4fd9028)

**Important Thing # 3:** They can be bought from cargo now!

<img width="501" height="605" alt="image"
src="https://github.com/user-attachments/assets/6f261aab-f11a-4126-98ce-d9278d01d0a0"
/>

**Important Thing # 4**

Fruit punch.

<img width="175" height="127" alt="image"
src="https://github.com/user-attachments/assets/ac81e48c-47ff-461f-85f8-3e77a6a6ca55"
/>

Fruit punch is a drink with impressive (slightly faster than omnizine)
healing qualities. Unfortunately, it's so unbearably sweet that it can
only be safely consumed near a liquid cooler! Drinking this stuff is a
commitment, since if you stray from the cooler while digesting it, you
will be hurt and disoriented. You should avoid drinking too much at
once, in case an emergency comes up!

For this reason, we encourage drinkers to _take small sips from your
paper cooler cup, hang around the cooler, and maybe chat with other
people who are healing too._

(Mapload) water coolers have a 1% chance to start full of punch instead
of water. Maybe you'll get lucky and start with a healing station in
your department, or maybe a hopeless space explorer will find one in a
ruin and be saved.

You can also buy one from cargo but it's priceyyyyy. It's also the only
source of punch.
## Why It's Good For The Game

Realizing how little functionality water coolers have was super
disappointing. They do hardly anything but take up space and look
pretty. And now, they're getting mapped into all of the new stations! We
can't have a bunch of inert, sandbox-shunning furniture just sitting
around, the other codebases would laugh at us!

Now, coolers are more congruent with how most people would expect one to
behave in the game environment. Even minor changes like making them
unanchorable or refillable helps them fit in with most players'
intuitive understanding of how atoms typically behave.

The reagent storage change gives coolers their own unique niche in the
sandbox. Tipping them over can also give you an edge in escaping
someone, so even the untouched roundstart coolers can serve a purpose to
savvy players.

For the punch cooler, I figured "why not make a reagent that rewards
players for treating the water cooler like a water cooler?" The punch
encourages players to stand around it, slowly sip from the cooler, and
chat with their co-workers. Just like people do in offices! It's
thematically sound!
## Changelog
🆑 Rhials
add: You may now remove water cooler jugs and put whatever you want in
them. Go nuts.
add: Water coolers are now craftable (with plastic), orderable from
cargo, and tippable when unanchored.
add: Rarely, water coolers will spawn full of healing fruit punch
instead of water! Be careful not to stray from the cooler while
digesting this stuff.
add: You can also just buy the punch cooler from cargo if you feel like
it.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-08-17 02:04:46 +00:00
nevimer 81313b27a5 Merge remote-tracking branch 'origin/pupstream-25-08-08' 2025-08-15 17:36:16 -04:00
Thunder12345andGitHub 7c6e6422cc Misc File Purge: The Return (#92438)
## About The Pull Request

Purged several files inthe theme of misc.dm and broken the contents out
into better organised files.

Incidentally done some minor cleanup by removing an unused global list
referring to a string file that no-longer exists, and removing a useless
proc that replicated the behaviour of file2list().

## Why It's Good For The Game

See #60358 and all its successors

## Changelog
🆑
code: Reduced the number of files named misc.dm or similar by 14%.
/🆑
2025-08-12 21:18:24 +02:00
WaterpigandRoxy 55504da79d Datumizes DNA blocks, makes DNA cleaner in general (#92061)
Moves all the dna block handling onto singleton datums initialized
inside global lists, to make the handling dna less of a copy-paste mess
and make adding new blocks significantly easier. There is still some
work to be done in the copypaste department but ultimately that falls
under its own PR scope after the core refactor goes through. (Ill
probably do those but it will also be easier for everyone else as the
code is now significantly less of an eyesore)

Both features and identities have been tested through and through, and
seem to be working fine.

Also removed the reliance on weird hardcoded lookup tables for length,
and other similar things that just didn't make sense when I was passing
through DNA code. There's a lot more that fall out of scope for this
exact PR's goal however

I've been told the maintainers will love me for doing this

🆑
code: feature keys are no longer magical strings floating around the
codebase and use proper defines
refactor: DNA blocks are now handled with singleton datums.
/🆑
2025-08-12 13:48:00 -04:00
43fc75facb Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-08-11 18:36:50 +02:00
LT3andGitHub edbaf5580a Fix washing off colorful reagent (#4404)
## About The Pull Request

#3947 moved colorful reagent's application to the mob instead of
bodyparts/organs, however this left it unable to be washed off (in
effect, permanent.)

Fixes washing, removes the hair color component, adds the changes to the
inverse reagent reaction, adds color removal to the SAD.

## Why It's Good For The Game

I don't like a dozen ahelps when the clown throws a colorful reagent
grenade

## Changelog

🆑 LT3
fix: Fixed washing colorful reagent off mobs
qol: The SAD removes colorful reagent when regenerating
/🆑
2025-08-08 14:58:06 -07:00
Ghomandnevimer a058207247 replaces the health variable for fishes with integrity (#92192)
## About The Pull Request
Because fish is an item, it inherits the use of integrity from objects,
however it also has its own health variable. For consistency, ~~damaging
its integrity should also lower its health and healing it should also
recover its integrity. Fish has a max integrity that's double its
health.
I've also renamed `adjust_health` to `set_health` since it doesn't
adjust the health by the provided value but sets it to said value.~~
I've scrapped the latter to instead use integrity.

## Why It's Good For The Game
A small bit of consistency. If you shoot a fish with a laser gun,
wouldn't it die?

(cherry picked from commit 940d73aeae)
2025-08-08 15:29:14 -04:00
SyncIt21andnevimer 796bb41477 Merges copy_to() into trans_to() for reagent holder (#92410)
## About The Pull Request
Merges `/datum/reagents/proc/copy_to()` ->
`/datum/reagents/proc/trans_to()`. Added a parameter `copy_only` to
indicate we want a copy operation

## Why It's Good For The Game
- Less code to maintain
- All the functionality of `trans_to()`[logging, transferring single
reagent, expelling reagents from stomach, etc] now applies for copying
reagents as well which was missing a lot of it, so we have consistent
behaviour

## Changelog
🆑
refactor: code for copying reagents has been refactored. Please report
bugs on github
/🆑

(cherry picked from commit a1d27e384d)
2025-08-08 15:29:11 -04:00
GhomandGitHub 940d73aeae replaces the health variable for fishes with integrity (#92192)
## About The Pull Request
Because fish is an item, it inherits the use of integrity from objects,
however it also has its own health variable. For consistency, ~~damaging
its integrity should also lower its health and healing it should also
recover its integrity. Fish has a max integrity that's double its
health.
I've also renamed `adjust_health` to `set_health` since it doesn't
adjust the health by the provided value but sets it to said value.~~
I've scrapped the latter to instead use integrity.

## Why It's Good For The Game
A small bit of consistency. If you shoot a fish with a laser gun,
wouldn't it die?
2025-08-04 22:30:53 -05:00
SyncIt21andGitHub a1d27e384d Merges copy_to() into trans_to() for reagent holder (#92410)
## About The Pull Request
Merges `/datum/reagents/proc/copy_to()` ->
`/datum/reagents/proc/trans_to()`. Added a parameter `copy_only` to
indicate we want a copy operation

## Why It's Good For The Game
- Less code to maintain
- All the functionality of `trans_to()`[logging, transferring single
reagent, expelling reagents from stomach, etc] now applies for copying
reagents as well which was missing a lot of it, so we have consistent
behaviour

## Changelog
🆑
refactor: code for copying reagents has been refactored. Please report
bugs on github
/🆑
2025-08-05 04:42:58 +02:00
Thunder12345andRoxy e7c25d4c40 The Glitterening (#92226)
## About The Pull Request

Adds a number of new capabilities to glitter.

- It can be any colour.
<img width="657" height="398" alt="image"
src="https://github.com/user-attachments/assets/60e80c04-8eee-470c-8953-47f6eda9f83e"
/>

- It can be made in chemistry and dyed by combining it with acetone and
other reagents to give it the average colour of the non-glitter,
not-acetone reagents.
- Multiple colours can be mixed into one reagent datum, randomly
depositing a colour from those in the datum on the floor.
<img width="554" height="507" alt="image"
src="https://github.com/user-attachments/assets/9cc7d1d5-9bec-4b28-af06-310ffb24de49"
/>

- Anyone with glitter reagent in them will cough glitter onto the floor
- Glittery crates will leave a trail of appropriately coloured glitter
when moved
<img width="960" height="259" alt="image"
src="https://github.com/user-attachments/assets/71cc1176-23f9-4ae7-b500-1744b752c014"
/>

Resprited glitter to support these changes and make it not look like gas
(or ass).

## Why It's Good For The Game

It looks cool and raises the bar for chemists maximally pissing off the
janitor as they fill a room with multicoloured glitter and all the
occupants run off to cough more up all over the surrounding area.

## Changelog
🆑
add: Glitter can now be made from plastic polymers and aluminium.
add: Plastic polymer can be made at any temperature, and then heated to
produce sheets.
add: Glitter can now be made any colour, mix 10 units each of glitter
and acetone to change its colour to that of the other reagents in the
beaker.
add: Mixing different colours of glitter will cause a random selection
of those colours to appear on the floor when released.
add: Being exposed to glitter in reagent form causes you to cough up
more glitter onto the floor
add: Dragging glittery crates will now spread a trail of glitter and
angry janitors behind them.
image: Added new glitter sprites (that don't look like gasses)
/🆑
2025-08-04 20:53:39 -04:00
SyncIt21andRoxy 081627bfa7 [NO GBP] Fixes multiplier applied incorrectly in trans_to() (#92404)
## About The Pull Request
- Fixes #92401

And many other reagent transfer operations who's multiplier is not 1

## Changelog
🆑
fix: reagent transfer amounts with multiplier applied(e.g. cryotubes)
have been corrected
/🆑
2025-08-04 20:53:38 -04:00
SyncIt21andRoxy 2a96ae3344 Refactors reagent transfer operations (#92213)
- Fixes #92198
- Fixes #92298

**1) Replaces reagent `on_transfer()` with its corresponding `expose()`
proc variants**
This PR replaces all known implementations of
`/datum/reagent/on_transfer()` with `/datum/reagent/expose_mob()`. We
use `expose_mob()` & not the other `expose()` variants because all known
implementations were targeting living beings so this was the correct
replacement This has 2 benefits
- `expose_mob()` gets called correctly when an impure reagent is
converted to it's inverse variant like for Cryostylane & Cryogeldia.
This isn't the case for `on_transfer()` so we get correct behaviour
which fixes the above bug
- Removing `on_transfer()` makes the proc `/datum/reagents/trans_to()`
much faster performance wise because we aren't calling `update_total()`
per reagent transfered now but only once at the end after all reagents
are transferred

Also there was little to no functional difference between the 2 procs,
`expose()` works correctly in comparison & this won't confuse devs when
deciding which proc to use. One proc to cover all scenarios

**2) Removes unused expose signals**
`COMSIG_ATOM_AFTER_EXPOSE_REAGENTS` & `COMSIG_REAGENTS_EXPOSE_ATOM` are
not used anywhere in the codebase i.e. no listeners. They can be
discarded as dead code

**3) Fixes wrong transfer amount passed to
`/datum/reagent/intercept_reagents_transfer()` &
`/datum/reagents/expose()`**
The wrong transfer `amount` was passed when it fact it should use
`transfer_amount` which contains the multiplier & proportional
multiplier applied. Also the reagent volumes exposed was computed
incorrectly resulting in the 2nd issue listed above. Blood transferred
to mobs now go to `blood_volume` directly instead of getting added to
the mobs reagent holder as long as it's less than `BLOOD_VOLUME_MAXIMUM`
level

🆑
fix: reagent intercept operations use correct volumes e.g. ph buffers
fix: impure cryostylane now has inverse cryogeldia effects when applied
on mods
fix: exposing reagents now uses correct volumes i.e. injecting blood
into mobs don't increase it exponentially and stops when max levels are
reached. Exposure affects of all reagents are lessened upon continuous
exposure
refactor: refactors how reagent affects are applied on mobs. Report bugs
on github
/🆑
2025-08-04 20:53:36 -04:00
Thunder12345andGitHub d97c57b263 The Glitterening (#92226)
## About The Pull Request

Adds a number of new capabilities to glitter.

- It can be any colour.
<img width="657" height="398" alt="image"
src="https://github.com/user-attachments/assets/60e80c04-8eee-470c-8953-47f6eda9f83e"
/>

- It can be made in chemistry and dyed by combining it with acetone and
other reagents to give it the average colour of the non-glitter,
not-acetone reagents.
- Multiple colours can be mixed into one reagent datum, randomly
depositing a colour from those in the datum on the floor.
<img width="554" height="507" alt="image"
src="https://github.com/user-attachments/assets/9cc7d1d5-9bec-4b28-af06-310ffb24de49"
/>

- Anyone with glitter reagent in them will cough glitter onto the floor
- Glittery crates will leave a trail of appropriately coloured glitter
when moved
<img width="960" height="259" alt="image"
src="https://github.com/user-attachments/assets/71cc1176-23f9-4ae7-b500-1744b752c014"
/>

Resprited glitter to support these changes and make it not look like gas
(or ass).

## Why It's Good For The Game

It looks cool and raises the bar for chemists maximally pissing off the
janitor as they fill a room with multicoloured glitter and all the
occupants run off to cough more up all over the surrounding area.

## Changelog
🆑
add: Glitter can now be made from plastic polymers and aluminium.
add: Plastic polymer can be made at any temperature, and then heated to
produce sheets.
add: Glitter can now be made any colour, mix 10 units each of glitter
and acetone to change its colour to that of the other reagents in the
beaker.
add: Mixing different colours of glitter will cause a random selection
of those colours to appear on the floor when released.
add: Being exposed to glitter in reagent form causes you to cough up
more glitter onto the floor
add: Dragging glittery crates will now spread a trail of glitter and
angry janitors behind them.
image: Added new glitter sprites (that don't look like gasses)
/🆑
2025-08-03 00:25:58 +10:00
SyncIt21andGitHub 6bc86d2bd4 [NO GBP] Fixes multiplier applied incorrectly in trans_to() (#92404)
## About The Pull Request
- Fixes #92401

And many other reagent transfer operations who's multiplier is not 1

## Changelog
🆑
fix: reagent transfer amounts with multiplier applied(e.g. cryotubes)
have been corrected
/🆑
2025-08-01 10:24:14 +02:00
SyncIt21andGitHub 64376e2899 Refactors reagent transfer operations (#92213)
## About The Pull Request
- Fixes #92198
- Fixes #92298

**1) Replaces reagent `on_transfer()` with its corresponding `expose()`
proc variants**
This PR replaces all known implementations of
`/datum/reagent/on_transfer()` with `/datum/reagent/expose_mob()`. We
use `expose_mob()` & not the other `expose()` variants because all known
implementations were targeting living beings so this was the correct
replacement This has 2 benefits
- `expose_mob()` gets called correctly when an impure reagent is
converted to it's inverse variant like for Cryostylane & Cryogeldia.
This isn't the case for `on_transfer()` so we get correct behaviour
which fixes the above bug
- Removing `on_transfer()` makes the proc `/datum/reagents/trans_to()`
much faster performance wise because we aren't calling `update_total()`
per reagent transfered now but only once at the end after all reagents
are transferred

Also there was little to no functional difference between the 2 procs,
`expose()` works correctly in comparison & this won't confuse devs when
deciding which proc to use. One proc to cover all scenarios

**2) Removes unused expose signals** 
`COMSIG_ATOM_AFTER_EXPOSE_REAGENTS` & `COMSIG_REAGENTS_EXPOSE_ATOM` are
not used anywhere in the codebase i.e. no listeners. They can be
discarded as dead code

**3) Fixes wrong transfer amount passed to
`/datum/reagent/intercept_reagents_transfer()` &
`/datum/reagents/expose()`**
The wrong transfer `amount` was passed when it fact it should use
`transfer_amount` which contains the multiplier & proportional
multiplier applied. Also the reagent volumes exposed was computed
incorrectly resulting in the 2nd issue listed above. Blood transferred
to mobs now go to `blood_volume` directly instead of getting added to
the mobs reagent holder as long as it's less than `BLOOD_VOLUME_MAXIMUM`
level

## Changelog
🆑
fix: reagent intercept operations use correct volumes e.g. ph buffers
fix: impure cryostylane now has inverse cryogeldia effects when applied
on mods
fix: exposing reagents now uses correct volumes i.e. injecting blood
into mobs don't increase it exponentially and stops when max levels are
reached. Exposure affects of all reagents are lessened upon continuous
exposure
refactor: refactors how reagent affects are applied on mobs. Report bugs
on github
/🆑
2025-07-31 20:04:07 +02:00
Y0SH1M4S73RandRoxy a80ca97a7d Adds some extra material properties to meat and hauntium (#92093)
## About The Pull Request

This PR adds some wacky interactions for meat and hauntium, should you
choose to transmute items into them using metalgen.
- You can imprint a mob's specific meat onto metalgen using their blood
(It doesn't even have to be the blood reagent, it can be any reagent
that was drawn from a mob's blood).
- Mob meat now applies the source's blood color to items made out of it.
- Organs and bodyparts made primarily out of meat become organic, if
they weren't already.
- Organs and bodyparts made primarily out of hauntium become ghostly, if
they weren't already. This makes them suitable for ghost species
wall-phasing.

## Why It's Good For The Game

Regarding the cosmetic change to mob meat, I thought it only appropriate
that mob meat material should take on the color of the mob it was taken
from.

For imprinting mob meat onto metalgen using that mob's blood, I thought
it would be funny to take people's blood and transmute objects into
being made out of those people's own flesh.

For meaty bodyparts and organs being organic, it can be argued that the
thing that makes organic bodyparts and organs organic is being made out
of meat, so I think the reverse logic should also apply.

For hauntium bodyparts and organs being ghostly, the ghostly nature of
ghostly bodyparts and organs should be what allows them to not fall out
of a ghost when they become incorporeal. And how could something made
primarily out of a substance extracted from ghosts **NOT** be ghostly in
nature?

That said, it's only *theoretically* possible to get hauntium bodyparts
and organs as a ghost, what with there being no way to do surgery on
ghosts. Good luck figuring out and executing the steps to actually do
this.

## Changelog

🆑
add: Items made out of a specific mob's meat take on the color of that
mob's blood.
add: Blood (or anything a mob uses as blood) can be used to imprint that
mob's meat onto metalgen.
add: Organs and bodyparts made predominantly out of meat become organic,
if they weren't already. Likewise, hauntium makes them ghostly.
/🆑
2025-07-30 17:37:39 -04:00
Y0SH1M4S73RandGitHub 56496572f3 Adds some extra material properties to meat and hauntium (#92093)
## About The Pull Request

This PR adds some wacky interactions for meat and hauntium, should you
choose to transmute items into them using metalgen.
- You can imprint a mob's specific meat onto metalgen using their blood
(It doesn't even have to be the blood reagent, it can be any reagent
that was drawn from a mob's blood).
- Mob meat now applies the source's blood color to items made out of it.
- Organs and bodyparts made primarily out of meat become organic, if
they weren't already.
- Organs and bodyparts made primarily out of hauntium become ghostly, if
they weren't already. This makes them suitable for ghost species
wall-phasing.

## Why It's Good For The Game

Regarding the cosmetic change to mob meat, I thought it only appropriate
that mob meat material should take on the color of the mob it was taken
from.

For imprinting mob meat onto metalgen using that mob's blood, I thought
it would be funny to take people's blood and transmute objects into
being made out of those people's own flesh.

For meaty bodyparts and organs being organic, it can be argued that the
thing that makes organic bodyparts and organs organic is being made out
of meat, so I think the reverse logic should also apply.

For hauntium bodyparts and organs being ghostly, the ghostly nature of
ghostly bodyparts and organs should be what allows them to not fall out
of a ghost when they become incorporeal. And how could something made
primarily out of a substance extracted from ghosts **NOT** be ghostly in
nature?

That said, it's only *theoretically* possible to get hauntium bodyparts
and organs as a ghost, what with there being no way to do surgery on
ghosts. Good luck figuring out and executing the steps to actually do
this.

## Changelog

🆑
add: Items made out of a specific mob's meat take on the color of that
mob's blood.
add: Blood (or anything a mob uses as blood) can be used to imprint that
mob's meat onto metalgen.
add: Organs and bodyparts made predominantly out of meat become organic,
if they weren't already. Likewise, hauntium makes them ghostly.
/🆑
2025-07-27 14:20:41 +02:00
c8b426e5f1 chemical analyzer bloodtyping (#91722)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2025-07-19 20:29:27 -04:00
Time-GreenandRoxy 1d980ae50d Three Recovered Crew QoL's (#91983)
Three quality of life additions for recovered crew:
1. Jumpsuits are spawned in the crate, and no longer in the lockbox
2. Formaldehyde will no longer metabolize during the "soul pending" fase
so you don't have to constantly re-up them with it
3. Gives them 200cr starting money instead of 100. Also get a headset in
their lockbox now

## Why It's Good For The Game
1. This lets the reviver know what job they can expect to have, and make
more informed choices about which organs, implants and surgeries are
most beneficial to them. They can still change their mind, but it's
something I've always missed having and can help to tailor the
experience a bit
2. This is just annoying. Trying to revive them and not realizing the
formaldehyde is gone, and then realizing absolutely everything decayed,
is super fucking ass.
3. They get barely any starting gear, so some more money to help them
buy gear is really needed. The headset is just there to make it easier
to communicate with the department head or the HoP, it just gets you
going faster.
2025-07-19 20:29:26 -04:00
MrMelbertandRoxy 7424ad8f0d You can wring out damp rags to get slightly more mileage out of it (#92112)
## About The Pull Request

Using damp rag in hand lets you wring it out, clearing 1/4th of the
bloodiness.

Takes 2 seconds, plus 1 second per previous wring until it's cleaned

## Why It's Good For The Game

Suggested in the community meeting, I thought it was cool

## Changelog

🆑 Melbert
qol: Using a damp rag in hand will wring it out, making it usable for a
bit longer.
/🆑
2025-07-19 20:29:24 -04:00
dbe9acda20 chemical analyzer bloodtyping (#91722)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2025-07-15 21:06:50 -04:00
Time-GreenandGitHub fe17cd1b96 Three Recovered Crew QoL's (#91983)
Three quality of life additions for recovered crew:
1. Jumpsuits are spawned in the crate, and no longer in the lockbox
2. Formaldehyde will no longer metabolize during the "soul pending" fase
so you don't have to constantly re-up them with it
3. Gives them 200cr starting money instead of 100. Also get a headset in
their lockbox now

## Why It's Good For The Game
1. This lets the reviver know what job they can expect to have, and make
more informed choices about which organs, implants and surgeries are
most beneficial to them. They can still change their mind, but it's
something I've always missed having and can help to tailor the
experience a bit
2. This is just annoying. Trying to revive them and not realizing the
formaldehyde is gone, and then realizing absolutely everything decayed,
is super fucking ass.
3. They get barely any starting gear, so some more money to help them
buy gear is really needed. The headset is just there to make it easier
to communicate with the department head or the HoP, it just gets you
going faster.
2025-07-15 14:56:34 +00:00
WaterpigandGitHub b01756b97c Datumizes DNA blocks, makes DNA cleaner in general (#92061)
## About The Pull Request

Moves all the dna block handling onto singleton datums initialized
inside global lists, to make the handling dna less of a copy-paste mess
and make adding new blocks significantly easier. There is still some
work to be done in the copypaste department but ultimately that falls
under its own PR scope after the core refactor goes through. (Ill
probably do those but it will also be easier for everyone else as the
code is now significantly less of an eyesore)

Both features and identities have been tested through and through, and
seem to be working fine.

Also removed the reliance on weird hardcoded lookup tables for length,
and other similar things that just didn't make sense when I was passing
through DNA code. There's a lot more that fall out of scope for this
exact PR's goal however

## Why It's Good For The Game

I've been told the maintainers will love me for doing this

## Changelog

🆑
code: feature keys are no longer magical strings floating around the
codebase and use proper defines
refactor: DNA blocks are now handled with singleton datums.
/🆑
2025-07-14 16:51:45 -06:00
MrMelbertandGitHub 2464126a14 You can wring out damp rags to get slightly more mileage out of it (#92112)
## About The Pull Request

Using damp rag in hand lets you wring it out, clearing 1/4th of the
bloodiness.

Takes 2 seconds, plus 1 second per previous wring until it's cleaned

## Why It's Good For The Game

Suggested in the community meeting, I thought it was cool

## Changelog

🆑 Melbert
qol: Using a damp rag in hand will wring it out, making it usable for a
bit longer.
/🆑
2025-07-14 16:44:13 -06:00
Roxy 72f1622c3f Fixes for #91875 2025-07-11 19:20:16 -04:00
SmArtKarandRoxy d21155b475 Fixes nonhuman blood bloodpacks spawning non-blood blood (#92063)
## About The Pull Request

Blood pack code is abyssmal and I somehow missed it during my refactor.
Refactored how they spawn blood which should fix it not actually doing
anything when splashed/used in reactions, and also lizard blood not
getting its green color.

- Closes #92008

## Changelog
🆑
fix: Fixed lizard blood bloodpacks being red instead of green
refactor: Refactored blood packs
/🆑
2025-07-11 18:04:53 -04:00