## About The Pull Request
Since #90505 added another entry to it the Regal Rat Riot ability, which
turns maintenance creatures into versions loyal to the rat, has become
sort of unmanageable (and to be honest it was a bit gross to start
with).
Instead of having a big if/else list (which was making the same range
check multiple times...) that sets stats on a bunch of mobs, I delegated
it to the mobs themselves and instead of changing some stats of the
existing mobs we just turn them into a new mob which can be spawned or
placed separately by mappers or admins if they want.
Other stuff I changed:
Riot (the ability which transforms mobs into minions) no longer spawns a
mouse if it fails to find anything. Instead you have a chance to fish
mice out of disposals bins while digging out trash and items.
Domain is now a toggle which activates itself every 6 seconds rather
than a button you manually click every 6 seconds.
Riot makes a visual effect when used.
Rare Pepe randomisation is done via a random spawner instead of the mob
modifying a bunch of its own properties in Initialise.
A bunch of mobs now automatically follow you after being tamed. I wrote
this assuming I was going to add it to the rioted mobs but then didn't
end up doing that because you might want them to immediately attack
someone.
My rule of thumb is that if I think you'd want the mob to attack someone
the moment it is befriended I didn't add this and if you wouldn't I did.
I changed some of the regal rat minion names, and some of them can now
spawn from gold slime which couldn't before.
## Why It's Good For The Game
This proc sucked and now it's nicer.
As for the other changes;
- A tamed mob immediately following you is nice feedback and saves you a
click as it's likely to be your first action. Also removes some admin
panel shitcode I added.
- I changed Domain to a toggle because you generally want to use it on
cooldown and someone suggested it on this PR and it sounded like a good
idea.
- I saw someone in Discord complaining that the previous flow of
recruiting rats by hitting Riot with nothing around to summon one,
waiting, hitting it again to convert one rat, and waiting again was
tedious and annoying which I agree with.
This method improves the quality of life by separating these two actions
but _also_ as a side effect reduces a regal rat's ability to secretly
stockpile 50 rats in a hidden maintenance room because most disposal
bins are in slightly more visible areas, they'll actually need to go and
make a mess somewhere someone can see them.
## Changelog
🆑
balance: Regal Rats can now grab mice out of disposal bins, and no
longer spawn them with the Riot ability.
balance: The Riot ability no longer needs to be used once for each
slightly different kind of mob in your radius.
balance: The Regal Rat Domain ability is now toggled on and off.
balance: Several kinds of mob will immediately start following you once
tamed.
balance: Rats, hostile frogs, and evil snails can be created via gold
slime reaction.
/🆑
## About The Pull Request
Someone stopped mice from spawning in dangerous atmospheric conditions
but they forgot about the snails.

## Why It's Good For The Game
Think about the SNAILS
## Changelog
🆑
fix: stops snails from clogging up CI
/🆑
## About The Pull Request
adds snails to the game

these are harmless critters you can find in maints. they love eating all
variety of fruits, and are gravitated towards snail people, where
they'll dance around them.
you can also pick them up and put them on your head.
finally, you can also grab them and put them in hydrotrays (they will
swim around in it very slowly). they'll help ur plants grow as they act
as natural weed-repellants, as they'll eat weeds that grow in trays.

## Why It's Good For The Game
there's not that many mobs you can usually find in maints, currently
there's only mice and cockroaches, this helps expand the pools a bit.
## Changelog
🆑
add: adds snails to the game. (keep them away from salt!)
/🆑
## About The Pull Request
adds snails to the game

these are harmless critters you can find in maints. they love eating all
variety of fruits, and are gravitated towards snail people, where
they'll dance around them.
you can also pick them up and put them on your head.
finally, you can also grab them and put them in hydrotrays (they will
swim around in it very slowly). they'll help ur plants grow as they act
as natural weed-repellants, as they'll eat weeds that grow in trays.

