## About The Pull Request
Fixes#90510
I added the overlay when only smites that destroyed the body had the
divine smite flag, then I added the flag to a bunch more things. Oops
## Changelog
🆑 Melbert
fix: Fix divine smites making you glow forever
/🆑
## About The Pull Request
This overhauls nearly all aspects related to heart attacks, making them
more urgent and threatening. It also enables the use of defibrillators
for quicker, less invasive treatment of heart attacks.
They are now a status effect instead of a virus, with a fixed countdown
of about two and a half minutes before full stoppage. As this timer
counts down, symptoms steadily escalate from audio cues to suffocation
and dizziness. Through treatment, the countdown can be wound back and
eventually cured (or you can just swap the heart like usual. Boring!!).
### Treatment
Replacing the heart is no longer the *only* option for treatment. Now,
heart attacks can be cured with the use of a defib. Each shock will
rewind the countdown (and symptoms) heavily, curing it after 2-4 zaps in
quick succession. In lieu of a defib, most other shock sources will
work, albeit much less effectively.
So, if you're in security and *really* don't feel like going to medical,
you can just have your fellow officers taze you back to health!

The emergency penthrite given after the attack has a new icon/message,
and is slightly less forgiving. You can still use it to shock yourself
back to life, still being a very risky move.
The heart attack doesn't manifest on medical HUDs immediately. It only
appears after the victim has reached stage 3 for the first time. At
stage 3, it's pretty apparent to both the victim and anyone around that
they're having a heart attack anyways, but until then it will be on the
victim to identify symptoms. Heart attacks will always be reported on
health analyzer scans, shown as the organ failing due to a myocardial
infarction and a tooltip suggesting defibs/other shocks to treat it.
This also adds two tips, for secoffs and medics, on how to treat a heart
attack.
Defibs also now use up charge for restarting a stopped heart, instead of
only when reviving a corpse.
## Why It's Good For The Game
Making heart attacks more of a threat gives way more weight to something
people should be afraid of, but aren't. Heart attacks fail to emulate
anything resembling a heart attack, to the point that it is lame and
dissapointing. They're an annoyance and a trip to the surgery room for
anyone familiar enough with the game. This iteration may be more
dangerous, but it's also more *exciting* (and can be treated faster).
Broadening the ways to treat a heart attack, or just stave off symptoms,
gives an amount of player agency over this threat. It may be more
urgent, but it doesn't mean it has to be a trip to medbay every time.
You can look for other ways to get zapped (security will help if asked,
I promise) or sandbox up your own solution.
Also, treating heart attacks with defib shocks just makes sense. Why do
we have to trash the whole heart? Usually after a heart attack it still
has like, a year or so of juice left before it quits for good.
More threatening heart attacks also further incentivize synthetic hearts
and working out, or any other clever ways of shielding oneself from an
attack (in case you're paranoid like that).
And lastly, the whole reason I started with this PR in the first place
-- I think it is a bit odd having heart attacks be handled as *diseases*
in the code. Status effects make more sense.
## Changelog
🆑 Rhials
balance: Heart attacks are now more violent and urgent. If you can hear
your own heartbeat and are short of breath, you should probably see a
doctor.
balance: Heart attacks can now be treated and eventually cured with
repeated defibrillation shocks.
balance: Heart attacks can now be treated and eventually cured with
repeated shocks from other sources.
/🆑
## About The Pull Request
Adds STATUS_EFFECT_AUTO_TICK, a define with a value of 0 that just makes
process() call tick() every time.
## Why It's Good For The Game
An unambiguous way to make tick() consistent with process() is quite
nice.
Sometimes you just have a status effect that only needs to run every
0.2s or every 2s. (past cases downstream)
Other times you have a status effect that is reliant on being in sync
with process() (my case downstream that started this 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](4b77cd487d)
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 PR adds the fearful component which acts as a unified handler for
terror effects. This currently includes nyctophobia and claustrophobia
quirks, terrified status effect from nightmare's spell, and the
monophobia brain trauma. The component processes terror handler datums
which act both as terror sources and effects - jittering, stuttering,
vomiting, panic attacks, etc.
This means that nyctophobia and claustrophobia now act more like
terrified status/monophobia - causing jitters, stuttering, periodic
panic attacks, etc, and their effects stack (i.e. being in a closet in
the dark will increase your fear much quicker).
Closes#37492Closes#57121Closes#69684
## Why It's Good For The Game
Terrified status is very immersive and its effects perfectly fit
nycto/claustrophobia quirks, enough to be impactful to owner's gameplay,
but not roleplaying for them, which is what we want quirks to be. It
also makes them share their stress, which is how you'd expect them to
act. (I would also love to see monophobia moved from a brain trauma to a
quirk, as it perfectly fits latter instead of former, and acts as a
great incentive to interact with other people instead of doing autism
projects by yourself.)
I haven't moved phobias to this system yet, but it could be done in the
future without too many issues - should make phobias less painful to
deal with, and maybe make people actually interested in playing around
them instead of rushing a lobotomy because of how debilitating they are
(currently only interaction is getting hugged by someone you're afraid
of, which will increase your terror)
## Changelog
🆑
add: Nyctophobia and Claustrophobia quirks now have proper terror
effects instead of making you walk/suffocate. Immersion!
refactor: All sources of "terror"/"fear" now use a common component,
meaning they share their counters.
/🆑
## 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 slightly refactored the Cortex Imprint bioware - instead of ticking
every 2 seconds, it now just registers `COMSIG_CARBON_GAIN_TRAUMA`, and
blocks any basic resilience trauma from even being added - in addition
to curing all basic resilience traumas upon being gained.
I also added a `COMSIG_CARBON_BLOCK_TRAUMA` value, which is exactly what
it says on the tin, and also pass the resilience arg to
`COMSIG_CARBON_GAIN_TRAUMA`.
## Why It's Good For The Game
this doesn't need to tick i dont think, so, like, why not just use a
signal?
## Changelog
🆑
code: Slightly improved the code for the Cortex Imprint bioware.
/🆑
## About The Pull Request
Jittering has been transitioned to pixel_w/z, so we should use that
instead.
## Changelog
🆑
fix: Fixed jittering resetting the wrong pair of visual offsets
/🆑
## About The Pull Request
1. Hallucination effects are now tiered
Hallucinations now all have tiers, ranging from common to special.
If you are just hallucinating a teeny bit, you will not experience the
more extreme hallucinations, like bubblegum or your mom.
But if you're hallucinating off your butt, you will be a bit more likely
to experience them.
2. Hallucination rate has been tweaked
Default hallucination cooldown is now 20-80 seconds, up from 10-60
seconds.
However the cooldown will *also* vary depending on just how much you're
hallucinating, going down to 10-40 seconds.
3. RDS is now capped a bit lower (meaning you don't see the higher tiers
like bubblegum).
But I added a preference to uncap it. For the people who actually like
bubblegum visits.
4. If a hallucination fails to trigger, the cooldown will partially
reset. (by 75%)
5. "Fake chat" hallucination will pick more viable subjects.
Fake chat will try to find someone who can actually speak your language,
rather than make a monkey speak mothic or something.
(I may revisit this so if you're super-hallucinating it reverts to old
behavior though.)
6. Adds a hallucination: Fake blood
You hallucinate that you start bleeding, very simple.
7. Adds a hallucination: Fake telepathy
You hallucinate a random telepathic message, similar to fake chat.
8. Adds a hallucination: Eyes in the Dark
A nearby dark turf will have a set of glowing red eyes shine through the
dark. A classic.
9. Adds some new sub-hallucination: PDA ringtone (fake sound), summon
guns/magic (fake item)
Funny prank.
10. Makes mindbreaker a bit more effective at combating RDS.
Pretty much does nothing right now unless you gulp like 50u.
## Why It's Good For The Game
Hallucinations are pretty one note if you experience them for longer
than 10 minutes.
This is due to two fold:
- Many hallucinations are goofy, and not subtle
- Hallucinations trigger very rapidly
You will never fall for a hallucination because in between "You see John
Greytide put the blueprints away", you get your mom yelling at you,
everyone looking like syndies (again), and bubblegum
This pr addresses it by
- Limiting the wacky hallucinations for when you're really off your
gourd
- Reducing the period between triggers
- Adding a few hallucinations
If the wackier hallucinations are reserved for when you're really off
your rocker, this lets the more subtle ones sink in over time, leaves
more room for second guessing
## Changelog
🆑 Melbert
add: Adds 4-5 new hallucinations. Collect them all.
balance: If you are only hallucinating a little bit, the game will
prefer to pick more subtle hallucinations. If you are hallucinating a
ton, it will prefer the more wacky hallucinations.
balance: If you are only hallucinating a little bit, the cooldown
between hallucinations is longer. If you are hallucinating a ton, it
will be shorter.
balance: If a hallucination fails to trigger (such as a deaf person
getting a sound hallucination) the next one will be a lot sooner.
balance: RDS hallucination amount is capped at mid tier hallucinations.
This means bubblegum and co. will be a lot rarer, or will even never
show. HOWEVER, there is now a preference allowing you to uncap your RDS
hallucinations.
balance: Mindbreaker toxin is more effective at suppressing RDS.
balance: Some hallucinations effects have been tweaked up or down
according to the new thresholds. Madness mask as an example.
fix: "Fake Fire" Hallucination works again, and now has a unique message
for if you stop-drop-roll that other people see.
/🆑
## About The Pull Request
- Adds `dustself` admin verb
- Adds Dust admin smite
- Does what it says on the tin
- Adds Divine smites
- Variations of smites that come with the prayer sound and special
effects - so you can get the message across that this is a punishment
from god.
https://github.com/user-attachments/assets/1cf89ece-3e89-4135-a984-79ca10c278a6
## Why It's Good For The Game
- Request. Parity for `gibself`
- Request. Parity with "Gib"
- Request. Someone wanted to add some more flair to smites so I obliged.
## Changelog
🆑 Melbert
admin: Adds "Dustself"
admin: Adds "Dust" smite. Does what it says on the tin
admin: Adds "Divine" smites. They are variations of normal smites themed
around divine intervention.
/🆑
## About The Pull Request
Completely refactored how client colors are handled. Now they're similar
to traits, having a source associated with them. Instead of adding and
removing by strict type (which makes client colors prone to getting
duplicated and not cleaned up) you remove a filter associated with a
specific source. Adding another client color with the same source as an
already existing one will replace the existing one if its of a different
type, or do nothing if they're the same (unless force is set to TRUE).
Client colors can also force filter splitting, putting all colors that
come before them, themselves, and all colors after them into separate
filters - this is useful to prevent mixing in filters which are supposed
to remove a certain color.
<details>
<summary>Example of how Perceptomatrix and nightmare vision goggles
combined before this PR:</summary>

And this is after, as you can see nightmare vision effect's red is only
slightly tinted by perceptomatix instead of being literally halved.

</details>
Additionally, added support for custom filters (and not just colors) to
client color code to allow us to work with more colorspaces.
Also fixed weird blindness behavior, so this also
Closes#89787
## Why It's Good For The Game
Makes code less ass to work with, fixes weird color mixing, etc.
## Changelog
🆑
fix: Fixed perceptomatix helmet allowing you to see even when
unconscious
refactor: Refactored how client colors are handled, ensuring that
certain effects like nightmare goggles don't disappear when another
vision-affecting piece of clothing is worn.
/🆑
## About The Pull Request
Inspired by Zomboid, as you get drunker, the moodlet you gain from being
drunk will give more of a bonus, and its message will update.
## Why It's Good For The Game
Lets you get the vibe of just how drunk you are.
## Changelog
🆑 Melbert
add: Your mood will increase further the more drunk you are. Until you
crash out.
/🆑
## About The Pull Request
Drunkness > 50 gives you `TRAIT_FEARLESS`, which helps with phobias and
social anxiety
## Why It's Good For The Game
Liquid courage
## Changelog
🆑 Melbert
add: If you are sufficiently drunk, you can resist your phobias and
social anxiety.
/🆑
## About The Pull Request
Literally every single bit of our code assumes that adjustXLoss returns
the total health delta (old_damage - new_damage), so negative values
when damage was taken and positive when it was healed, ***except***
simplemobs had this inverted for (supposedly) two years. Yeah. This
broke crushers, mending touch and slime feeding - not sure if anything
else was screwed due to this.
Closes#87550
## Why It's Good For The Game

## Changelog
🆑
fix: Fixed inconsistent crusher trophy droprates
/🆑
## About The Pull Request
Finally, I've done it.
You can get plant limbs attached, and those limbs will actually
regenerate in light!
I've done the same for shadow healing for nightmares and shadowpeople.

**Details:**
I've removed the healing/damage from their species, and instead have the
prospective limbs add a new /datum/status_effect/bodypart_effect to the
carbon, which other bodyparts with the same effect merge into.
Plant people in specific also had oxy and tox healing, as well as
nutritional gain. These attributes have been integrated into the
bodyparts aswell, and scaled to the amount of bodyparts you have. You
can take 1 plant limb to get 1/6th of the oxygen and toxin healing of a
normal podperson. Same for nutritional gain. (Fun fact: you need 2 plant
limbs to never lose hunger, 3 to actually be nutrition positive!) Damage
wise, if you have 1 plant limb, you get 1/6th the plant healing but
focused on only the plant limb. (This is hopefully exactly as you'd
expect).
Fun fact: if you remove your lungs and organs and take plant limbs, you
will still die from oxygen loss or toxin loss because the oxy and tox
healing is really weak.
## Why It's Good For The Game
Honestly this is peak sandbox. I remember when transplants got added,
and I took a plant limb, but it didn't heal in light :(
This shattered my immersion and deeply saddened me. Honestly this is why
I started the whole dedatumisation of species tirade.
But it's here. Trans plant plant transplants will heal in light.
Tgstation is saved and all furry downstreams are rebasing.
## Changelog
🆑
add: Taking plant or shadow limbs will now behave as expected! Take a
plant arm, and it will heal in light! Or take plant and shadow limbs and
be in constant agony as you realize this world was not made for you
refactor: Refactors how we handle photosynthesis/nyxosynthesis by moving
it into a new status_effect framework controlled by podyparts
/🆑
## About The Pull Request
Reverts new crusher marks from #88171. Crusher marks now can be
instantly detonated, but firing one puts you on an attack cooldown
again.
I did, however, add a fancy animation to them.
https://github.com/user-attachments/assets/ff09084e-36a9-445e-bb27-d7ba4822e37d
## Why It's Good For The Game
This change caused two major issues:
A) Color-based animation doesn't provide you with a clear hint when the
mark is actually ready to be burst, as it can look green but be just a
tiny bit short. Before, mistimed clicks didn't punish you aside from
potentially getting attacked by entering melee range, while now doing so
puts you on another 0.8 second melee cooldown, which feels ***really***
bad as there's no way to see if a mark is actually ready or not.
B) It also removed the potential co-op nuking of mobs/megafauna that
crusher duos could do, switching betwen applying and bursting marks for
doubled DPS, which while rare, I was kinda fond of.
## Changelog
🆑
balance: Crusher marks now can be instantly detonated, but firing one
puts you on an attack cooldown again
/🆑
## About The Pull Request
Fixes#85980
- Pixel adjustments are now sourced
When tweaking a mob's pixel w, x, y, z, is is now done via `add_offsets`
and must have a source string associated
- Refactors riding
Refactors how riding component selects the offsets to use. It's now all
done via the getter rather than a weird mix of a var, a cache, and a
getter.
- Moves a bunch of animations to use `pixel_w` / `pixel_z`
Largely to prevent conflicts with adjustments to a mob's pixel position,
but also as many animations are not actual movements, but visual
movements. Floating is one such example.
## Why It's Good For The Game
It just works
## Changelog
🆑 Melbert
fix: Fixed grab offsets not showing for anything but passive grab
fix: Fix jank with mob offsets when riding things
refactor: Refactored riding component, particularly how it selects layer
and offsets. Report any oddities
refactor: Refactored pixel offsets of mobs. Report any oddities
/🆑
## About The Pull Request
Reverts #83361
## Why It's Good For The Game
I PR'd the original with the intent of making disease battling more
engaging by adding warnings and sneeze dodging, but this was rejected
and instead we got a very awkward middle ground where no one is happy
and the original PR didnt accomplish what it set out to accomplish. You
can't dodge the sneeze because it's a shotgun spread and invisible :/.
The sneeze catchers are even somewhat buggy and the sneeze warning leads
to extra chat clutter
## About The Pull Request
Adds slips to the list of existing shove stun methods originally set in
https://github.com/tgstation/tgstation/pull/84640 (wall shoves,
telebaton, mansus grasp), and also reifies this concept as the "dazed"
status effect.
This makes it so that being knocked down from a slip from any source
(e.g. wet floor, clown stuff, lube, foam, oil, butterdog) gives the
dazed visual effect and makes you eligible for being shove stunned. The
status always lasts for 3 seconds even if e.g. slipping on lube knocks
you down for 15, but this can be customized per slip.
## Why It's Good For The Game
Further rewards environmental play and provides another feasible means
of fighting back against better equipped opponents, both in line with
the original PR. Also the visual cue fits well as an immediate signal
that you're dazed and can't get up.
## Changelog
🆑
balance: slips now make you eligible for being shove stunned
/🆑
---------
Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com>
## About The Pull Request
This makes (almost?) all traits given by status effects use
`TRAIT_STATUS_EFFECT(id)` as their source, rather than the previous mix
of `id`, `type`, `REF(src)`, or some bespoke thing.
## Why It's Good For The Game
Consistency is good.
## Changelog
No user-facing changes
## About The Pull Request
### _**HEY HUSTLERS**_
Do you want to know all about the station's real GDP **_BREADWINNERS_**
this shift? Well, look no further than the all new GMM SPOTLIGHT. On
select shifts (Where the trait is rolled), the GMM SPOTLIGHT will shine
on who's HUSTLING and GRINDING the hardest so YOU CAN ~~know who has
enough money to try and mug them~~ LEARN THE SECRETS OF THE CREDIT
WHISPERS **AMONG US**.
Don't know where these legendary GRIND-O-HOLICS are this very SECOND?
Well, the GMM will UPDATE the SPOTLIGHT every 5 minutes, with their
IDENTITY MADE KNOWN to all crewmates via the station updates and
economic summary newcaster channels.
WHAT ARE YOU WAITING FOR? ALIEN JIM KRAMER??? UNLEASH THE SECRETS OF THE
HUSTLERS **TODAY**!!!
(The original idea for this station trait was given to me by
xhorian/@YesterdaysPromise a few months back, so big thanks to him for
the inspiration.)
Video of it in action:
https://discord.com/channels/326822144233439242/326831214667235328/1330408517248614432
## Why It's Good For The Game
This is, obviously, a negative station trait. On shifts where players
are working to make lots of personal profit, it can either serve as a
badge of honor, or as a target being painted on your back about who has
the most money. Still, it's somewhat flavorful, and I think it could be
interesting to have happen to a player, where suddenly a beam of light
from above ™️ suddenly appears and starts following you.
I wouldn't be against giving command some kind of control to let them
cancel the effect early by un-subscribing from their newsletter, but it
depends on how people feel about this.
## Changelog
🆑
add: Stations in your sector may start with the GMM spotlight, a massive
economic broadcast spotlight that will follow the wealthiest crewmate on
board until the next paycheck
/🆑
## About The Pull Request
This sets the processing subsystem for
`/datum/status_effect/fire_handler` to use `STATUS_EFFECT_PRIORITY`
(`SSpriority_effects`)
## Why It's Good For The Game
I'd say being on fire is classified under "certain status effects that'd
fuck the player over from lasting much longer due to server load"
## Changelog
🆑
fix: Being on fire or wet should no longer last much longer than
intended while the server is under load.
/🆑
## About The Pull Request
Like #88945 but I am meaner than Goofball.
This PR adjusts Phobias to be a little bit less restricting, rather than
being basically the worst thing in the game.
The way phobias work now is:
***Hearing*** something related to your phobia will make you scream and
give you a minor, minute-long mood penalty, once every 12 seconds.
***Saying*** something related to your phobia has a high chance to make
you either stutter or speak quietly, or both at once.
***Seeing*** something related to your phobia applies a moderate,
four-minute long mood penalty and then gives you stacks of a debuff,
once every 12 seconds, up to 6 stacks.
Each stack of the phobia debuff makes any effects applied by being
scared last longer. Then it applies one of four random effects.
- You scream, which does nothing else... unless you have at least 5
stacks in which case you will also drop whatever you were holding in
your active hand.
- You jump, which immobilises you for a very short period of time
(basically just interrupting your movement).
- You lose your balance, making you briefly move slower and become
staggered (which makes it easier to push you around).
- You feel faint, which makes you dizzy (move occasionally in unwanted
directions) and briefly blurs your vision.
These stacks decay every 30 seconds as long as you're not actively being
scared.
If you have _multiple_ phobias then your general level of fear is
applied globally between them, so even if you just escaped from some
clowns you might still be worked up when you see a spider.
Phobias mostly don't make you jitter any more largely because to be
honest it just looks sort of shit and generally makes your sprite and
animations seem like they are broken not like you are shivering in
fright. It still happens if you hear something scary.
_Also_ I changed carp phobia to a general "fish" phobia, because we have
so much fish-related content now to take advantage of.
_Also_ I fully deleted the Heretic phobia because it's not applied by
Heretics any more and without that context it is also needlessly
specific, with heavy overlap with the Supernatural phobia.
_Also_ I fucked around with the phobia speech dictionaries a little bit
to remove some words I don't think are that funny or appropriate and
also add some more. Your mileage may vary.
_Also_ I made sure people who are scared of aliens are scared of basic
mob xenomorphs, people who are scared of birds are scared of raptors,
and people who are scared of bugs are scared of butterflies
and........... mothroaches.
## Why It's Good For The Game
Phobias are internally classed as a "mild" brain traums, which makes
them relatively easy to acquire and are applied by effects that are
supposed to be bad but not completely debilitating.
Examples of other mild traumas are:
- Stuttering
- Speech impediments
- Your health preview doesn't update
- You occasionally move in a random direction
- Colour blindness
- You don't like dropping objects
Phobias on the other hand are generally considered by most players who
have had one to be _significantly_ disabling. The penalties they apply
tend to be significantly worse to play with than the things listed
above, and can make playing around with a roleplay quirk excessively
miserable.
Unlike Goofball I don't want to make these totally toothless, but I do
want them to be more _mlld_ than they were before.
## Changelog
🆑
balance: Phobias are now somewhat less debilitating, although their
effects get worse the longer you are near a fear trigger.
balance: Carphobes are now afraid of all fish.
del: Remove the Heretic phobia, as it is now basically unused.
/🆑
## About The Pull Request
We have a mob called `simple_animal/hostile/curseblob` which was used
only for the `necropolis_curse` status effect.
From the git history, this seems to have been added in a PR merged eight
years ago where the PR author came up with a cool set of curses to apply
to cursed objects and PRed it to the game as a concept to be used later.
Subsequently, nobody used it.
Well, to be more accurate, _two_ things apply the necropolis curse
debuff right now but they only collectively use three of the four
possibilities.
The fourth, which spawns a mob with weird behaviour, is unused and so
rather than spend my time bringing it up to standard I just removed it.
Because this is dead code.
To be quite honest I am not totally certain that `necropolis_curse`
should be a single status effect either and it would plausibly be better
off being two different status effects for the two different sources it
is currently invoked (helbital overdose, and being sacrificed by a
heretic).
**Fun Fact!**
Being sacrificed by a heretic doses you with 1 minute worth of
_Helgrasp_ which spawns a frightening hand to attack you once per
second, and also applies the Necropolis Curse which spawns a frightening
hand to attack you once per ten seconds. This means that if you have
anything in your mob which affects metabolic rate your sacrificial
experience may be somewhat different, as quite a lot of the danger
actually just comes from a chemical in your body.
One of these effects spawns the hands slightly further away than the
other, and you actually spend _2.5 minutes_ in the spooky hand room, so
in that second (longer) half you'll only be tormented by very occasional
spectral groping. Personally I would not do it this way I think.
However rather than removing and replacing it, which would probably have
some kind of aftereffect on the heretic sacrifice minigame that I would
rather make larger changes to, I just touched up some of the code to
avoid single-letter vars and to use a helper proc we already use in
other heretic-related places.
## Why It's Good For The Game
This wasn't maintained, isn't used, and was on our to-do mob conversion
list.
## Changelog
Not player facing
# About The Pull Request
## Nearsighted Sources
Nearsighted now associates/tracks severity applied by each source.
Previously, nearsighted only used a single variable which had to be
shared by every source, which caused problems for things like scarred
eyes which needed independent behaviour.
This implementation allows sources with different severity levels to
coexist without needing workarounds
There are now two different severity types for nearsightedness:
* Correctable: Can be mitigated with vision correction (like glasses)
* Absolute: Cannot be mitigated from any source, used for scarred eyes
Which can allow nearsighted sources to not be affected by vision
correction.
Also, since there is no more technical conflict between the two quirks,
I've made it so that nearsighted and scarred eye can be selected
together (as a QOL change)
There is also a new unit test for this new behaviour
(nearsighted_effect) that checks application and removal
## status_effect/grouped minor rework
Grouped status effects now have `source_added()` and `source_removed()`
procs, which are called whenever a source is added or removed from the
effect
I did this because the previous implementation was somewhat unwieldy.
Inherited status effects would recieve the _currently existing_ effect
through merge_with_existing, and require them to modify the existing
effect's properties, which is odd and not intuitive to work with (the
proc's `src` was not the existing effect)
It not being called for every source also made users repeat code in
`on_creation()` and `merge_with_existing()` for every source added.
This new interface should prevent repetition and be generally more
intuitive to work with.
# Changelog
🆑
refactor: Nearsighted has been reworked to track severity applied from
each source, as well as allow "non-correctable" nearsightedness (for
things like scarred eyes).
qol: The above being possible now means that you can select the
Nearsighted and Scarred eye quirks together
fix: Any bug that would occur from becoming nearsighted with a scarred
eye should be fixed now
code: status_effect/grouped merging code has been improved (i hope)
/🆑
## About The Pull Request
Buffs the crusher:
- Mining with the crusher gives mining XP
- If you mine with the crusher, your mining level will reduce the charge
time (more skilled miners can mine faster)
- Shooting the kinetic blast (crusher right click) no longer puts your
click on cooldown
For the mark, it now has a delay of 0.8 seconds. So even though the
click delay from shooting the mark is gone, you'll still have to wait
for it to be ready to detonate it.
Adds code support for the crusher projectile to have effects on hitting
a mob/mineral
- Buffs the bileworm trophy to give it AOE mining radius
Reorganizes all the crusher code + trophies to be in its own folder +
documents it somewhat
## Why It's Good For The Game
Crusher code is a bit outdated so I wanted to clean it up a bit while I
gave it the buffs I wanted.
I feel like it can afford to be better as a mining tool so I gave it
access to mining XP. I also gave it AOE mining from the bileworm trophy
so it can keep up with the other mining tools (pka/pc)
## Changelog
🆑
add: Bileworm crusher trophy now gives you AOE mining
balance: The pk crusher no longer has click delay after shooting the
projectile
balance: The pk crusher gives mining XP when it mines rocks
balance: the pk crusher charges faster when you mine rocks based on your
skill as a miner
code: cleaned up some of the kinetic crusher code
/🆑
## About The Pull Request
Adds suicides to fish. Like, a lot of suicides. Almost all of them very
unique. I'm too lazy to make a video, but they've been thoroughly
tested.
Improves the go_away status effect to have no timer - but delete you on
z-level change.
Adds a trait that prevents combat mode changes.
## Why It's Good For The Game
I want to kill myself with fish - and terrify bystanders in the process.
## Changelog
🆑
add: Adds suicides to fish. Like, a lot of suicides. Almost all of them
very unique. I'm too lazy to make a video, but they've been thoroughly
tested.
/🆑
---------
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Technically an improved port of
https://github.com/DaedalusDock/daedalusdock/pull/651, instead of only
storing height over 32 pixels for HUDs we store both pure height and
width for the sake of cutting down on icon operation spam (which is
pretty costly). Should save us a significant amount of time, cuts down
update_health_hud times by 45% and total update_health by 30% which is
pretty good for a somewhat hot proc.
## Why It's Good For The Game
Our health HUDs constantly fetch icons ***twice*** every update_health,
jesus.
## Changelog
🆑 SmArtKar, Kapu
code: Implemented caching for icon sizes which should significantly
improve mob health performance due to HUDs constantly fetching icons
/🆑
Closes#88283
Closes https://github.com/tgstation/tgstation/issues/88320
Fixes a harddel caused by the limp status effect not being properly
deleted
Reduces update-body calls in:
- Initialize from 4 to 1
- On z-level change from 2 to 1
- On move with bloody shoes from 1 to 0
Mostly by just passing along the proper argument and removing seemingly
unnecessary update body calls
## About The Pull Request
Looks through calls to `receive_damage` and replaces them with calls to
`apply_damage`
`receive_damage` is a gross to use internal proc that doesn't take into
account physiology (damage modifiers) or even update the mob's sprite
when taking damage
It should be avoided many uses - `apply_damage`, in fact, can take a
bodypart as a target, and is overall a lot easier and more ergonomic to
use.
"So what are valid uses of it?"
- Apply damage itself, and similar direct-damage procs
- Ensuring you deal an exact amount of damage to a bodypart
- Damaging a limb with no owner
## Changelog
🆑 Melbert
refactor: A ton of things now use the more correct method of applying
damage to you. Which means they will correctly factor in damage
modifiers and are less likely to break your sprite. Some examples
include embedded objects jostling around, chiropractice, and tackling a
wall. Report any oddities, such as extreme damage or bodyparts being
wrongly affected.
fix: Having acid splashed on your face may now disfigure you and make
you bald, as it once did three years ago.
fix: Itchy heretic trauma now better checks if the bodypart is covered
or not before determining if you should itch.
fix: "Repair Puncture" logs no longer mistakenly report you are
"Incising burned flesh"
/🆑
## About The Pull Request
Fixes borg light not turning off when flashed because the on_apply was
updating the icons before the status was added.

