## About The Pull Request
Closes#93285
Mood event from the death of a mob spawned "artificially" is 75% weaker,
lasts 80% the duration, and don't compound
An artificial monkey's death will now result
- -8 * 0.25 * 0.5 = floor(1) = 1 strength moodlet for the average crew
member
- ...Lasting 30 seconds (unless refreshed)
- -8 * 0.25 * 1.5 = floor(3) = 3 strength moodlet for animal friends
- ...Lasting 1.5 minutes (unless refreshed)
- -8 * 0.25 = floor(2) = 2 strength moodlet for compassionate crew
members
- ...Lasting 1 minute (unless refreshed)
Artifical spawning includes
- Moneky Cube
- Xenobiology Console
- "Life" reaction
- Summoned rats
- Spawner grenades
- Cult ghosts
Lemmie know if I'm missing any obvious spawns
## Why It's Good For The Game
While funny it was not my intention to have Xenobiology / Genetics /
Virology nuke your mood.
## Changelog
🆑 Melbert
balance: Death of artifical mobs (such as monkey cube monkeys) result in
a 75% weaker, 80% shorter moodlet that does not compound with more
deaths.
/🆑
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147
full credit to @Kapu1178 for the juice
instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
## 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/4621https://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.
/🆑
## About The Pull Request
Removes the ability to grill the mutant/skeleton subtype of meat slabs,
because there's no meat on that bone.
## Why It's Good For The Game
closes#88767
there ain't no meat on that bone
## Changelog
🆑
del: you can't grill a bone into a steak anymore
/🆑
## About The Pull Request
#92394 did more harm than good.
First, only the microwavable element transferred reagents even if the
result was a burned mess (in general, a non-positive one), while
grillable and bakeable comps didn't... but that's because I've
overlooked a few checks that skipped the "transfer reagents to the
result" step, which the microwavable element also has, though it stopped
working as intended after I messed with it.
However, I think it's stupid for bad recipes to have a static amount of
"bad food" reagent in them, and overcooking a whole cake shouldn't yield
the same reagents as a bag of chips burned to a crisp, so I scrapped
those damn bad_result checks, and finally let the burned mess item
itself handle converting the consumable reagents into "bad food".
Second, examining most food items no longer tells you that you can make
a burned mess if you microwave it.
## Why It's Good For The Game
This fixes the above issues.
## Changelog
🆑
fix: Examining most food items no longer tells you that you can make
burned mess by microwaving them.
fix: Burned mess now has "bad food" in it more or less proportional to
the nutrients of the item you just overcooked. This also applies to
decomposition now.
/🆑
## About The Pull Request
1. Penbang
A flashbang disguised as a pen. Clicking the pen arms the flashbang and
has no other visual or audio tell besides the pen clicking.
The fuse's length is based on the angle the pen cap is twisted.
Works as a normal pen otherwise.
2. Camera Flash
A camera with a high power flash.
Clicking on an adjacent target will flash them, ie, as a handheld flash.
Works as a normal camera otherwise - no tell.
3. Dagger Boot
A pair of jackboots with a blade embedded in them.
Makes your kicks sharp, meaning they will cause bleeding.
Looks like normal jackboots otherwise, though has a tell on
double-examine
4. Monster Cube Box
A box containing 5 monster cubes, which spawn into a random monster when
wet.
Monsters include Migos, Carps, Bears, Spiders, Wolves...
5. Spider Bite Scroll
A martial art focused around kicks and grabs.
- Punches against standing, staggered targets will instead kick them,
applying the bonus accuracy and damage that you'd expect from a kick.
(Also combos with the dagger boots)
- All kicks have a chance to disarm the target's active weapon. Chance
increases per sequential kick.
- Grants you the innate ability to tackle. This form of tackling has a
very high skill modifier, meaning you are very likely to get a positive
outcome (or at least, not fail). You also get up fast from it.
- Your grabs are 20% harder to escape from and deal an additional 10
stam damage on fail.
## Why It's Good For The Game
1, 2, 3: Just some random flavorful items, giving them some more toys to
use to complete bounties.
4: Shenanigans, for people who just wanna do "funny thing" instead of
focusing on big loot.
5: I figured it would fill a fun niche: Spies are commonly depicted as
martial artists, and the only martial arts they can obtain is Krav Maga
(it's not unique to Spies) and Sleeping Carp (it's not unique to Spies).
This gives them their own thing that people may look forward to
acquiring and playing around with.
As for the design of it, I wanted to add something that synergizes with
one of the other other items, so in the field if you notice both of them
pop up you really want to go for both.
The rest of the design I just filled in as vaguely useful and flavorful
tools a spy might want for kidnapping or detaining people: Better grabs,
tackling, and disarms.
Then I just went with the flavor of it being something the Spider Clan
used to teach to their Spies / Ninjas, kinda like an analog to the real
life Ninjutsu. (Maybe we can give it to Space Ninjas as well later...
since it doesn't especially benefit Ninjas in any way.)
## Changelog
🆑 Melbert
add: Adds 5 rewards to the Spy item pool: Penbang, Camera Flash,
Dagger-Boot, Monster Cube Box, and the Spider Bite martial art
/🆑
## 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>
## About The Pull Request
When an item is cooked, reagents are generally cleared from the
resulting object and the reagents of the source object are transferred
to it instead. This means burned mess won't have its toxins when cooked,
locking you out of one or two chemistry recipes that require it while
also making the item generally not toxic at all.
So to fix it, we simply have to replace all or most of the consumable
reagents inside the burned mess with bad food, via component signals.
## Why It's Good For The Game
Fixing an issue with food and chemistry.
## Changelog
🆑
fix: burned mess made with a microwave, oven or griddle once again
toxins.
/🆑
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
## 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
/🆑
## About The Pull Request
It changes the fact in wish soup, Spacylibertyduff, and amanita jelly
that makes it so people eat the bowls, VIA a trash_type that spawns a
bowl once the food is finished, Fixes
https://github.com/tgstation/tgstation/issues/92155
## Why It's Good For The Game
People are using bowls which cant be returned to chef which directly
(due to them being consumed) makes chefs job more difficult and annoying
## Changelog
🆑 Glu
fix: Certain food items that required bowl now drop a bowl
post-consumption
/🆑
## About The Pull Request

Adds the .38 Flare. It does 20 damage. This round highlights the target
for 2 minutes, and projectiles hitting the target always hit the limb
that the shooter was aiming at. Your shot has effectively perfect limb
accuracy, no matter how far the bullet needs to travel. This also
affects other projectiles hitting the target that aren't the .38 Flare.
To indicate whether or not a round in a magazine is either lead or
laser, I've borrowed the implementation of ammo overlays from the C-20r
toy magazines Now each bullet in the speedloaders for .38 can be a
distinct type visibly. Might be interesting if anyone wants to add
additional unique appearances for some of the other .38 rounds.
Reduces the overall cost of a lot of the ammunition in the sec and
autolathe, such as loose bullets. Also reduces the material quantity
within bullet casings.
## Why It's Good For The Game
> .38 Flare
By popular demand, I've come up with a new idea. And that idea...is an
anti-bullet deviation tool. Most players are probably not conscious of
bullet deviation. But if you're familiar with the mechanic, it's why
sometimes your shots may hit into an arm or a leg even though you were
aiming at the head.
The way this works is that over the course of a bullets flight, it
increases in inaccuracy and the pobability of drifting into a limb. From
my last estimate, shooting somewhere around 5 tiles away will usually
result in bullet drift.
While affected by the flare shot, that does not happen. You shoot at the
head, you hit the head.
To put it into perspective; you could consider bullet deviation a form
of damage loss (its a bit more complicated than this and there are
instances where it is positive), and this projectile eliminates that
problem for everyone shooting the target.
> Ammo cost
Some of these were pretty excessive for the cost, and a notable example
of this include the .357 loose casings, .310 Surplus loose casings, and
most shotgun shells. These should go down to roughly below 3/5th of a
sheet of metal when printed from a fully upgraded lathe.
Meanwhile, a single bullet casing was like a sheet of metal each, which
didn't seem right to me. So they're now by default one fifth of a sheet
of metal on recycle.
## Changelog
🆑
add: .38 Flare, a laser bullet! Available in both .38 speedloader and
BR-38 magazine once Advanced Beam Weaponry is researched.
add: .38 Flare highlights the target in an outline and makes sure your
bullets never accidentally hit any limb except the one you are aiming
at. Never accidentally hit someone in the arm when you were going for a
headshot.
balance: Reduces the printing costs of several ammunition types from the
autolathe and security lathe. Reduces the overall material contents of
said printed ammo/magazines. If you find a material dupe, let a coder
know.
/🆑
---------
Co-authored-by: projectkepler-RU <99981766+projectkepler-ru@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
## About The Pull Request
This PR makes a number of changes focusing on improving the blob
minions, spores, nauts, zombies and their associated component.
## New sprites
The blob spore, blob zombie and blobbernaut has been resprited.
The spore and zombie have been lightly touched to preserve the most of
the original characteristics while given a cleaner look.
The spore and zombie have a partially desaturated version used to let
more of the strain colour through instead of them all ending up dark
brown.
The blobbernaut has been reshaded and the side sprite has been made
coherent with the front state, I made decided how the front state was
shaded should be the "canon" one (this might be a bit controversial but
the wild inconsistency was bugging me.)
The blobbernaut is a bit less veiny, but the veins look more natural and
use the strain complementary colour. Many combinations are cool, some
are a bit lacking due to the weird choices of complementary colour.


## New Cytology Related Features
Blob mobs can now have strains independently of an overmind.
The 15% mutation chance of vat grown creatures causes a spore or
blobbernaut to get a random strain.
When I first added the blob spore cell line, ghosts could click on cyto
blob spores to posses them, they would then presumably(?) but not
explicitly be free antags. This ability was lost when the blob spore
code was modernised.
Very few people knew about this, and no one grew blob spores anyway.
This feature is coming back in a big way, vat grown blob spores present
a new unique job hazard, they are automatically offered to ghost as an
extremely shitty, but free antag.
I have tested spawning like 15 antag pre-buff blob spores in a live
round and they failed completely to antagonise the crew effectively,
hopefully these buffed spores won't present too much of an issue to our
great administration team, if that ends up being the case, there are
many levers to pull to tone them down.
## Blob Spore Buffs
Blob spores prior to this PR were almost completely useless.
The main cause of this was the extremely dilute reagent smoke reaction;
10u divided over 20 seconds.
This resulted the smoke clouds dealing 0.15 - 0.6 DPS, a completely
negligible and useless amount.
The smoke reagent concentration has been massively increased(10u -> 40u)
and the smoke duration has been reduced(20s -> 8s).
The result of this is that blob spore clouds are something you want to
avoid standing in, but they provide less smoke cover for the blob and
nauts.
Blob spores have also gained the ability to vent crawl. Simple mobs that
can't either open doors or vent crawl feel super bad to play.
They also deal a little more melee damage, but this is still
pathetically low on account of their low attack speed.
I have adjusted their supplementary reagents and reduced the amounts of
spores produced per cycle(2 -> 1) to make them a bit harder to mass
produce.
## Blob Strain Buffs
I have not made this PR with the goal of buffing any particular strain,
but some changes have affected blob strain balance:
### Debris Devourer
This was the only strain that was strongly mechanically tied to the
core.
In order to allow for independent debris devourer mobs, they can now eat
trash(or any item really), they are independent, they store these items
inside their mob, and use these for the debris devourer reactions.
If they have an overmind, the item gets sent to the core.
This should result in a nice buff to the strain, which I've been told is
one of the bad ones.
### Regenerative Materia & Cryogenic Poison
5 years back another contributor removed the ability of blobs and
blobbernauts to transfer reagents with their attacks(as their expose
method is vapour).
This was a completely undocumented change and possibly unintentional, so
I am reverting it by giving blob reagents penetrates_skin = VAPOR again.
This only really affects these two strains. It makes regenerative
materia much stronger, while barely having any effect on cryogenic
poison, because temperature normalisation changes has made it completely
ineffective even with much more reagent applied.
### Electromagnetic Web
The spore reagent cloud buff might also give a boost to some strains
with good expose effects, like electromagnetic web.
## Blob Cooking
Blob spores now drop spore sacks, they can be ground for spore toxin, or
cracked on a griddle to create an egg-like treat!
I also added a detoxification reaction to reduce the amount of toxin
when cooked, might not work yet because I think griddles may not
actually heat the food?
## Sound Effects
Blob spores bursting and blobbernauts dying have sound effects.
## Why It's Good For The Game
level 5 biohazard
## Changelog
🆑
image: blob mobs have been respectfully resprited.
add: vat grown blob mobs can sometimes get born with a blob strain.
add: blob spores drop spore sacks, crack them on the griddle.
add: debris devourer mobs can now eat trash, sending it to the core, if
there is one.
add: vat grown blob spores are now sentient and evil.
balance: blob spores now have much more concentrated smoke.
balance: blob spores can ventcrawl.
fix: regenerative materia and cryogenic poison strain blob tiles & nauts
now inject chems again.
sound: blob spores & blobbernaut now have death sound effects.
/🆑
## About The Pull Request

Food items pass down their intrinsic materials during crafting, which
should prevent foods being crafted from meat being red and squishy. The
implementation might be too broad or kinda suck but it worked for the
problem items I tested it on (headcheese, crispy breaded headcheese,
moussaka, ballpark tsukune).
Also properly sets up `material_flags` to be a bitflag when viewing
variables.
## Why It's Good For The Game
Makes intrinsic food materials actually do what they're supposed to do
(prevent food being crafted with meat from being weirdly too meaty).
## Changelog
🆑
code: Materials bitflags should now show the bitflag interface in VV.
fix: Food items now pass down their intrinsic materials during
crafting/processing/microwaving/etc. etc.
/🆑
Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
## About The Pull Request
* When gibbing mobs, spawned gib type is now based on mob's biotypes if
they're not a carbon, or their chest (or first) bodypart if they are,
rather than requiring a proc override for every single mob. This means
that a few robotic mobs no longer drop meaty gibs, and that gibbing
androids now produces cyborg gibs instead of a meaty surprise, plus they
should no longer runtime when trying to gib a robot. Gibs also are now
spawned around the gibber and streak outwards instead of magically
teleporting a few tiles away, for some visual flair.
* Fixed meat not overriding blood DNA on blood_walk component which made
xeno and lizard meat leave behind orange trails instead of proper
lime/dark green blood colors (due to them keeping human meat DNA).
* Brightened up the gibber blood overlay I've missed, so it should be
consistent with old blood colors now.
* Also cleaned up the gibspawner code.
## Why It's Good For The Game
Biotype/chest changes should make devs lives easier and gameplay a bit
more consistent, and streaking just makes the process look slightly
better.
## Changelog
🆑
add: Androids and fully augmented humans now drop robotic gibs instead
of meat
add: Improved gibber VFX
fix: Fixed gibber overlays being darker than intended
fix: Fixed xenomorph and lizard meat leaving orange trails behind
code: Improved gibs and gibspawner code
/🆑
## About The Pull Request
My original plan was to just implement materials into crafting so that
items would inherit the materials of their components, allowing for some
interesting stuff if the material flags of the item allow it. However to
my dismay crafting is a pile of old tech debt, starting from the old
`del_reqs` and `CheckParts` which still contain lines about old janky
bandaids that are no longer in use nor reachable, up to the
`customizable_reagent_holder` component which has some harddel issues
when your custom food is sliced, and items used in food recipes not
being deleted and instead stored inside the result with no purpose as
well as other inconsistencies like stack recipes that transfer materials
having counterparts in the UI that don't do that.
EDIT: Several things have come up while working on this, so I apologise
that it ended up changing over 100+ files. I managed to atomize some of
the changes, but it's a bit tedious.
EDIT: TLDR because I was told this section is too vague and there's too
much going on. This PR:
- Improves the dated crafting code (not the UI).
- replaced `atom/CheckParts` and `crafting_recipe/on_craft_completion`
with `atom/on_craft_completion`.
- Reqs used in food recipes are now deleted by default and not stored
inside the result (they did nothing).
- Renames the customizable_reagent_holder comp and improves it (No
harddels/ref issues).
- Adds a unit test that tries to craft all recipes to see what's wrong
(it skips some of the much more specific reqs for now).
- In the unit test is also the code to make sure materials of the
crafted item and a non-crafted item of the same type are roughly the
same, so far only applied to food.
- Some mild material/food refactoring around the fact that food item
code has been changed to support materials.
## Why It's Good For The Game
Improving the backbone of the crafting system. Also materials and food
code.
## Changelog
🆑
refactor: Refactored crafting backend. Report possible pesky bugs.
balance: the MEAT backpack (from the MEAT cargo pack) may be a smidge
different because of code standardization.
/🆑
## About The Pull Request
Refactors most of blood handling code untouched by #90593 and completely
rewrites all blood decals, components and reagents.
- Blood types now have behavioral flags which allow them to control
where they leave decals/DNA/viruses. Oil no longer transfers DNA and
viruses with it, while podpeople water-blood doesn't leave visible
decals on turfs and items, but still can be picked up by DNA scanners.
- Multiple blood types have received unique handling - liquid
electricity blood now glows in the dark, oil trails are flammable and
lube ones are slippery. Oil blood can be restored with fuel, lube with
silicon and slime with stable plasma (as normal plasma already passively
regenerates their blood), instead of everything using iron. Saline
solution only supplements on iron-based blood and won't do anything to
help with bloodloss for species who rely on different blood types.
(Roundstart this applies only to Ethereals)
- All blood logic has been moved away from the blood reagent itself into
a blood element that is assigned to the blood reagent by default, and to
any reagent that's drawn from a mob as their "blood" (in
``transfer_blood_to``). This means that blood you draw from lizards will
be green and have lizard's blood description instead of mentioning red
blood cells, Ethereal "blood" will actually contain their DNA and genes,
etc.
- Refactored all blood decals. Blood states are no more, everything is
now handled via blood DNA. Credits to MrMelbert and Maplestation, as a
significant amount of code has been taken from
https://github.com/MrMelbert/MapleStationCode/pull/436 and many of his
followup PRs. Oil and xenomorph splatters are now subtypes of blood,
blood drying is now animated, blood trails now curve and can be
diagonal.
- Rewrote bloodysoles and bloody_spreader components, credits to Melbert
again for the former, while latter now makes more sense with its
interactions. Bloody soles no longer share blood DNA with your hands.
- Ported Melbert's bloody footprint sprites and bot-blood-spreading
functionality.
- Removed all species-side reagent interactions, instead they're handled
by said species' livers. (This previously included exotic blood
handling, thus the removal)
- Slightly optimized human rendering by removing inbetween overlay
holders for clothing when they're not needed.
- Blood-transmitted diseases will now get added to many more decals than
before.
- Cleaned up and partially refactored replica pods, fixed an issue where
monkeys/manipulators were unable to harvest mindless pods.
- Exotic bloodtype on species now automatically assigns their blood
reagent, without the need to assign them separately.
- Clown mobs now bleed (with colorful reagent instead of blood during
april fools), and so do vatbeasts (lizard blood)
- Implemented generic procs for handling bleeding checks, all sorts of
scanners now also correctly call your blood for what it is.
- Podpeople's guts are now lime-green like their organs, instead of
being weirdly greyish like their water-blood. (Their bleeding overlays
are still grey, as they're bleeding water)
- Slimepeople now can bleed. Their jelly is pale purple in color, but
their wound overlays copy their body color.
- Injecting/spraying/splashing/etc mob with a reagent preserves its
data, so you could theoretically recycle fine wines from someone's
bloodstream
- Fixed burdened chaplain's sect never actually giving a blessing when
applying effects, and giving a blessing when nothing can be healed.
Inverted check strikes again.
- Closes#91039
#### Examples
A lot of blood here has dried, visually the blood colors are almost
exactly the same as before either of the blood refactors.


## About The Pull Request
Melee attack chain now has a list passed along with it,
`attack_modifiers`, which you can stick force modifiers to change the
resulting attack
This is basically a soft implementation of damage packets until a more
definitive pr, but one that only applies to item attack chain, and not
unarmed attacks.
This change was done to facilitate a baton refactor - batons no longer
hack together their own attack chain, and are now integrated straight
into the real attack chain. This refactor itself was done because batons
don't send any attack signals, which has been annoying in the past (for
swing combat).
## Changelog
🆑 Melbert
refactor: Batons have been refactored again. Baton stuns now properly
count as an attack, when before it was a nothing. Report any oddities,
particularly in regards to harmbatonning vs normal batonning.
refactor: The method of adjusting item damage mid-attack has been
refactored - some affected items include the Nullblade and knives.
Report any strange happenings with damage numbers.
refactor: A few objects have been moved to the new interaction chain -
records consoles, mawed crucible, alien weeds and space vines, hedges,
restaurant portals, and some mobs - to name a few.
fix: Spears only deal bonus damage against secure lockers, not all
closet types (including crates)
/🆑
## About The Pull Request
- Address
https://github.com/tgstation/tgstation/pull/90476#discussion_r2051701283.
Makes pill bottle code cleaner
- Datumized some more storage values(monkey guncase toolbox & crafter
toolbox) making their init slightly faster
- Moved all standard storage subtypes(bags, boxes, lockboxes etc) that
is scattered across various files & folders in the codebase into their
respective files under `code/game/objects/item/storage` folder.
This means for e.g. if you want to see all boxes in the game you can
find them in `code/game/objects/item/storage/boxes` folder & don't have
to go looking for hidden subtypes in various module files or folders
where they were hidden away.
Makes looking for stuff & modifying these storages much saner & easier
## Changelog
🆑
code: organized storage subtypes under the same files & folders
/🆑
---------
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
## About The Pull Request
This PR:
- Converts all of the blood types into their own datums, which can be
set up to have their own colors, descriptions, and other fun unique
properties. For example, the clown blood that is constantly randomizing
itself.
- Converts all the blood decals into greyscale, which in turn eliminates
the need for separate xeno sprites. They both use the same ones now.
- Audit of blood splatters/gibs/bodyparts/organs to make sure that they
are getting the correct forensic data applied to them.
- For the admins: Adds a clown blood smite.
My primary goal with was to make the appearance of the new sprites look
almost indistinguishable to the original ones.
I consider this a "first pass", as in there are still some further
refactors I would like to do on the backend side, but am satisfied with
it enough to push it forward as a first step towards a better blood
system! I didn't want to do too much at once because of A) fatigue and
B) easier to test things to make sure I'm not breaking something
important this way.
This has been test-merged on Nova for over a week now and has been going
great, so I finally got around to upstreaming the bones to TG. Although
I did test it a bit you may want to TM it just in case I missed some
things when copying it over.
## About The Pull Request
Changes the meatbun's description, which was most likely perpetuating a
harmful stereotype
## Why It's Good For The Game
I thought it was lowkey racist, so I changed it into cannibalism which
is 'haha funni' sometimes
EDIT: this is stupid
## Changelog
🆑
add: Added a Rimworld reference
del: Removed a potential harmful stereotype
/🆑
## About The Pull Request
People can now pet held mothroaches and pugs if they want to, or use
items on them, hopefully without causing many issues. After all, it only
took about a couple dozen lines of code to make...
...Oh, did the 527 files changed or the 850~ lines added/removed perhaps
catch your eye? Made you wonder if I accidentally pushed the wrong
branch? or skewed something up big time? Well, nuh uh. I just happen to
be fed up with the melee attack chain still using stringized params
instead of an array/list. It was frankly revolting to see how I'd have
had to otherwise call `list2params` for what I'm trying to accomplish
here, and make this PR another tessera to the immense stupidity of our
attack chain procs calling `params2list` over and over and over instead
of just using that one call instance from `ClickOn` as an argument. It's
2025, honey, wake up!
I also tried to replace some of those single letter vars/args but there
are just way too many of them.
## Why It's Good For The Game
Improving old code. And I want to be able to pet mobroaches while
holding them too.
## Changelog
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
Updating the code, fixing a couple issues steeming from fishing.
## Why It's Good For The Game
This should fix#90594 (I think?!), fix#90712 and fix#88514.
## Changelog
🆑
fix: Fixed moonfish eggs appearing like huge errors inside aquariums.
fix: Fixed starfish suicide sometimes not deleting you.
/🆑
## About The Pull Request
Adds a syndicate horse box to uplink for 10 TK. The box has a horse
cube, a mind potion (grants syndie radio and maint tunnels access) that
only works on this type of horse, and an apple to tame the horse. The
horse has 300 hp, 10 damage and 100% armor penetration, is protected
from pressure and lack of oxygen, but cannot move on space tiles, it
gets stuck instantly when it steps on a space tile and you can only pull
it back out. (I do not know why, honestly).
## Why It's Good For The Game
Adds a good movement tool to the uplink. The horse partially protects
against ranged attacks and can be accidentally hit by a melee attack.
Also, it will be a good friend for killing people! Funny, isn't it?
## Changelog
🆑 Saukykouko
add: Added pony to the uplink!
/🆑
## About The Pull Request
Reverts the storage initialization refactor and all subsequent related
PRs.
The original PR is below our standards both for code quality and
testing, and is majorly flawed at its core. This has been discussed with
other maintainers and headcoder(s?) over on discord. A lot of changes
from the PR could be brought over later, but in its current state it
should not have been merged.
- Closes#90322
- Closes#90313
- Closes#90315
- Closes#90320
- Closes#90312
- Closes#90344
## Why It's Good For The Game
This PR causes a series of major issues which cannot be resolved without
either completely rewriting a lot of the original PR, or bad code.
Not matching our standards is grounds for not merging a PR, and the fact
that a PR should not have been merged is a reason for a revert.
## Changelog
🆑
fix: Fixed a series of storage-related bugs caused by a refactor PR.
/🆑
## About The Pull Request
516 requires float layered overlays to be using pixel_w and pixel_z
instead of pixel_x and pixel_y respectively, unless we want
visual/layering errors. This makes sense, as w,z are for visual effects
only. Sadly seems we were not entirely consistent in this, and many
things seem to have been using x,y incorrectly.
This hopefully fixes that, and thus also fixes layering issues. Complete
1:1 compatibility not guaranteed.
I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming
inside apply_overlays), and this is still included in the PR to flash
out possible issues in a TM (Plus I will need someone to grep the
runtimes for me after the TM period to make sure nothing was missed).
After this is done I'll remove all these extra checks.
Lints will probably be failing for a bit, got to wait for [this
update](https://github.com/SpaceManiac/SpacemanDMM/commit/4b77cd487d0a7b6a069df20356b701af5b20489d)
to them to make it into release. Or just unlint the lines, though that's
probably gonna produce code debt
## Why It's Good For The Game
Fixes this massive 516 mess, hopefully.
closes#90281
## Changelog
🆑
refactor: Changed many of our use cases for pixel_x and pixel_y
correctly into pixel_w and pixel_z, fixing layering issues in the
process.
/🆑
---------
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: SmArtKar <master.of.bagets@gmail.com>
## About The Pull Request
A Huge chunk of changes just comes from moving existing storage code
into new files & seperating `atom_storage` code into its own subtype
under the already existing `storage/subtypes` folder.
With that the changes in this PR can be organized into 3 categories.
**1. Refactors how `/obj/item/storage/PopulateContents()` initializes
storages**
- Fixes#88747 and every other storage item that has a similar variant
of this problem
The problem with `PopulateContents()` is that it allows you to create
atoms directly inside the storage via `new(src)` thus bypassing all the
access restrictions enforced by `/datum/storage/can_insert()` resulting
in storages holding stuff they shouldn't be able to hold.
Now how this proc works has been changed. It must now only return a list
of items(each item in the list can either be a typepath or a solid atom
or a mix of them in any order) that should be inserted into the storage.
Each item is then passed into `can_insert()` to check if it can fit in
the storage.
If your list contains solid atoms they must be first moved
to/Initialized in nullspace so `can_insert()` won't count it as already
inserted. `can_insert()` has now also been refactored to throw stack
traces but explaining exactly why the item could not fit in the storage
thus giving you more debugging details to fix your stuff.
A large majority of changes is refactoring `PopulateContents()` to
return a list instead of simply creating the item in place so simple 1
line changes & with that we have fixed all broken storages(medical
toolbox. electrical toolbox, cruisader armor boxes & many more) that
hold more items they can handle
**2. Organizes initialization of `atom_storage` for storage subtypes.**
All subtypes of `/obj/item/storage` should(not enforced) create their
own `/datum/storage/` subtype under the folder `storage/subtypes` if the
default values are not sufficient. This is the 2nd change done across
all existing storages
Not only does this bring code cleanliness & organization (separating
storage code from item code like how `/datum/wire` code is separated
into its own sub folder) but it also makes storage initialization
slightly faster (because you are not modifying default values after
`atom_storage` is initialized but you are directly setting the default
value in place).
You now cannot & should not modify `atom_storage` values inside
`PopulateContents()`. This will make that proc as pure as possible so
less side effects. Of course this principle is not enforced and you can
still modify the storage value after `Initialize()` but this should not
be encouraged in the future
**3. Adds support for automatic storage computations**
Most people don't understand how `atom_storage` values work. The comment
here clearly states that
https://github.com/tgstation/tgstation/blob/55bbfef0da70d87455ca8d6fd5c95107eb8dbefb/code/game/objects/items/storage/toolbox.dm#L327-L329
Because of that the linked issue occurs not just for medical toolbox but
for a lot of other items as well.
Which is why if you do not know what you doing, `PopulateContents()` now
comes with a new storage parameter i.e. `/datum/storage_config`
This datum allows you to compute storage values that will perfectly fit
with the initial contents of your storage. It allows you to do stuff
like computing `max_slots`, `max_item_weight`, `max_total_weight` etc
based on your storage initial contents so that all the contents can fit
perfectly leaving no space for excess.
## Changelog
🆑
fix: storages are no longer initialized with items that can't be put
back in after taking them out
refactor: storage initialization has been refactored. Please report bugs
on github
/🆑
## About The Pull Request
I don't know if it's 516 or some of the latter updates 515 (EDIT:
definitely 516), but fish visual overlays are now rendered under other
overlays composing the aquarium when past a certain pixel offset, since
they are using the pixel x/y vars to do it. All we have to do is to
change it to pixel w/z
## Why It's Good For The Game
Small layering issue.
## Changelog
🆑
fix: fixed a small rendering issue with fishes inside an aquarium.
/🆑
## About The Pull Request
~~I have some beef with the cooking system.~~
Cooking recipes are coded in a way that disregard the possibility for
their components to have different foodtype flags than the ones you
would find normally find.
For example, if I wanted to make corned beef, but instead of a standard
steak, I used a killer tomato "steak", the result would still have the
meat food type, even if none of the components has it.
I've had to resort to a few hacky lines of code to manipulate the food
types from the edible component, but that can be easily fixed if #89687
is merged.
## Why It's Good For The Game
This also makes cooking recipes less strict about their food types and
can help us spot inconsistencies with recipes.
## Changelog
🆑
qol: Food types are now passed down when cooking from recipes. For
example, a plate of corned "beef" made from giant killer tomato slabs no
longer counts as meat but only vegetables now.
fix: Fixed a metric ton of inconsistencies with food types and recipes.
fix: Dank-pockets (the weed variant) can now be microwaved.
/🆑
## About The Pull Request
https://github.com/user-attachments/assets/3a620eba-b9c7-464e-a4e4-6c98c1506b2f
use a cutting tool on a pizza or a pizza in a pizza box to do this
afterwards the pizza can only be picked up like a paper bin - click drag
to self
slice again to turn into pile of slices
works on plates
pizza boxes that start with pizza arrive pre-sliced
also makes it use item_interaction
## Why It's Good For The Game
it makes more sense
## Changelog
🆑
add: you may now take out individual slices of pizza
/🆑
## About The Pull Request
Fries dont rot on the floor
## Why It's Good For The Game
cover the floor in french fries
## Changelog
🆑
balance: French fries are now immune to the effects of the floor. I miss
floor fries
/🆑
## About The Pull Request
The edible component now uses DUPE_SOURCE mode, which is needed to avoid
conflicts between sources. This includes some other tidbits from my
refactor like renaming dcs/flags.dm to ds/declarations.dm (in virtue of
the fact it doesn't only contain flags anymore even before this PR),
meat materials giving protein and fat reagents to affected atoms instead
of generic nutriment and oil, and the pizza material no longer
containing meat, because margherita pizza, which the material is
extracted from, doesn't contain meat either. The pepperonis were
magically conjured space bs.
## Why It's Good For The Game
There are multiple sources of the edible component and we don't want
issues with that. Also atomizing stuff from my refactor.
## Changelog
🆑
balance: objects made out of meat are no longer classified as gross food
on top of being raw and meaty, and actually contain protein and fat
instead of standard nutriment and oil.
balance: the pizza material stacks, crafted with margherita pizza and
rollig pin mind you, no longer magically contain pepperoni.
/🆑
## About The Pull Request
Fishing UI has received a major glowup:
https://github.com/user-attachments/assets/e255822c-9c2c-4e09-843d-20ea70f470f5
All fishing rods now have unique frames (with material rods' frames'
colors being based on their material), and most fishing sources now have
unique backgrounds. Completion bar now uses alpha filters, making it
much smoother, and bait bar is assembled from thin lines, which allows
us to avoid stretching it when we need to resize the bar.
Fixed experiments not unlinking after being completed, resulting in
infinitely stacking examine lines on advanced fishing rods.
Fish death messages now use more fitting span_warning.
Removed devious SS_POST_FIRE_TIMING from the fishing SS, as it made
sometimes the fishing SS only fire every ***two*** ticks instead of
every tick, despite passing 0.05s (1 tick) into its process() calls -
this flag only makes sense on heavy and costly subsystems, not on a
subsystem dedicated mostly to fishing minigames. This is required as now
instead of directly assigning coordinates (why???) fishing UI uses
animate() to control the bait bar and fish icons, making it much
smoother.
Also gave blue dough its own bait overlay and mansus rift its own portal
icon because why not.
## Why It's Good For The Game
Fishing UI didn't look very nice, and removing the subsystem flag makes
the game smoother.
## Changelog
🆑
qol: Fishing minigame should be smoother now
fix: Fixed infinitely stacking examine lines on advanced fishing rods
image: Resprited fishing UI
image: Blue doughballs now have their own fishing rod overlay
image: Resprited mansus rift fishing portal overlay
/🆑
## About The Pull Request
This is the first PR in a series attempting to modernize our damage and
armor, both from a code and a gameplay perspective. This part implements
unique attack animations, adds alternate attack modes for items and
fixes some minor oversights.
Items now have unique attack animation based on their sharpness - sharp
items are now swung in an arc, while pointy items are thrust forward.
This change is ***purely visual***, this is not swing combat. (However,
this does assign icon rotation data to many items, which should help
swing combat later down the line).
Certain items like knives and swords now have secondary attacks - right
clicks will perform stabbing attacks instead of slashing for a chance to
leave piercing wounds, albeit with slightly lower damage - trying to
stick a katana through someone won't get you very far!
https://github.com/user-attachments/assets/1f92bbcd-9aa1-482f-bc26-5e84fe2a07e1
Turns out that spears acted as oversized knives this entire time, being
SHARP_EDGED instead of SHARP_POINTY - in order for their animations to
make sense, they're now once again pointy (according to comment,
originally they were made sharp because piercing wounds weren't very
threatening, which is no longer the case)
Another major change is that structure damage is now influenced by armor
penetration - I am not sure if this is intentional or not, but attacking
item's AP never applied to non-mob damage.
Additionally, also fixes an issue where attack verbs for you and
everyone else may differ.
## About The Pull Request
Recursion!
## Why It's Good For The Game
The code was weird, allowed you to teleport butter and void rods.
## Changelog
🆑
fix: You can no longer stick a butter on a stick on a stick
/🆑
## About The Pull Request
Adds the crafting complexity to the slices of baklava, so it doesn't go
from very good to nice after you slice it.
Was asked to put the fix to upstream.
## Why It's Good For The Game
If I have one more food suddenly degrade in quality after slicing it
into multiple portions I am going to explode the fucking kitchen,
especially after having to bother Hydroponics to mutate a plant
specifically for it
## Proof Of Testing

</details>
## Changelog
🆑
fix: Makes a sliced baklava pie keep its complexity after slicing
/🆑
## About The Pull Request
- Fixes#87873
Bubblegum with the chewable element was not triggering due to a
microdose that would get deleted as soon as it was inserted into the
mob.
Also added a crash message so if anyone in the future tries to microdose
the chewable element it gets caught by our CI/CD checks.

Special thanks to @SmArtKar for digging around in the code and finding
the problem.
## Why It's Good For The Game
Bubblegum now makes you happy.
## Changelog
🆑 timothymtorres, SmArtKar
fix: Fix chewable bubblegum not metabolizing due to microdose
/🆑
## About The Pull Request
Closes#83370
Converted most cases where we could benefit from using shared particles
(aka when there's probably more than 3 uses of that particle in a round)
to use the new shared particle system. Should provide significant
clientside performance in particle-heavy areas like botany (or sometimes
kitchen)
## Changelog
🆑
refactor: Converted most common particle sources to use our new pooling
system.
/🆑
## About The Pull Request
I've been meaning to do this for some time. I need this for
portable/handheld aquariums/fishtanks to be possible. I'll sprite and
code them before I call this PR ready, however suggestions and code
reviews are welcome in the meantime.
Being a pretty heavy refactor, some things might break (we have more
than a few unit tests so perhaps not) while others, coincidentally,
might be fixed without me knowing. Anyway I'm sure this PR fixes
aquarium beauty, which wasn't really working to begin with because the
code was so fucking bad. Nothing really worth of a CL entry tho.
TODO:
- [x] handheld aquariums, craftable with a kit and little plastic or
buyable from the fun vendor ig.
- [x] an aquarium upgrade for handheld aquariums to bypass possible
restrictions.
- [x] update the beauty element to consider items, which shouldn't
contribute to the area beauty when held or otherwise not on a turf.
## Why It's Good For The Game
This should make handheld aquariums possible.
## Changelog
🆑
refactor: refactored aquariums heavily. Please report any fishy bug.
add: Added portable/handheld fish tanks to the game. They can be crafted
with an aquarium kit and 5 sheets of plastic. While portable, they
cannot store fish that are too big or if there're too many already. This
restriction can be removed by using the new "bluespace fish tank kit"
techweb item.
map: Replaced the lawyer's stationary pet aquarium with a fish tank, so
you can carry McGill around.
balance: Reduced the iron cost of stationary aquariums a little.
/🆑
## About The Pull Request
**READY-DONK'S BACK!!**

Gives a (sorely needed) new lick of paint to Ready-Donk. The sprites are
based off of the import vendor trays from Skyrat
(https://github.com/Skyrat-SS13/Skyrat-tg/pull/16215), originally by
Paxilmaniac, and I think they really help nail the microplastic-laden
ready meal aesthetic that Ready-Donk was always meant to embody.
As a fun extra, I also threw together some sprites for some TV dinner
classics, Salisbury Steak and Country-Fried Chicken, and figured I might
as well go the extra mile and actually add them in.
## Why It's Good For The Game
More Ready-Donks means more sodium for the crew, and more sodium equals
more gooder.
Also, if I'm being honest with myself and with everyone else, the
current crop of sprites for Ready-Donk never really captured the feel I
was aiming for with them; this new set is both generally better (I
think, anyway) and actually looks like what it's meant to be.
## Changelog
🆑
add: DONK CO. HAS UNVEILED A NEW RANGE OF READY-DONK PRODUCTS! GET THEM
AT CARGO TODAY!
image: READY-DONK: NEW LOOK, SAME GREAT TASTE
/🆑
## About The Pull Request
With this PR, I'm introducing fishing bluespace capsules to the game.
They can be found on the black market, but I'll get a couple more ways
to get them before it's ready.
Anyway, they're special bluespace capsules that spawn a fishing spot of
your choice. The fishing spot can be changed by alt-clicking the
capsule, and so far it has 5 choices, plus 2 locked behind emagging for
obvious reasons:
- Freshwater: pretty basic, you get freshwater fish from this.
- Saltwater: mainly saltwater fish.
- Tiziran: You get tiziran fish here, like the gunner jellyfish,
armorfish, needlefish, dwarves moonfish and the new, bigger zagoskian
moonfish. By the by, moonfish now periodically lay moonfish eggs, a
staple of lizardfolk cuisine.
- Ice fishing spot: A small ice turf with a hole dug in it; salmon,
arctic char, arctic chrabs and the bonemass (skeleton fish).
- Hot Spring: Somehow the new home to the ought-to-be-extinct
sacabambaspis. It also doubles as a better shower overall, with mild
healing on top of stamina recovery. Felinids still hate it though, and
won't benefit from the healing.
- Lava: A 2x2 square of pure lava. Requires an emag for obvious reasons.
- Plasma: Ditto, but it's plasma instead of lava.
As a sidenote, unlike standard shelter capsules, these require their
area to be clear of pipes and cables on top of the other requirements,
unless emagged. Obviously, I've done some changes to allow pipes and
cables to not be hidden by water turfs, though I'm still keeping these
reqs because I don't think these fishing spots would look great if
riddled with cables and pipes. I may remove this extra req later if it
proves to be a tad too tedious.
Also they don't knock you back when expanding.
Screenshot from a recent test (fixed the misplaced decal and tweaked a
few things since then):

## Why It's Good For The Game
The idea stems from how not all fishing spots aren't designed to be
accessible every round, which is fine, because we have the fish-porter
for that. However, even the fish-porter should have its limits in terms
of what it can provide by itself (linking is all fair and game), so I've
thought having something of a middle point would been neat, also as a
way to mess around with the station layout a bit, to empower the player
with a little extra "terraforming".
## Changelog
🆑
add: Added fishing bluespace capsules to the game, which can be used to
spawn a variety of fishing spots, from freshwater to tiziran sea to hot
springs, and also lava and plasma if emagged.
add: Added two new fish: the zagoskian moonfish and the sacabambaspis.
Moonfish will now periodically lay moonfish eggs.
map: The 'crashed pod' lavaland ruin now has a hot spring, and the
cursed hotspring on icemoon now has a plastic chair and a fishing
toolbox.
/🆑
## About The Pull Request
This PR kills the abstract internal and external typepaths for organs,
now replaced by an EXTERNAL_ORGAN flag to distinguish the two kinds.
This PR also fixes fox ears (from #87162, no tail is added) and
mushpeople's caps (they should be red, the screenshot is a tad
outdated).
And yes, you can now use a hair dye spray to recolor body parts like
most tails, podpeople hair, mushpeople caps and cat ears. The process
can be reversed by using the spray again.
## Why It's Good For The Game
Time-Green put some effort during the last few months to untie functions
and mechanics from external/internal organ pathing. Now, all that this
pathing is good for are a few typechecks, easily replaceable with
bitflags.
Also podpeople and mushpeople need a way to recolor their "hair". This
kind of applies to fish tails from the fish infusion, which colors can't
be selected right now. The rest is just there if you ever want to
recolor your lizard tail for some reason.
Proof of testing btw (screenshot taken before mushpeople cap fix, right
side has dyed body parts, moth can't be dyed, they're already fabolous):

## Changelog
🆑
code: Removed internal/external pathing from organs in favor of a bit
flag. Hopefully this shouldn't break anything about organs.
fix: Fixed invisible fox ears.
fix: Fixed mushpeople caps not being colored red by default.
add: You can now dye most tails, podpeople hair, mushpeople caps etc.
with a hair dye spray.
/🆑
## About The Pull Request
There was a missing line so cooking the vegan option defaulted to giving
you the meat-filled version instead.
## Why It's Good For The Game
bugfix
## Changelog
🆑
fix: Donk-Rolls no longer turn into Deluxe Donk Pockets when microwaved.
/🆑