## Why It's Good For The Game
there's not that many mobs you can usually find in maints, currently
there's only mice and cockroaches, this helps expand the pools a bit.
## Changelog
🆑
add: adds snails to the game. (keep them away from salt!)
/🆑
## 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.
- Closes#90704
The following changes were implemented for this
- Moved sending signals `COMSIG_MOVABLE_TELEPORTING` &
`COMSIG_ATOM_INTERCEPT_TELEPORTING` from `check_teleport_valid` into
`do_teleport`. These 2 signals were causing all the side effects
- Removed signals `COMSIG_ATOM_INTERCEPT_TELEPORTED` &
`COMSIG_MOVABLE_TELEPORTED` as the above 2 signals can do their jobs &
block the teleport if needed so these signals became obsolete
- Removed define `COMPONENT_BLOCK_TELEPORT` in favour of returning a
positive value if teleport was successfully blocked. Having 2 signals
located in 2 separate files use this same define doesn't look great.
🆑
code: cleans up teleportation code. `check_teleport_valid` is now a pure
function with no side effects
/🆑
## About The Pull Request
Decals which attempt to spawn on an openspace turf will drop to the
level below until they hit a solid turf.
Here I demonstrate it with an average spaceman activity, spraying flour
aimlessly out of a spray bottle:

## Why It's Good For The Game
The other day I watched a drunken miner flying around the upper levels
of Catwalkstation and once he became blackout drunk his drunken
personality decided to spin rapidly until he vomited.
The vomit hovered in the air. This will not stand.
## Changelog
🆑
fix: You can now bleed or vomit onto people below you rather than
creating puddles of substance hovering in mid-air.
/🆑
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.
Improving old code. And I want to be able to pet mobroaches while
holding them too.
🆑
qol: You can now interact with held mobs in more ways beside wearing
them.
/🆑
## About The Pull Request
They weren't actually working turns out. There was a race condition with
icon smoothing, so it needs to be flipped after the table gets smoothed.
On top of that the dir wasn't being passed properly.
## Why It's Good For The Game
Stuff that actually works!
This will allow for things like this on mapload:

## Changelog
🆑
fix: fixes flipped table spawners not initializing correctly
/🆑
## About The Pull Request
This adds a techstorage spawner for a set of custom shuttle supplies
consisting of:
The shuttle navigation and shuttle docking boards
50 shuttle lattice rods
Four boards for propulsion engines
A blank shuttle blueprint
As well, each tech storage has had a rack with this spawner added to it.
## Why It's Good For The Game
As tech storage includes many boards that aren't available otherwise
without research or cargo, the same applies to custom shuttle boards and
supplies. This makes one set of these supplies available roundstart to
anyone who can manage to get tech storage access.
## Changelog
🆑 Bisar
add: NanoTrasen reminds all employees that it assumes no liability for
any activities carried out when not on the premises of a Nanotrasen
colony, station, or bluespace pocket. Any employees electing to leave
the premises during their break are reminded that it is imperative that
they clock out, as per their contract.
add: Tech storage now includes a small set of custom shuttle supplies.
/🆑
## About The Pull Request