## Why It's Good For The Game
Lets people know the borg is stunned
## Changelog
🆑
fix: Borg lights not turning off when flashed or empd
/🆑
## About The Pull Request
Last night I was experimenting with hooking up different chemicals to a
shower and discovered that blood didn't really do anything other than
have red mist and particles. Your characters clothes were still cleaned.
The mood boost was still happy. So I reworked it a bit.
Blood now:
- Gives a negative mood, disgust, and status effect when showering with
it (unless you are morbid, evil, or undead, then it's considered
positive)
- Has an icon alert for bloody showers
- Covers a mob's clothing with blood when showering (or any objects on
the tile)
- Tossing or spraying a container full of blood now covers objects/mobs
in blood
- The revenant defile spell now affects showers by removing all water
recyclers and reagents that gets replaced with blood
Showers now:
- Require 70% of water to clean and get mood/status effects
- Require 70% of blood to get mood/status effects
- Require 20% of radioactive reagents to stop radiation removal effects
So it's possible to have a clean water shower that is secretly
radioactive. Since radioactive reagents do nothing on `TOUCH`, all this
achieves is preventing the water from washing off the radiation.
I did have to refactor some of the reagent code to support method types
for objects since I was experiencing hazmat issues when I was testing.
Whenever I would inject blood from a syringe into a beaker, it would
cover the beaker in blood on the outside. This would have been extremely
hazardous for viruses. So I needed to make sure we are only applying it
to the methods for `VAPOR|TOUCH`
Also improved the mood typecasting for owner to allow checking of mob
biotypes. (so we can check `UNDEAD` for mood)
## Why It's Good For The Game
Blood effects and interactions are now more consistent. The code for
objects is refactored to support method interactions with reagents.
Evil/Morbid people now get some unique interactions that fit their
theme. Last we get a cool new ability to let revenant's make their
defiled areas something out of a horror movie.
## Changelog
🆑
add: The revenant defile spell now affects showers by removing all water
recyclers and reagents that gets replaced with blood.
add: Showering in clean water (+70%) results in positive
mood/regen/stamina effects. It will wash off the mob.
add: Showering in dirty water results in negative mood effects and
disgust. It will NOT wash off the mob.
add: Showering with radioactive reagents (+20%) results in the
preventing the shower from washing off the radiation.
add: Showering in blood (+70%) results in severe negative mood effects
and disgust. (unless you are morbid, evil, or undead then it's
considered positive) It will cover the mob in blood.
add: Water effects that interact with a mob from touch or vapor
(showering/spray bottles/etc.) will now heal sleep, unconsciousness,
confusion, drowsiness, jitters, dizziness, and drunkenness.
fix: Fix bloody showers not covering objects in blood.
fix: Tossing or spraying a container full of blood now covers
objects/mobs in blood
fix: Fix wrong status effect for watery tile
image: Add new alert icons for bloody/dirty showers
code: Refactored some expose_obj reagent code to support method types.
code: Improved mood typecasting for owner to allow checking of mob
biotypes.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
Fixes a lot of status effects having the default alert, adds a unit test
to check that status effects don't forget to change it
I chose a test rather than just making the default "no alert" because I
think people making status effects should think about whether it should
have an alert
Also I added a test for effects which did not set an ID because that's
kind of important, I applied the same mindset here to account for
abstract types but admittedly less sold on this one.
## Changelog
🆑 Melbert
fix: You should be afflicted by the "Curse of Mundanity" far, far less
/🆑
## About The Pull Request
~~Kept you waitin huh!~~
The projectile refactor is finally here, 4 years later. This PR (almost)
completely rewrites projectile logic to be more maintainable and
performant.
### Key changes:
* Instead of moving by a fixed amount of pixels, potentially skipping
tile corners and being performance-heavy, projectiles now use
raymarching in order to teleport through tiles and only visually animate
themselves. This allows us to do custom per-projectile animations and
makes the code much more reliable, sane and maintainable. You (did not)
serve us well, pixel_move.
* Speed variable now measures how many tiles (if SSprojectiles has
default values) a projectile passes in a tick instead of being a magical
Kevinz Unit™️ coefficient. pixel_speed_multiplier has been retired
because it never had a right to exist in the first place. __This means
that downstreams will need to set all of their custom projectiles' speed
values to ``pixel_speed_multiplier / speed``__ in order to prevent
projectiles from inverting their speed.
* Hitscans no longer operate with spartial vectors and instead only
store key points in which the projectile impacted something or changed
its angle. This should similarly make the code much easier to work with,
as well as fixing some visual jank due to incorrect calculations.
* Projectiles only delete themselves the ***next*** tick after impacting
something or reaching their maximum range. Doing so allows them to
finish their impact animation and hide themselves between ticks via
animation chains. This means that projectiles no longer disappear ~a
tile before hitting their target, and that we can finally make impact
markers be consistent with where the projectile actually landed instead
of being entirely random.
<details>
<summary>Here is an example of how this affects our slowest-moving
projectile: Magic Missiles.</summary>
Before:
https://github.com/user-attachments/assets/06b3a980-4701-4aeb-aa3e-e21cd056020e
After:
https://github.com/user-attachments/assets/abe8ed5c-4b81-4120-8d2f-cf16ff5be915
</details>
<details>
<summary>And here is a much faster, and currently jankier, disabler
SMG.</summary>
Before:
https://github.com/user-attachments/assets/2d84aef1-0c83-44ef-a698-8ec716587348
After:
https://github.com/user-attachments/assets/2e7c1336-f611-404f-b3ff-87433398d238
</details>
### But how will this affect the ~~trout population~~ gameplay?
Beyond improved visuals, smoother movement and a few minor bugfixes,
this should not have a major gameplay impact. If something changed its
behavior in an unexpected way or started looking odd, please make an
issue report.
Projectile impacts should now be consistent with their visual position,
so hitting and dodging shots should be slightly easier and more
intuitive.
This PR should be testmerged extensively due to the amount of changes it
brings and considerable difficulty in reviewing them. Please contact me
to ensure its good to merge.
Closes#71822Closes#78547Closes#78871Closes#83901Closes#87802Closes#88073
## Why It's Good For The Game
Our core projectile code is an ungodly abomination that nobody except
me, Kapu and Potato dared to poke in the past months (potentially
longer). It is laggy, overcomplicated and absolutely unmaintaineable -
while a lot of decisions made sense 4 years ago when we were attempting
to introduce pixel movement, nowadays they are only acting as major
roadblocks for any contributor who is attempting to make projectile
behavior that differs from normal in any way.
Huge thanks to Kapu and Potato (Lemon) on the discord for providing
insights, ideas and advice throughout the past months regarding
potential improvements to projectile code, almost all of which made it
in.
## Changelog
🆑
qol: Projectiles now visually impact their targets instead of
disappearing about a tile short of it.
fix: Fixed multiple minor issues with projectile behavior
refactor: Completely rewrote almost all of our projectile code - if
anything broke or started looking/behaving oddly, make an issue report!
/🆑
<!-- 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
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! --> the text displayed when this quirk's gained would
include the skillchip's typepath rather than its name. this fixes that.
also fixes an issue with how the callback timer was being handled, which
would lead to a runtime whenever the quirk was removed (since addtimer
returns the id and not the callback itself). also fixes the scratch
effect never actually working because an organ slot was being provided
to `get_organ_by_type` rather than the type. also fixes the itchy effect
not going away after the skillchip is removed (it gets added again if
the skillchip is reimplanted).
## Why It's Good For The Game
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. --> fixes a few
issues with the chipped quirk
## 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. -->
🆑
fix: fixes the chipped quirk displaying the skill chip's typepath rather
than its name
fix: fixes chipped quirk's itchy effect not working
fix: the chipped quirk's itchy effect now goes away when the skillchip
is removed
/🆑
<!-- 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. -->
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Partial revert of #86701
Implements a shared holder particle system, somewhat inspired by
https://github.com/Baystation12/Baystation12/pull/34014 (thanks Kapu).
Atoms can be assigned "shared" particles via add_shared_particles, with
an optional "alternate" key passed as a second arg if you're planning to
edit the returned particle holder (for example, color it like slimed
status does). Removing is done via remove_shared_particles with an
option to delete the shared holder if nothing is using it anymore (on by
default). This system should be prioritized over normal particle holders
when a lot of entities would be using a certain particle effect (like
fires) as it conserves a lot of clientside performance.
Burning, acid, decaying, firestacks and slimed status now use this
system which should help with clientside performance and amount of atoms
created/destroyed.
## Why It's Good For The Game
Less clientside lag.
## Changelog
🆑
refactor: Firestacks, burning/acid/decaying effects and (brought back
after being temporarily removed) slimed status effects now use a new
"shared" particles system, which should considerably improve client
performance when encountering a lot of burning/slimed entities.
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
## About The Pull Request
clickable alerts glow (regex: /atom/movable/screen/alert/.*/Click)
## Why It's Good For The Game
people are much more likely to look at the chat or anywhere else than
the status effect (really, its usually never worth reading 99% of them
so they end up ignored)
## Changelog
🆑
qol: alerts that do stuff when clicked glow gold
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Fixes issues with var typing and proc arguments, discovered using
OpenDream's WIP TypeMaker feature (using improvements I haven't PR'd
upstream yet).
## Why It's Good For The Game
Codebase maintenance.
## About The Pull Request
1. Having a broken arm will affect your accuracy when firing a weapon
with that arm, even potentially causing damage to you if it's a weapon
with recoil. This effect is not applied under the effects of a
painkiller.
2. The sister effect of this (punching someone with a broken arm) now
also has an interact with painkillers (it can no longer block your
attack).
3. Being drunk heavily affects ranged weapon accuracy, unless you're the
bartender
4. A lot of hand handling cleanup, using new macros to make it a lot
more readable at a glance
## Why It's Good For The Game
We have this system for modifying firearm accuracy but we don't really
use it commonly, and I feel like it slots in well with a lot of places
For broken arms, it adds some more depth to the wound system, in the
same way that trying to punch someone with a broken arm causes pain. (I
actually want to expand this to melee weapon accuracy and attacking with
melee weapons in general, but that's for a later time)
For drunkenness, it just adds to the drunk shenanigans. It also slightly
reduces the effectiveness of drinks as combat healing chemicals, such as
quadsec - makes it a bit more of a trade off.
## Changelog
🆑 Melbert
balance: Having a broken arm affects your accuracy with ranged weapons
fired with that arm. Utilizing a painkiller will nullify this effect,
however.
balance: Painkillers will prevent your punches from being cancelled due
to having a broken arm. You'll still take damage, though.
balance: Being drunk now affects your accuracy with ranged weapon. The
bartender is immune to this effect via their skillchip.
code: A lot of code involving left and right hand handling has been
cleaned up, easier to read. Report any oddities, like left and rights
being flipped
/🆑
## About The Pull Request
Changes the color of hallucination cores from red (?) to hot pink.
Adds the Perceptomatrix Helm, a hallucination anomaly core item.

This helmet shields the user's brain from all external stimuli while
creating a 1:1 replica of it, beamed straight into their mind. What this
means in practice is that the user's perception is hypercharged and
their brain shielded from psychic phenomena.
The sprite is a resprited marine helmet. It's mid and I don't like it
but I'm not a spriter.
List of effects:
Perception:
- Flash/Weld Immunity
- True Night Vision
- Blindness and blurriness immunity
- Expanded FOV
Brain Shielding:
- Perceptual Trauma Immunity
- Hallucination Immunity
Psyshield:
- Conversion and Mindswap Immunity
- Magical Mind Resistance (Much more limited than normal resistance)
- Technically counts as casting clothes
Additionally, you can an ability to invoke hallucinations on others on a
25-second cooldown.

## Why It's Good For The Game
I'm kinda tired of half the anomaly cores in the game having jack and
shit going for them. I also think there's a moderate lack of psychic
content in the game, so here we go.
### Yeah this is cool but like isn't it kinda fucking nuts? Holy shit
dude
Let's dissect this.
> Perception:
> - Flash/Weld Immunity
> - True Night Vision
> - Blindness and blurriness immunity
> - Expanded FOV
This part effectively amounts to nothing but night vision sunglasses.
> Brain Shielding:
> - Perceptual Trauma Immunity
> - Hallucination Immunity
This isn't all that impactful, either. Hallucination immunity is
immensely irrelevant. Perceptual trauma immunity, which means you ignore
effects like blindness or imaginary friends, is very, very niche.
> Psyshield:
> - Conversion and Mindswap Immunity
> - Magical Mind Resistance (Much more limited than normal resistance)
> - Technically counts as casting clothes
Basically just having a mindshield, and that only if you don't get it
taken off anyways. Mindswap immunity could be nice, that's really not
something you can even get otherwise.
Magical mind resistance isn't very good. It blocks mind reading,
nullblade sneak attacks, eye of god, many forms of telepathy, psyker
magic, the curse of madness, the curse of babel, and that's about it.
It's nice, but it won't stop a fireball.
A lot of this can in the end be duplicated with sunglasses &
oculine/mesons and welding protection, and a tinfoil hat, which is
partly why I added the ability. It staggers for a small duration and
causes hallucinations, and it's pretty fun to use, despite its effects
being rather understated.
## About The Pull Request
1. Deletes `INFINTIE`, it is misleading and not at all a big number and
causes bugs
2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it
clearer what infinite status effects are