### Kronkus vine buffs:
Kronkus seeds are now three times as common.
The Kronkus vine has a greatly increased endurance stat(10->40) so it
does not die on you while you run around gathering ingredients and
matures quicker (8->6)
### Kronkaine buffs:
* The instant stamina boost restores **double stamina**(12 per u) when
injected or smoked.
* Now also restores stamina over time based on volume: **0.08 stamina
per unit each cycle**.
* Heart damage from kronkaine is now also dose dependant, overdose
damage has been adjusted to account for this.
* Reaction requires less ammonia(5->3u) and welding fuel(10->5u).
* Added an alternate reaction that uses lye instead of ammonia, also
takes 3u.
* Added some new drug messages for when using these optimized methods of
administration.
* Reworked how the anti-purging mechanic works, now it only punishes you
with adrenal fatigue while you take >30 stamina damage while trying to
purge. This makes life saving OD treatment less annoying, but still
prevents abuse mid combat in a more elegant way.
The amount of heart damage inflicted is much lower if used at low doses,
the same as before at 20u and greater if more than 20u is administered.
The heart damage formula is : **0.1 + 0.04 * volume (+0.5 if overdosed)
damage per cycle**.
It should work out to something like a 27.5u lethal dose with a pristine
heart.
### Kronkus extract buffs:
Lasts twice as long.
More heart damage per cycle 0.1 -> 0.2. This value is still pretty
modest.
UPDATE: I had previously buffed the stamina regen of this reagent, but
now kronkaine itself has stamina regen per cycle.
#### Technical changes:
proc/copy_to can now trigger on_transfer and pass exposure methoid if
the new copy_method parameter is set.
This enables sources that use copy_to like smoke clouds to trigger
INHALE dependent effects like the new kronkaine enhancement.
Infinite hyposprays now also have the inject method like normal
hyposprays.
These two were the only two cases where reagents where reagents were
added to a mob using copy_to.
#### Fixes:
kronkus extracts heart damage now uses seconds_per_tick.
## Why It's Good For The Game
After surveying the available discussion on the subject, the kronkaine
drug itself seems to be generally well received.
However the rarity of the seed and the arcane preparation method has
limited player engagement with the mechanic.
There is confusion regarding both the preparation and, especially
regarding how the stamina restoring effect works.
This PR seeks to make things a little smoother and more pleasant without
making a rare thing into a trivial thing,.
Players seems to mostly use the action speed part of kronkaine so I have
massively buffed the stamina restoration part in a flavourful way to
encourage more types of players to plant the seeds should they find
them.
Over time more and more stuff have been added to the maintenance loot
spawn lists which have diluted the spawn chance of the seed packet which
contributes to the problem.
This PR increases the weight from 1 -> 3.
## Changelog
🆑
balance: kronkaine now restores double stamina when smoked or injected.
balance: kronkaine now restores stamina each cycle, the effect is dose
dependant.
balance: kronkaine now causes heart damage in a dose dependant manner,
instead of a flat value.
balance: kronkus seed packs are now three times as common.
balance: the kronkaine anti-purging disease now only triggers if you
take stamina damage while using purging chems.
balance: the kronkaine reaction uses less ammonia and welding fuel.
add: added an alternative kronkaine reaction that uses lye instead of
ammonia.
balance: kronkus extract now lasts twice as long but deals a bit more
heart damage(0.1->0.2)
balance: the kronkus vine plant is now a lot hardier(endurance: 10 ->
40) and matures a bit quicker.
tweak: kronkaine now warns the user more if it is about to kill your
heart.
fix: kronkus extract now inflicts heart damage correctly.
/🆑
## About The Pull Request
Converts hot spring turfs to shared particles instead of pseudo-cached
per-turf holders. This does come with some ugliness in
add/remove_shared_particles code due to /area not having vis_contents,
but that code shouldn't be touched by most developers who don't know
what's going on anyways.
I'm not sure if the "cached" particles even worked in practice, and if
they had any clientside perf improvements.
## Why It's Good For The Game
Better perf,
## Changelog
🆑
code: Converted hot springs to a new shared particles system for better
clientside performance.
/🆑
## 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
- Closes#90704
The following changes were implemented for this
- Moved sending signals `COMSIG_MOVABLE_TELEPORTING` &
`COMSIG_ATOM_INTERCEPT_TELEPORTING` from `check_teleport_valid` into
`do_teleport`. These 2 signals were causing all the side effects
- Removed signals `COMSIG_ATOM_INTERCEPT_TELEPORTED` &
`COMSIG_MOVABLE_TELEPORTED` as the above 2 signals can do their jobs &
block the teleport if needed so these signals became obsolete
- Removed define `COMPONENT_BLOCK_TELEPORT` in favour of returning a
positive value if teleport was successfully blocked. Having 2 signals
located in 2 separate files use this same define doesn't look great.
## Changelog
🆑
code: cleans up teleportation code. `check_teleport_valid` is now a pure
function with no side effects
/🆑
## About The Pull Request
Decals which attempt to spawn on an openspace turf will drop to the
level below until they hit a solid turf.
Here I demonstrate it with an average spaceman activity, spraying flour
aimlessly out of a spray bottle:

## Why It's Good For The Game
The other day I watched a drunken miner flying around the upper levels
of Catwalkstation and once he became blackout drunk his drunken
personality decided to spin rapidly until he vomited.
The vomit hovered in the air. This will not stand.
## Changelog
🆑
fix: You can now bleed or vomit onto people below you rather than
creating puddles of substance hovering in mid-air.
/🆑
## 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
Metalgen imprinting is now logged, foam and smoke have better logging
and so do plasma metalgenned things, metalgen no longer causes a ton of
runtimes on almost everything and foam and smoke no longer affect
abstract objects.
Also ***hopefully*** solves the issue with infinite hotspot loops, but I
don't think anyone knows what exactly occured there.
## Why It's Good For The Game
If servers explode, admins need to know who did it and coders need to
know how they did it.
## Changelog
🆑
fix: Metalgen foam/smoke no longer cause an absurd amount of runtimes
fix: Foam and smoke no longer affect abstract objects like landmarks
admin: Metalgen imprinting is now logged
admin: Improved logging for foam and smoke, and plasma metalgenned
objects
/🆑
## About The Pull Request
Metalgen imprinting is now logged, foam and smoke have better logging
and so do plasma metalgenned things, metalgen no longer causes a ton of
runtimes on almost everything and foam and smoke no longer affect
abstract objects.
Also ***hopefully*** solves the issue with infinite hotspot loops, but I
don't think anyone knows what exactly occured there.
## Why It's Good For The Game
If servers explode, admins need to know who did it and coders need to
know how they did it.
## Changelog
🆑
fix: Metalgen foam/smoke no longer cause an absurd amount of runtimes
fix: Foam and smoke no longer affect abstract objects like landmarks
admin: Metalgen imprinting is now logged
admin: Improved logging for foam and smoke, and plasma metalgenned
objects
/🆑
## About The Pull Request
They weren't actually working turns out. There was a race condition with
icon smoothing, so it needs to be flipped after the table gets smoothed.
On top of that the dir wasn't being passed properly.
## Why It's Good For The Game
Stuff that actually works!
This will allow for things like this on mapload:

## Changelog
🆑
fix: fixes flipped table spawners not initializing correctly
/🆑
## About The Pull Request
This adds a techstorage spawner for a set of custom shuttle supplies
consisting of:
The shuttle navigation and shuttle docking boards
50 shuttle lattice rods
Four boards for propulsion engines
A blank shuttle blueprint
As well, each tech storage has had a rack with this spawner added to it.
## Why It's Good For The Game
As tech storage includes many boards that aren't available otherwise
without research or cargo, the same applies to custom shuttle boards and
supplies. This makes one set of these supplies available roundstart to
anyone who can manage to get tech storage access.
## Changelog
🆑 Bisar
add: NanoTrasen reminds all employees that it assumes no liability for
any activities carried out when not on the premises of a Nanotrasen
colony, station, or bluespace pocket. Any employees electing to leave
the premises during their break are reminded that it is imperative that
they clock out, as per their contract.
add: Tech storage now includes a small set of custom shuttle supplies.
/🆑
## About The Pull Request

### Kronkus vine buffs:
Kronkus seeds are now three times as common.
The Kronkus vine has a greatly increased endurance stat(10->40) so it
does not die on you while you run around gathering ingredients and
matures quicker (8->6)
### Kronkaine buffs:
* The instant stamina boost restores **double stamina**(12 per u) when
injected or smoked.
* Now also restores stamina over time based on volume: **0.08 stamina
per unit each cycle**.
* Heart damage from kronkaine is now also dose dependant, overdose
damage has been adjusted to account for this.
* Reaction requires less ammonia(5->3u) and welding fuel(10->5u).
* Added an alternate reaction that uses lye instead of ammonia, also
takes 3u.
* Added some new drug messages for when using these optimized methods of
administration.
* Reworked how the anti-purging mechanic works, now it only punishes you
with adrenal fatigue while you take >30 stamina damage while trying to
purge. This makes life saving OD treatment less annoying, but still
prevents abuse mid combat in a more elegant way.
The amount of heart damage inflicted is much lower if used at low doses,
the same as before at 20u and greater if more than 20u is administered.
The heart damage formula is : **0.1 + 0.04 * volume (+0.5 if overdosed)
damage per cycle**.
It should work out to something like a 27.5u lethal dose with a pristine
heart.
### Kronkus extract buffs:
Lasts twice as long.
More heart damage per cycle 0.1 -> 0.2. This value is still pretty
modest.
UPDATE: I had previously buffed the stamina regen of this reagent, but
now kronkaine itself has stamina regen per cycle.
#### Technical changes:
proc/copy_to can now trigger on_transfer and pass exposure methoid if
the new copy_method parameter is set.
This enables sources that use copy_to like smoke clouds to trigger
INHALE dependent effects like the new kronkaine enhancement.
Infinite hyposprays now also have the inject method like normal
hyposprays.
These two were the only two cases where reagents where reagents were
added to a mob using copy_to.
#### Fixes:
kronkus extracts heart damage now uses seconds_per_tick.
## Why It's Good For The Game
After surveying the available discussion on the subject, the kronkaine
drug itself seems to be generally well received.
However the rarity of the seed and the arcane preparation method has
limited player engagement with the mechanic.
There is confusion regarding both the preparation and, especially
regarding how the stamina restoring effect works.
This PR seeks to make things a little smoother and more pleasant without
making a rare thing into a trivial thing,.
Players seems to mostly use the action speed part of kronkaine so I have
massively buffed the stamina restoration part in a flavourful way to
encourage more types of players to plant the seeds should they find
them.
Over time more and more stuff have been added to the maintenance loot
spawn lists which have diluted the spawn chance of the seed packet which
contributes to the problem.
This PR increases the weight from 1 -> 3.
## Changelog
🆑
balance: kronkaine now restores double stamina when smoked or injected.
balance: kronkaine now restores stamina each cycle, the effect is dose
dependant.
balance: kronkaine now causes heart damage in a dose dependant manner,
instead of a flat value.
balance: kronkus seed packs are now three times as common.
balance: the kronkaine anti-purging disease now only triggers if you
take stamina damage while using purging chems.
balance: the kronkaine reaction uses less ammonia and welding fuel.
add: added an alternative kronkaine reaction that uses lye instead of
ammonia.
balance: kronkus extract now lasts twice as long but deals a bit more
heart damage(0.1->0.2)
balance: the kronkus vine plant is now a lot hardier(endurance: 10 ->
40) and matures a bit quicker.
tweak: kronkaine now warns the user more if it is about to kill your
heart.
fix: kronkus extract now inflicts heart damage correctly.
/🆑
## About The Pull Request
Converts hot spring turfs to shared particles instead of pseudo-cached
per-turf holders. This does come with some ugliness in
add/remove_shared_particles code due to /area not having vis_contents,
but that code shouldn't be touched by most developers who don't know
what's going on anyways.
I'm not sure if the "cached" particles even worked in practice, and if
they had any clientside perf improvements.
## Why It's Good For The Game
Better perf,
## Changelog
🆑
code: Converted hot springs to a new shared particles system for better
clientside performance.
/🆑
## About The Pull Request
Fuel pools now log their igniter.
## Why It's Good For The Game
We log when motor oil spills and similar ignitable items are burned.
This is no different.
## Changelog
🆑
admin: Added logging to fuel pools being ignited by someone
deliberately.
/🆑
## 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
This trainwreck of a PR is (hopefully) a final solution to all rendering
jank stemming from the new filter-based coloring system. I went over
every single instance of RESET_COLOR, either adding KEEP_APART or
rewriting them entirely so they render properly. I've also fixed blood
rendering issues by utilizing alpha filters and adding an abstract
"holder" appearance for worn items, which holds blood overlays on worn
clothing as to avoid coloring it. I've also fixed horrible
inconsistencies with atmos pipe coloring as a result (of getting sucked
down that rabbit hole) and converted all uses of COLOR_VERY_LIGHT_GRAY
in atmos code to ATMOS_COLOR_OMNI to avoid confusion.
MODsuit modules still get colored into MOD unit's color, need to
refactor their rendering for this.
Closes#88989Closes#87526Closes#89837
## Changelog
🆑
refactor: Audited all remaining coloring code - among noticeable
changes, blood should no longer get colored or "leak out" of item
bounds, atmos pipes no longer color weirdly and repairbots are white
again.
/🆑
## About The Pull Request
I was fucking around testing the Voidwalker earlier for a different
issue and didn't like that I couldn't see myself while in space.
This PR makes it so that Voidwalkers and also any variant of Ethereal
Jaunt place an icon visible only to you at your current position (it's
like your _soul_) so that you can see where you are going.
Nobody else can see it.


There are almost certainly some other sources of being invisible which
could use this so let me know if you are aware of one.
Although if you do that I may need to make my code more generic.
## Why It's Good For The Game
It's nice to be able to see where you are precisely rather than just it
being the centre of the screen
## Changelog
🆑
qol: It is now easier to see where you currently are while jaunting
/🆑
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
[Removes all remaining users of SMOOTH_CORNER + dirt
automation](https://github.com/tgstation/tgstation/commit/71d120511a372501ac546b2571ef570eb4426a56)
Removes all remaining instances of overlay smoothing (the deprecated
system that stitches corners together IN ENGINE) from the game.
This amounts to:
The test smoothing wall, which I converted to just bitmask + diagonals
Stationary canisters, which I've done the same to (alongside adding all
the states to gags, which around doubled their gags count). These
autocut now.
I've also given dirt icons autocutting, for spriter convieneince (I
would have done this before but I didn't know they smoothed)
[Removes corner smoothing from the
codebase](https://github.com/tgstation/tgstation/commit/98ebe5815223a3078c2e591fd277b9418ed03278)
This code is OLD, and has been functionally deprecated for as long as
I've been here. It basically does what bitmask smoothing does, but
instead of prebaking connections they're formed in engine with overlays.
This is... fine, and does TECHNICALLY allow for unique effects, but
none's gonna use it because the details are so niche, so it just becomes
a risk factor for someone fucking up and using overlays for some reason.
What it does do then is clutter up our smoothing code with 2 different
async systems, one of which functions SLIGHTLY differently from its
brother. IMO it just works to confuse people trying to read smoothing
code (already quite confusing).
I've removed it, alongside its bespoke code/variables, excluding
area_limited_icon_smoothing, a var on areas that prevents smoothing out
of network, which I have instead integrated into bitmask smoothing.
I've updated snowflake's documentation to be more up to date with modern
systems, and earmarked where explanations/automation for the more...
underdeveloped bits of smoothing should go in the future.
## Why It's Good For The Game
I relapsed and needed something to put that energy towards.
We don't really want people to use this, and none knows enough about it
to take advantage of its theoretical uses.
Really its only purpose right now is making understanding diagonal
smoothing easier, and that's not all that hard of a task.
Better to remove and integrate then to let rot and confuse.
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
add: Smoothed objects on shuttles now will only smooth with other
shuttles (added support for extensions of this system)
refactor: I've funked around with our smoothing system, cutting out some
older code. Lemme know if anything is weird PLEASE
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
## About The Pull Request
Currently patches are a subtype of pills, and while they have the
``dissolveable`` var set to FALSE, barely anything checks it (because
people don't expect patches to be pills in disguise) so we end up
patches being dissolveable and implantable, which is far from ideal.
Both have been moved into an ``/obj/item/reagent_containers/applicator``
class, which handles their common logic and helps handling cases where
either one fits. As for gameplay changes:
* Pills no longer dissolve instantly, instead adding their contents to
your stomach after 3 seconds (by default). You can increase the timer by
dropping sugar onto them to thicken their coating, 1s per 1u applied, up
to a full minute. Coating can also be dissolved with water, similarly
-1s per 1u applied. Pills with no coating will work like before.
* Patches now only take half as long to apply (1.5s), but also slowly
trickle in their reagents instead of instantly applying all of them.
This is done via embedding so you could theoretically (if you get lucky)
stick a ranged patch at someone, although they are rather quick to rip
off. The implementation and idea itself are separate, but the idea for
having a visual display has been taken from
https://github.com/Monkestation/Monkestation2.0/pull/2558.

* In order to support the new pill mechanics, stomachs have received
contents. Pills and items that you accidentally swallow now go into your
stomach instead of your chest cavity, and may damage it if they're
sharp, requiring having them surgically cut out (cut the stomach open
with a scalpel, then cauterize it to mend the incision). Or maybe you
can get a bacchus's blessing, or a geneticist hulk to gut punch you,
that may also work. Alien devour ability also uses this system now. If
you get a critical slashing wound on your chest contents of your cut
apart stomach (if a surgeon forgot to mend it, or if you ate too much
glass shard for breakfast) may fall out. However, spacemen with the
strong stomach trait can eat as much glass cereal as they want.
Pill duration can also be chosen in ChemMaster when you have a pill
selected, 0 to 30 seconds.

## Why It's Good For The Game
Patches and pills are extremely similar in their implemenation, former
being a worse version of sprays and pills, with only change being that
pills cannot be applied through helmets while patches and sprays ignore
both. This change makes them useful for separate cases, and allows
reenactment of some classic... movie, scenes, with the pill change. As
for stomach contents, this was probably the sanest way of implementing
pill handling, and everything else (item swallowing and cutting stomachs
open to remove a cyanide pill someone ate before it dissolves) kind of
snowballed from there. I pray to whatever gods that are out there that
this won't have some extremely absurd and cursed interactions (it
probably will).
## Changelog
🆑
add: Instead of dissolving instantly, pills now activate after 4
seconds. This timer can be increased by using a dropper filled with
sugar on them, 1s added per 1u dropped.
add: Patches now stick to you and slowly bleed their reagents, instead
of being strictly inferior to both pills and sprays.
add: Items that you accidentally swallow now go into your stomach
contents.
refactor: Patches are no longer considered pills by the game
refactor: All stomachs now have contents, instead of it being exclusive
to aliens. You can cut open a stomach to empty it with a scalpel, and
mend an existing incision with a cautery.
/🆑
## About The Pull Request
Adds a new Retcon smite, it makes the person fade out into nothingness
with a configurable timer, deletes their records and reopens their job
slot, as if they were never there at all.
I was also annoyed that to play around with temporary_atom I had to
slowy add a component, and it doesn't really have much of a reason to BE
a component, so I refactored it into an atom level proc called
fade_into_nothing
## Why It's Good For The Game
The smite is useful for when you wanna get rid of someone who had to
leave roundstart and whatnot, on top of just being funny. the refactor
is also good because i can now put that proc on build mode and go to
town.
## Changelog
🆑
add: Added new mechanics or gameplay changes
add: Added more things
del: Removed old things
qol: made something easier to use
balance: rebalanced something
fix: fixed a few things
sound: added/modified/removed audio or sound effects
image: added/modified/removed some icons or images
map: added/modified/removed map content
spellcheck: fixed a few typos
code: changed some code
refactor: refactored some code
config: changed some config setting
admin: messed with admin stuff
server: something server ops should know
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
code credit to @MrMelbert
many years ago someone broke the dust decal from appearing on 99% of our
tiles
this fixes the issue :)
## Why It's Good For The Game
unknowingly unusable decal is weird
## Changelog
🆑
fix: the station may appear dusty again!
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
## About The Pull Request
/obj/effect/step_trigger/outfitter
it deletes existing equipment and forces on an outfit for any human
intended for event maps wherein you want location-dependent
loadouts(like what im working on now)
code is tested btw
## Why It's Good For The Game
Events are good for the game(I think), and administrative overhead is
bad for events
## About The Pull Request
The anomaly ruin has several anomalies floating in space. They have a
nearstation area on their tile, but the problem is there is a chance
that they can move before the mapping_nearstation unit test completes,
causing them to be in a non-area and ruining the run.
This PR just ensures that they stay in place during unit tests.
## About The Pull Request
Chem smoke asks the smoke subsystem to cancel its spread, if it's qdel'd
or otherwise reaches the end of its lifetime before it finishes
spreading.
However, an error in how chem smoke was coded causes it to queue
spreading with the *foam* subsystem, rather than the *smoke* subsystem.
This causes a runtime in SSsmoke, as it attempts to index into the
spread carousel at a bucket index that was returned from SSfoam.
This runtime actually happens spuriously during CI over on Monkestation.
However, I only started noticing it because it kept appearing in failed
runs on my fork - where I have the "Rerun flaky tests" workflow
disabled.
I was able to replicate the runtime locally, whilst debugging it on the
Monkestation fork:
1. Tag any turf as the place to spawn the smoke at (I chose one right
next to a door)
2. Use Debug -> Advanced ProcCall to spawn in chem smoke with a high
range (`/proc/do_chem_smoke`, `range` = 10, `location` = the tagged
turf) (Technically speaking, the high range isn't needed, but it makes
it easier to trigger the runtime.)
3. Wait some time (I found that around 12 seconds worked on my machine,
when using `range = 10`)
4. Do something to make the chem smoke start spreading (opening a door
works)
5. Wait - if the chem smoke is still spreading when its lifetime is up,
it will cancel its spread - and in turn, trigger the runtime.
Following these same steps after the change in this PR seems to show
that this fixes the runtime.
## Why It's Good For The Game
Less runtimes = More gooder
## Changelog
No player-facing changes.