Commit Graph

2317 Commits

Author SHA1 Message Date
MrMelbert
c080b83c41 Monkey eating glowup (#93759)
## About The Pull Request

1. Monkeys will only seek out food to eat if they are actually hungry,
rather than on an arbitrary cooldown.
2. Monkeys will no longer teleport-yoink food out of your hands.
Instead, they may get angry at you for stealing their food, and fight
you over it. The hungrier the monkey, the more likely they are to fight.
3. Monkeys will discard trash and empty glasses (on the floor) after
eating or drinking them.
4. Monkeys can target soup to eat
5. PunPun will no longer seek out drinks if they are hungry.
6. PunPun will now, if the bartender is absent and there are multiple
patrons around, attempt to find filled glasses or food to hand out to
patrons.
7. Several places that sought edible items no longer include drinking
glasses as edible items

<img width="656" height="185" alt="image"
src="https://github.com/user-attachments/assets/8b3a6ac1-ae2c-41a0-919f-b471ad93bb0f"
/>

## Why It's Good For The Game

PunPun shouldn't be yoinking glasses out of patron's hands - their
intended behavior is to serve drinks not steal them

Otherwise, monkey eating was a bit jank due to it being some of our
oldest ai code. I largely just brought it up to more modern ai
standards.

## Changelog

🆑 Melbert
add: If the bartender is absent, PunPun will serve filled drink glasses
to patrons that don't have one.
add: PunPun will now ignore filled drinks and items being held when
looking for stuff to eat.
add: Monkeys can eat soup.
add: Monkeys will no longer seek out food if they are not hungry.
add: Hungry monkeys might fight you over the food you are holding. The
hungrier the monkey, the angrier the monkey.
fix: Monkeys can no longer teleport items out of your hands to eat. 
/🆑
2025-11-08 01:32:46 +01:00
Yaroslav Nurkov
a17d0d238c Charger items fix (#93754)
## About The Pull Request
Items(i.e yellow stabilized/regenerative extract, glowshroom cap,
voltaic cybernetic heart) now recharges cells of mob equipment as they
are supposed.

## Why It's Good For The Game
After [(this)](https://github.com/tgstation/tgstation/pull/92987) PR was
merged items, that were supposed to recharge cells in items, stopped
functioning due to change in code of how batteries inside items
recharge. This PR supposed to fix the issue.
2025-11-05 15:13:38 -06:00
Ghom
922bd0cb92 Refactor get_ear_protection() and soundbang_act() to be less bs (#93472)
so, the current `COMSIG_CARBON_SOUNDBANG` signal is kinda lame because:
1) it's relegated to carbon mobs
2) it means ear protection equipment actually has no effect when
`get_ear_protection` is called instead.
3) It's sent in more than one place in the code

So I replaced it with another signal, this one properly sent in
`get_ear_protection`, and therefore `soundbang_act` as well.

What's also lame is that the code for both `get_ear_protection` and
`soundbang_act` can be easily moved to the living type, and it wouldn't
make a huge impact aside causing simple mobs to be stunned very briefly
by flashbangs since they cannot be knocked down anyway. The less the
code is specific to a subtype, the easier it's to work with, the fewer
the paradigms etc.

Another lame thing is some of the code being kinda old. Also I wanted to
fix an issue with the shriek ling ability detailed in #93401. I wanted
to make the ability more consistent with how other sound-related
abilities work by making it use `soundbang_act`, but with an intensity
higher than any other feature so far, beside point-blank flashbangs
(holding on standing on one). I've also buffed the "ear protection"
offered by vacuums from 1 to 3, meaning nothing but point-blank
flashbangs will go through. Yes, this means shrieks are not good in a
vacuum because sound generally propagate in absence of molecules that
can transmit the vibration... at least IRL. The game's an approximation
anyway, but it's still inconsistent, like a fuckton of other things that
are even more outside of the scope of this PR. Well, at least it affects
simple/basic mobs too now.

## Why It's Good For The Game
This will fix #93401 and make some code less old and bad.

## Changelog

🆑
refactor: refactored code for ear/soundbang protection. Flashbangs and
other things can now affect simple/basic mobs as well, not just carbon
and occasionally silicons.
balance: Aliens are no longer impervious to soundbang_act. Still very
resistant to it due to their hardcoded ear protection
balance: How the resonant shriek changeling ability works is now
slightly more consistent with the ear/soundbang protection, meaning it
won't work well in a vacuum, but at least it works on simple mobs now.
fix: Everyone can now hear a changeling shriek, unless they're already
deafened or in a vacuum.
/🆑
2025-11-04 15:22:33 -05:00
Ghom
999bde8f84 Most screen alerts now fit the player's hud style. (#93493)
## About The Pull Request
Most screen alerts that use the midnight hud style no longer have the
button baked in their icon. Other screen alerts with their own
background or shape (robot and mech alerts, atmos, heretic buffs or
debuffs etc.) are not affected. Also updated a couple sprites but didn't
spend too much time on them. Mostly reusing existing assets.

Montage of how the alerts look on threee different hud styles
(Operative, Trasen-Knox, Detective, ALSO I FIXED THE BUCKLED ALERT
ALREADY):
<img width="293" height="323" alt="image"
src="https://github.com/user-attachments/assets/3a2b972b-aa5a-4c27-a454-c8c39acf6e20"
/>
It looks only a smidge iffy on the syndicate since the top and bottom
borders aren't layered over all the overlays, but it isn't something to
worry about in this PR.

## Why It's Good For The Game
Screen alerts always had the midnight hud button baked in their icon
states (now overlays), which completely disregard the player's hud
setting, much unlike action alerts buttons. Melbert has also said that
it'd be nice if the code for action buttons could also be used in screen
alerts and viceversa, to slim things down. That's obviously not what I'm
doing today, but having most of the screen alerts already without the
baked background will surely help if we ever pursue that objective.

## Changelog

🆑
refactor: Refactored screen alerts a little. Most should now fit the
player's hud style. Report any issue.
imageadd: A few screen alerts have been polished/updated a little.
/🆑
2025-10-31 15:30:39 -06:00
Fghj240
31f9d1bcb6 Adds cybernetic cat ears (#93518)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-10-30 23:13:21 +11:00
MrMelbert
585b02c325 Reduces species feature boilerplate (#93570)
## About The Pull Request

Rather than having 100 separate list variables on `SSaccessories`, have
1 list for all feature keys that are associated with sprite accessories

This way you can get a feature by doing
`SSaccessories.feature_list[key]`, instead of necessitating
`SSaccessories.ears_list`, `SSaccessories.tail_list`, etc.

This lets us cut back on a lot of boilerplate in prefs, dna, and organs

## Why It's Good For The Game

We can see the benefit in this example: This is all the code for horn
DNA, bodypart overlay, and preference
```dm
/datum/dna_block/feature/accessory/horn
	feature_key = FEATURE_HORNS
```
```dm
/datum/bodypart_overlay/mutant/horns
	layers = EXTERNAL_ADJACENT
	feature_key = FEATURE_HORNS
	dyable = TRUE

/datum/bodypart_overlay/mutant/horns/can_draw_on_bodypart(obj/item/bodypart/bodypart_owner)
	return !(bodypart_owner.owner?.obscured_slots & HIDEHAIR)
```
```dm
/datum/preference/choiced/species_feature/lizard_horns
	savefile_key = "feature_lizard_horns"
	savefile_identifier = PREFERENCE_CHARACTER
	category = PREFERENCE_CATEGORY_FEATURES
	main_feature_name = "Horns"
	should_generate_icons = TRUE
	relevant_organ = /obj/item/organ/horns

/datum/preference/choiced/species_feature/lizard_horns/icon_for(value)
	return generate_lizard_side_shot(get_accessory_for_value(value), "horns")
```

## Changelog

🆑 Melbert
refactor: Refactored species unique organs slightly, particularly how
they are set up at game start. Report any oddities, like invisible tails
or wings
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-10-30 03:46:32 +01:00
FlufflesTheDog
0f3d4596f3 Dullahan fixes (#93365)
## About The Pull Request
Fixes up some of the blaring problems with the woefully unloved
dullahans, making them at least playable in time for halloween. List of
individual fixes in the changelog, but notable code changes include that
visible/audible messages can (currently exists for dullahan heads and
holopad projections) now be proxied, so that detached cameras can
optionally relay TTS, emotes, and other messages to the proper client.
## Why It's Good For The Game
Its spooky month!
## Changelog
🆑
fix: Dullahans spawn with their intended organs
fix: Dullahans can hear/see emotes
fix: Dullahan heads properly have preferences applied to them
fix: Dullahan heads no longer appear eyeless
fix: Dullahans can hear things from their head regardless of if their
body is nearby
fix: Dullahans can hear TTS messages
fix: Dullahans have a TTS voice
qol: Dullahans have a head in the character preview, for the sake of
easier customization
/🆑
2025-10-29 00:20:58 +01:00
Roxy
ebc3271c59 Fix eye organ runtimes in on_mob_remove (#93599) 2025-10-25 11:41:12 +02:00
die
54198986b7 generic device handling sounds (#93536) 2025-10-24 09:42:10 +02:00
SmArtKar
d402e20632 Fixes dropped limbs rotating and disappearing when pulled/thrown (#93521)
## About The Pull Request

Closes #92973 by turning all mutable overlays into images with set SOUTH
dir if the limb is dropped, thus ensuring nothing rotates when its
dragged around

<img width="78" height="75" alt="image"
src="https://github.com/user-attachments/assets/307126aa-f268-4dac-b521-4e8f168529b9"
/>

## Why It's Good For The Game

Our human rendering code is crying in the corner curled up in a fetal
position, I wish BYOND just allowed us to ban a whole object from
visibly rotating

## Changelog
🆑
fix: Fixed dropped limbs rotating and disappearing when pulled/thrown
/🆑
2025-10-23 17:22:36 +02:00
Ghom
38bebeaf47 Prosthetic Item arms no longer prevent ventcrawling: the remake (#93499)
## About The Pull Request
This is me picking up #93077 but with code changes relative to the two
new flags that Krysonism added in his PR, which unfortunately he never
finished.

## Why It's Good For The Game
Monkeys should be able to ventcrawl even if their left or right arm is
actually a chainsaw or armblade or whatever. See #93077

## Changelog
🆑 Krysonism
balance: prosthetic item limbs are no longer considered equipped items
for some purposes such as ventcrawling.
/🆑

---------

Co-authored-by: Krysonism <robustness13@hotmail.com>
2025-10-23 11:13:18 -04:00
Arceniu
9d551cbcf0 Fix tier 3 stomach/cybernetic (#93567)
## About The Pull Request
fixes a one https://github.com/tgstation/tgstation/pull/89549 not found
or ignored mistake?
2025-10-22 15:40:53 -05:00
Ghom
07d1ea3771 [NO GBP] Fixes temporary deafness (#93580)
## About The Pull Request
Yeah, if we just use the `+=` operator, the temporary deafness will
never decrease since the addendum will never be below zero. This PR
fixes that.

## Why It's Good For The Game
This will fix #93579 

## Changelog

🆑
fix: Fixed temporary deafness never going away.
/🆑
2025-10-22 19:41:19 +00:00
MrMelbert
21a945c299 Fix tongue subtypes (#93574) 2025-10-22 08:06:03 +02:00
Ghom
ca2cc70322 Organ damage refactor/cleanup (#93436)
## About The Pull Request
So, my original goal was just a refactor for the emissive overlays of
eyes, as a way to implement the specular emissive introduced by smartkar
some time ago, but somehow I found myself dragged into a bigger refactor
or cleanup of organ damage, thresholds, failures. One of the main
problem was that there were no procs called when a organ suffered enough
damage to fail or when recovering from failure. It'd just enable or
disable a bitflag, leaving it up to subtypes to decide how to tackle
organ failure their own ways: diverse, funky and sometimes incompatible.
More often than not relying on their very own "update_thingamajig" kinda
procs that run whenever the organ takes damage, rather than just when
the threshold is reached (low, high, failure. There are however a couple
organs with their own quirky thresholds, I let those slide).

There's also a bit of old code, especially for ears, with the
`AdjustEarDamage` and temporary deafness both predating the framework
for organ damage as far as I know. It really needed a coat of fresh
paint.

Oh, there were also more than a handful of organs that still heavily
relied on some ORGAN_TRAIT source instead of the `organ_traits` list and
the two add/remove procs `add_organ_trait` or `remove_organ_trait`. This
include organs that lose or gain specific traits when failing et
viceversa.

~~Lastly, felinids (and the halloween ghost species) having reflective
eyes. It's just a nod to the tapetum lucidum that animals with night
vision often have (including cats), which is why their eyes are a bit
brighter in the dark. Felinids however, do not have night vision (nor do
ghosts). This is merely cosmetic.~~ Cut out for the time being due to
issues with the specular emissive...

## Why It's Good For The Game
Refactoring / cleaning up old organ code.

## Changelog

🆑
refactor: Refactored organ damage code a little. Hopefully there won't
be issues (otherwise report them).
/🆑
2025-10-21 16:52:28 -05:00
necromanceranne
cbbcd71d78 Cyberbrawlening 2: Electric Boogaloo: Strongarm implants now ACTUALLY improve arm strength (#93442)
## About The Pull Request

Strongarm implants now directly improve your arm's unarmed stats,
improving the upper damage (+2), accuracy (+10) and stamina damage
inflicted while a grabbed target fails to escape a grab (+10).

As a result, strongarm implants do not tack on an extra +5 to the damage
inflicted by its super slam attack. However, this attack now uses
similar math to your standard punches; improved by athletics and the
Strength mutation, [as explained in this
PR](https://github.com/tgstation/tgstation/pull/93125).

Strongarms do not get their damage bonus against Beast mob biotypes, but
retain Mining and Special biotype effectiveness.

Strongarms do not go on cooldown, nor consider the cooldown for the
super slam except when punching human targets. When not punching a human
target, strongarms will always use the super slam.

Adds support for limbs to alter grab states, grab escape chances and
grab punishment damage. This is only actually able to be used by arms as
of the moment. (Maybe one day we'll get tail constrictions if someone is
insane enough to add lamia-like creatures/limbs or something)

## Why It's Good For The Game

The strongarms worked like a pseudo-punch and this often threw players
for a loop as to what they actually do. Many people assumed they
improved the actual power of the arm itself, rather than just being a
vehicle for a special attack.

This basically affirms player assumptions about the implant. Yes, it
does improve the arm strength. Yes, most of the generic improvements to
unarmed attacks improve this one's special attack. They're now closer in
functionality.

This is also my less than thrilling workaround for enabling the borg
punching that [lucy has been
craving](https://github.com/Monkestation/Monkestation2.0/pull/6748) :U

## Changelog
🆑
balance: The strongarm implants now directly improves the unarmed power
of the arm it is implanted into.
balance: The strongarm implant's super slam now uses similar
calculations to normal unarmed attacks, including improvements from
mutations and athletics.
balance: The strongarm always uses the super slam against nonhuman
opponents. It will only go on cooldown, and care about that cooldown,
when used against humans.
/🆑
2025-10-21 14:25:53 +13:00
Bloop
da629a1776 Fixes a runtime that can occur sometimes if a mob is gibbed (#93513)
## About The Pull Request

<img width="994" height="460" alt="image"
src="https://github.com/user-attachments/assets/ef7e6eb3-8754-4913-87f1-fad62f03523f"
/>

Tin, saw a fair bit of this in the logs.

Occurs when `forced_removal()` is called, which removes the chest from
the bodyparts list and then gibs the mob.

The individual organ removal procs attempt from the gibbing chain to
call `on_bodypart_remove()` but there is no bodypart in the mob to refer
to, so it runtimes.

Adds a safety check for such cases, if there is no bodypart there we
don't need to be doing anything in `on_bodypart_remove()` in the first
place (and it has already been called previously by forced_removal(),
presumably).

## Why It's Good For The Game

Less runtime spam

## Changelog

Not player-facing
2025-10-20 00:08:05 +02:00
Ghom
e5be2d0f91 Sensors can now be printed, removed and installed on jumpsuits. HANDCRAFTED jumpsuits no longer have sensors by default (also mild crafting refactor) (#93121)
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
2025-10-18 11:43:38 +02:00
EnterTheJake
a2c7c8e57b Heretic Antagonist Full Overhaul. (#92119)
## About The Pull Request

Heretic has received a complete overhaul. This PR touches nearly every
aspect of the antagonist. For readability's sake, not every change is
going to be listed in this pull request.

For the full list of changes please refer to the design doc:
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

Code by Me, @Xander3359 and @Arturlang 

TGUI by @Arturlang 

Sprites by OrcaCora and GregorDM

Writing bits by @necromanceranne 

### Core changes

- Cross-pathing has been removed. Main knowledge spells are now
exclusive to their path (for the most part).

- For every main knowledge unlocked (save for the robes and the blade
upgrade), Heretics can choose one option from a draft of 3 random side
knowledges (this is a free point).

- Heretics can now purchase side knowledges from a new tab, the
"Knowledge Shop". Side-knowledges have been divided by tier (Stealth,
Defense, Summons, Combat and Main). Tiers are unlocked as you progress
toward your main path.

- Heretics now gain the grasp and mark upgrade immediately, but their
main knowledge choices cost twice as much (except for the first spell,
the robes and the blade upgrade).

- Path specific robes have been introduced! They come with their own set
of quirks.

- Each Path has received a passive ability. This passive is upgraded
when you first create your robes, and again when you complete the Ritual
of Knowledge.

- Paths have been rebalanced as a result of the removal of cross-path
progression. Cosmic and Moon paths have received soft reworks.

- Upon unlocking the path 2nd level or reaching a total of 8 points
worth of knowledge, Heretics will lose the ability to blade break (and
the limit on blades all together).

- Ascension now automatically calls the shuttle with no possibility of a
recall.

- Late join Heretic has been removed.

### New UI 
<img width="750" height="635" alt="moon path ui"
src="https://github.com/user-attachments/assets/184ef783-5c9c-48a1-a2f7-4807ca93e990"
/>


### Knowledge shop

<img width="787" height="669" alt="Knowledge shop"
src="https://github.com/user-attachments/assets/3dc89b84-8c70-4d47-b612-54396e3ea6e7"
/>




### Quality of life //General balance changes

- Heretics will now gain X-ray vision for a few seconds when nearby an
eldritch essence (this effect has a cooldown).

- Ritual of knowledge now requires 1 uncommon item instead of 2. You may
now use a stunprod instead of a baton to complete the ritual. Beartraps
have been removed from the list of possible reagents.

- The maximum number of possible sacrifices required to ascend has been
reduced from 6 to 5 while the minimum has been upped to 4.

- Codex Cicatrix no longer requires a special pen to be made.

### Passive abilities

- Heretics now start with a passive ability. You can find what it does
on the path info tab after a path has been selected, and what they gain
when upgraded.

- Crafting your first set of Eldritch robes will bump your passive to
level 2.

- Unlocking the 2nd level will subsequently unlock your "Ritual Of
Knowledge"

- Completing the ritual of knowledge or ascending will net you the final
level.

### Path Specific Robes

- Armorer's Ritual is no longer a side knowledge. Each path will have
their own unique version of the ritual. This is placed after the 2nd
spell in the tree.

- Robes can no longer be destroyed by fire and acid, grant t4 flash
protection (Moth Heretics stay winning) and protection against basic
syringes, to bring them on par with other antagonist's armor sets.

- The recipe to craft the robes is now a set of armor/vest, a mask (any
mask will do now, not just gas masks), plus the unique reagent required
for the blades (Plasma for Cosmic, Trash For Rust, match for Ash and so
on)

- Wearing the robes as a non-heretic may yield some unfortunate
side-effects.

### Moon Path Rework

Moon path  rework.

Moon Heretics gain immunity to brain traumas and slowly regenerate brain
health. Equipping the moon amulette channels its effects through the
moon blade; making it unblockable and cause sanity damage instead of
brute. Ring leader's Rise now summons an army of harmless clones that
explode when attacked; the explosion briefly stuns non-heretics and
cause sanity and brain damage to them. Moon blade can also now be used
when pacified and Moon spells are no longer blocked by regular anti
magic, only mind magic protection.


**Cosmic Path Rework**

Cosmic path has received the biggest batch of changes alongside Moon.
The path has been dead last in ascension and pickrate (less than 5%) for
almost 2 years. It did gain some popularity over the last few months,
reaching the highest ascension rate in the game (12%) while mantaining a
relatively low pickrate.

Cosmic sits in a weird spot, where pretty much every knowledge
surrounding the path is either mediocre or, in the case of the
ascension, dysfunctional. Yet it has maintained a smidge of relevancy
due to how quickly Cosmic heretics can capture and sacrifice targets
thanks to Star Touch.

As a result, the best course of action would be to rebalance the
entirety of the kit; granting the heretic more tools to manipulate space
and dictate the flow of a fight, while lessening their ability to end a
confrontation by instantly sleeping their opponents.

lastly The Star Gazer is now ghost controlled ; And they shoot lazers!

<img width="636" height="451" alt="gazer gag 3"
src="https://github.com/user-attachments/assets/601d6881-c042-4e42-8ce6-ac90cd27848b"
/>


## Why It's Good For The Game


### Ok...but why do we want this?

Again, if you want my full reasoning, please check my doc
https://hackmd.io/@BiST8PJVRjiwVPY86U3bLQ/B11HyChz1g.

To keep it short and concise; Heretic is too complex and unintuitive for
its own good. Too impenetrable for new players and too abusable for
experienced players. This can be chalked up to a lot of poor design
decisions. But ultimately, what I believe being the biggest contributor
to the current status of Heretic is the ability to move into different
paths, also known as "Cross-Pathing".

### Cross Pathing my beloathed.

Cross-pathing, while cool in theory, overcomplicates the antagonist and
overloads them with power. Players dealing with the heretic are
incapable of working out what a given heretic can do. This also leads to
late game heretics having 3 rows Worth of action buttons and virtually
no weakness.

Over the last year, I've often received the understandable but also kind
of unfair accusations of making Heretic too powerful without a clear aim
or purpose.

My goal with the paths I've reworked over the last year (Rust,Void and
Blade) wasn't necessarily to just make them stronger (although that was
also part of the goal, as they were paths that were underperforming),
but for them to have more interactions with the sandbox and to better
live up to the fantasy presented to the player.

If an harbringer of frost gets countered by a cup of coffee, we probably
messed something up.


Unfortunately, the current incarnation of Heretic doesn't really allow
for surgical balance changes to specific paths. Every time a knowledge
gets buffed, we make every path that can easily tap onto that knowledge
stronger by default. It doesn't take a genius to understand why this
system is ultimately unsustainable.

### Blade Breaking

I feel that after a heretic has reached the near peak of their power,
they no longer need the ability to instantly escape any encounter. Check
my doc for my full reasoning.

## Less versatile, more specialized paths.

By removing cross-pathing, we remove a huge maintainability burden from
the antagonist. Paths can now be designed around clearer strengths and
weaknesses. They become easier to balance and less of an headache to
understand for everyone.

It also means we can give paths some needed quality of life quirks
without having to worry how such a change might have a knock-on effect
for other paths.

Ash heretics can finally let loose without dying by their own flames.
Cosmic Heretic can go to space without having to carry a modsuit. Moon
Heretic can use their abilities without fear of one random trauma
ruining their day, and so on.

### What a horrible night to have a curse...., wait how do I curse
people again?

As of right now the heretic tree has quite a hefty amount of trinkets
that pretty much never see use.

Partly because the tree itself is a nightmare to navigate. And partly
because why would anyone set up an elaborate plan or scheme when they
can unleash 2 rows of spell in the span of bunch of seconds.

Heretics mostly gravitate towards powers that push them towards greater,
more potent combat strength. If it doesn't contribute to killing people
quicker, it isn't worth doing for most. And given the opportunity cost
associated for taking those powers, they will remain that way so long as
there are better choices to be poached.

The new draft system encourages Heretics to play more with the tools at
their disposal. If you want to go for a specific combo from the side
path options, you may now do so by tapping into the knowledge shop.

Yes, the shop does include a few knowledges from the other paths. But
these are limited to 1 per path, are very expensive and can only be
unlocked very late into the shift.

## Drip Of the Mansus

The iconic heretic robe is actually sequestered to a side path that is
most easily access by only two paths at a time. Since heretic paths are
being made to be much more specialized, the most obvious way in which
this can be showcased is through an easily
identifiable outfit.

By using the robes, we can both telegraph WHAT heretic you are looking
at, and just how much power they've accumulated and when it is
reasonable to take the kid gloves off and treat them as a genuine
threat. If a heretic is in their
robes, that heretic is now a significantly more prominent danger to the
station.

It also serves as a useful means for gating some of the more powerful
effects of a heretic's path behind the robes, AND enable options for
disarming them of that power should they be captured without making it
something endemic to their mob.

A major problem with heretics is a lack of certainty as to how powerful
they have become. A heretics robes is one of the milestones to help
players dealing with heretics identify that.

### Will this be 100% fair and balanced?

This is a massive overhaul to a pretty complex and bloated antagonist.
I've done my best to show the changes to several maintainers and other
members of the community for their feedback. But at some point we'll
have to see how this behave in the environment to get a feel if
something is over or undertuned. (that's my way of saying, yes this is
likely gonna require a testmerge or two).

What I will say is that I'm not trying to change the core identity of
Heretic.

Heretics should have the upperhand in single encounters early on, be
able to joust a small group of players after they unlock their final
spell, and end the round when they ascend. They're a progression
antagonist. They should retain their payoff as well as pose a danger as
they grow stronger.

But if more players feel like they are more reliably able to play the
antagonist in more varied and interesting ways, rather than the
antagonist largely existing as a measuring stick for 'robustness' due to
its elitist design philosophy, then the rework has been a success. There
should be something for
everyone in the antagonist, as is true for all of our antagonist roles.
2025-10-15 22:34:51 +00:00
Fghj240
ccf799133c Non-admin spawned atlas gravitronic spinal implants now use their intentional(?) sprite (#93428)
## About The Pull Request

so apparently there are two sprites for herculean gravitronics, one with
the core in and one without, but the code for adding a core to the
gravitronic doesn't actually change the sprite so it's unused unless an
admin spawns in an atlas with a core already in it which in that case
it'll have the sprite.

This single line of code makes the sprite change when a new core is put
in.

yes I tested it no it's not a web edit

## Why It's Good For The Game

bugfix

## Changelog

🆑
fix: Atlas gravitronic spinal implants now use their intended sprite
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-10-14 00:11:18 +02:00
Bloop
b7402b77c2 Changes cat tail define from FEATURE_TAIL to FEATURE_TAIL_CAT so it matches the rest (#93426)
## About The Pull Request

Just a simple find + replace PR. All the other tail defines match their
text strings, but for some reason cat tails are just `FEATURE_TAIL`
which is inconsistent.

## Why It's Good For The Game

Consistency, + a lot of downstreams have a generic "tail" feature key
which is distinct from cat tails, so not taking up that define is
better.

## Changelog

Nothing any players would notice
2025-10-12 23:51:54 +02:00
Bloop
145b70cafc Fixes backwards istype() check (#93420)
## About The Pull Request

Came across this randomly, looks weird, and I think it always just would
evaluate to FALSE which is definitely not the intention.

## Why It's Good For The Game

Fixes a bug

## Changelog

🆑
fix: integrated toolset and integrated paperwork implants can be emagged
for an integrated combat knife and chameleon stamp, respectively (fixed
a bug preventing that from working)
/🆑
2025-10-12 15:25:54 +03:00
Fghj240
dac24540ec A new type of cybernetic ear, volume-adjusting ears. Also changes the stats of the basic and regular cybernetic ears for consistency (#93362) 2025-10-11 09:10:53 +11:00
MrMelbert
6ba755cb44 Felinid ears are randomized properly (#93297)
## About The Pull Request

When more Felinid ear styles were added, no one updated the jank old
randomization code

When Felinid ears were refactored, no one updated the jank old
randomization code

Sooo let's do that shall we? 

1. Species `get_mut_organs` -> `get_organs`, it gets gets all organs the
mob has anyways

2. Prefs `relevant_external_organ` -> `relevant_organ`, it applies to
any organ type

3. Del organ `preference`, the preference itself handles it via
`relevant_organ`

## Changelog

🆑 Melbert
fix: Felinids will randomize their ear type properly
/🆑
2025-10-05 16:21:42 -06:00
SmArtKar
11c3300aa0 Cleans up/optimizes wounding code (#93113)
## About The Pull Request

So turns out that wounding is actually one of the main time consumers in
``apply_damage()``, as it has a lot of unused or unnecessary code which
it runs all the time, be it storing a lot of info in lists despite never
passing more than a single value, or running checks multiple times. I've
cut out or simplified unnecessary/overly complex logic, and tried to
pull out some of the more expensive checks to make it run faster.
There's probably tons more stuff to improve here because this code is so
convoluted, but this is the best I've got for now.

## Why It's Good For The Game

Cleaner code, runs faster too.

## Changelog
🆑
code: Cleaned up wound code, should hopefully run a bit faster now.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-10-02 22:23:55 +02:00
MrMelbert
e350c50a5c Emp prot tags are more specific, also no longer leak stealthy emp protection (#93211)
## About The Pull Request

Fixes #93199

EMP protection now specifies what it protects

Adds an EMP flag for things which should definitely not indicate they
are EMP proof

## Changelog

🆑 Melbert
fix: EMP proof objects now specify what they protect rather than only
implying it's 100% emp proof
fix: Some objects meant to stealthily be emp proof no longer broadcast
they are emp proof on examine
/🆑
2025-10-02 05:05:57 +02:00
SmArtKar
7b3a31b1db Fixes appendicitis not curing on aheal (#93204)
## About The Pull Request

Closes #93161

## Changelog
🆑
fix: Aheals now cure appendicitis
/🆑
2025-10-01 21:13:08 +02:00
Xander3359
793018ced1 [NO GBP] Fix the pre-built voltaic heart not having shock immunity (#93201)
<!-- 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
Fix the pre-built voltaic heart not having shock immunity
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
This is admin-spawn only (I hope?)
But it's still a bug
<!-- 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. -->

## 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: Fixed the pre-built (admin spawn) voltaic combat heart not having
shock immunity
/🆑

<!-- 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. -->
2025-10-01 21:10:56 +02:00
SmArtKar
c2dce9e2bf Fixes a stupidly old bug that made husks glow in space (#93189)
## About The Pull Request

Emissive blockers should be present on husks too. This caused them to
let emissive overlays through, which made them glow in space from
parallax backlight. This bug is at least 2 years old.

## Changelog
🆑
fix: Husks no longer glow in space.
/🆑
2025-09-30 16:55:46 +02:00
necromanceranne
097c2e52cd TRAIT_HARDLY_WOUNDED and TRAIT_EASILY_WOUNDED now decrease and increase the max considered damage for wounds by 50%, rather than adjusting the considered damage itself. (#92993) 2025-09-24 18:13:08 +02:00
MrMelbert
750ca9d2ec Two as anything greps (and some other cleanup) (#92974) 2025-09-20 13:44:28 -04:00
MrMelbert
11a1b27a50 Honorifics are not taken into account for voice activators (#93022)
## About The Pull Request

After refactoring this, I realized that baking honorifics into all
voices had side effects

Honorifics only needs to be included in voice when speaking, not when,
say, storing names for later use

## Changelog

🆑 Melbert
fix: Honorifics will no longer interfere with voice detectors and
similar things
/🆑
2025-09-20 01:02:01 +02:00
MrMelbert
8a4613b980 Things that iterate cells avoid grabbing abstract cells (like Ethereal stomachs) (#92987)
## About The Pull Request

Anything that iterates contents for all cells now use a new helper,
`get_all_cells`, which only checks equipped items and storage contents
for cells, rather than... everything

This means we avoid grabbing abstract cells, and thus avoid this

<img width="676" height="113" alt="image"
src="https://github.com/user-attachments/assets/955f38e5-7428-477d-ab6a-dcc338960c99"
/>

Note: 

This means these random recharge-all objects (like Xenobio stuff) no
longer recharges Ethereals
If we want these objects recharging Ethereals, we should *probably* add
a bespoke interaction

## Changelog

🆑 Melbert
fix: Things that recharge "all cells on your person" now avoid
recharging Ethereal stomachs, and thus, will no longer cause spontaneous
overcharge or weird chat messages
/🆑
2025-09-15 16:38:54 -07:00
FalloutFalcon
d2f34e33be moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621



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

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

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

need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
2025-09-13 00:36:15 +02:00
MrMelbert
7c0973ccf4 Refactors names and voices / potted plants no longer conceal voice (just appearance) / honorifics show on examine (#92781)
## About The Pull Request

Closes #92778
Closes #86829

<img width="347" height="39" alt="image"
src="https://github.com/user-attachments/assets/c50bd1ff-8c00-47a7-a31a-617fae2adc5b"
/>

1. Splits `TRAIT_UNKNOWN` into `TRAIT_UNKNOWN_APPEARANCE` and
`TRAIT_UNKNOWN_VOICE`

2. Renames some stuff like `getvoice` and `getspecialvoice`

3. Gets rid some crummy signals around `get_visible_name` and
`get_voice`

4. Heads now apply the disfigured trait when relevant (rather than
snowflake checking for damage amount)

5. Ling voice refactored into using special voice (it was only used by a
viro symptom anyways; I don't anticipate this overlap being problematic)

6. Mask voice changer refactored into a trait

## Why It's Good For The Game

Potted plants shouldn't have magical voice concealing powers -
especially not over radio, but not over in person either. It's a damn
plant

So I addressed this by refactoring our face and voice system. Overall
things should be a lot cleaner and easier to use.

## Changelog

🆑 Melbert
refactor: Refactored a lot of code relating to human face and voice, ie,
what shows up in examine and in say. Report anything odd when examining
people, with ID cards, when talking over radio, or when disguised
refcator: Refactored how you get disfigured when your head's super
damaged
refactor: Refactored ling mimic voice and traitor voice changer
del: Potted plants no longer hide voice. They still hide appearance,
though
qol: Honorifics now show in examine / in world, rather than only when
speaking.
/🆑
2025-09-12 17:11:06 +02:00
John Willard
3cb0b239b7 Merges ghosts into spirits & a rework (#92879)
## About The Pull Request

Having 2 different species with similar names, looks, attributes etc.
seemed like it would be confusing so I thought we should probably trim
it down to 1, however since I'm doing that I thought of other changes to
go along with it:

- The passthrough ability was replaced, now while you're passing through
things you no longer drop stuff, but you put a tombstone where you start
phasing, and are pulled back to it while done. You still can't interact
with anything in this form. Having the tombstone dug out will be raiding
your grave, so you'll be pulled out as a dead skeleton.

- Removes holy water interactions

- Ghosts now have organic limbs & are a Humanoid, so they can have
surgery and other forms of healing used on them.


https://github.com/user-attachments/assets/5db0c204-0070-466b-8b6c-1702ff0fd94e

## Why It's Good For The Game

Ghosts being available to Wizards is okayish but is a rather big buff
for one you get free, yes you can still be caught up to if you're in
hallways and such but it's way easier to get away with than like, your
default teleport scroll even. Being available to Miners though was a big
mistake because it opened them to be quite an annoyance with it. The
only counter was the fact no healing worked on them, which I don't think
is how it should be balanced.
I thought I could trust players with such tools but apparently I had too
high hopes.

Anyway this makes it more bearable for it to be given out at the low
cost it currently is at, it's still good as flavor, to spook people or
ghost around, and I think while it doesn't make 100% sense why you lose
access to your hands, inventory, and UI when you supposedly "drop" your
tombstone, I think it's still a good advantage for "scouting", sorta
like a lesser spirit realm rune.

Closes https://github.com/tgstation/tgstation/issues/91849

## Changelog

🆑
del: Merged ghosts and spirits into one species.
balance: Spirit's passthrough ability is now tied down 7 tiles from a
tombstone, but is no longer affected by holy water nor does it make them
drop their equipped gear.
balance: Ghosts can now be healed.
/🆑
2025-09-12 16:55:47 +02:00
sushi
ffd3357f6f Fix implant removal bug that allowed you to remove them from a mob multiple times. (#92913)
## About The Pull Request

Sets `implant` to `null` in
`/datum/surgery_step/extract_implant/success()` after removing it.
Surgery steps are global objects, so the cached implant object would
still exist upon entering `/datum/surgery_step/extract_implant/preop()`.
`preop()` was also changed to set the `implant` member to `null` if no
implant is found, so that the implant state is always valid as soon as
the step is started.

## Why It's Good For The Game

Prevents removing the same implant from a mob several times.

The bug also allowed you to attempt to remove the same implant from a
_different_ mob, which can cause a runtime if the mob does not have an
implants list.

I don't believe this was actually duplicating the implant, however I was
able to get the same implant to appear in multiple implant cases, which
I think were just holding a reference to the same implant.
## Changelog
🆑 sushi
fix: implants can no longer be removed from the same mob (or other
mobs!) multiple times
/🆑
2025-09-12 00:45:34 +02:00
OrionTheFox
a8d1925a8b Updates formatting of the paper printed by Autopsies, adds some missing info (#92689)
## About The Pull Request
<details><summary>Updates the paper printed by an Autopsy</summary>

<h5>(It's actually not much longer than the old autopsies could get. It
has only a few new lines, most notably the missing organs it already
should have been listing and Temperature)
(Also it actually has fewer characters than the healthscan still because
of having no color.)</h5>

<h6>I genuinely don't know how to get the Overall to stop stacking like
that. It was suggested it looks better at the bottom as a summary-type
thing, and I think that's true and it does work, but it's hard to format
right with paper width like it is.</h6>

<img width="261" height="680" alt="image"
src="https://github.com/user-attachments/assets/76190f1b-073a-4a61-a2fe-8002aaeb9187"
/>

</details>

<details><summary>
COMPARISONS
</summary>

<details><summary>
New vs Old
</summary>
<h6>Obviously not the same info. I'm not gonna recreate two identical
deaths in seperate code. I'm not crazy!!!
Also I know I missed the virus scan, fwiw the formatting is about the
same as the chemical. About. Ish.</h6>

<img width="523" height="679" alt="image"
src="https://github.com/user-attachments/assets/59057056-5964-4902-bb32-b678333152ab"
/>

</details>

<details><summary>
New vs healthscan
</summary>
<h6>Similar, yes, not identical though. See the PR body.</h6>

<img width="528" height="677" alt="image"
src="https://github.com/user-attachments/assets/e409deee-f327-4bab-a8b3-335999677e08"
/>

</details>
</details>

Now, it's largely comparable to a printed Health Scan. 

It has all its unique features unchanged:
- Colorless advanced health scan (exact numbers of damages)
- Lists all organs/limbs present (even undamaged organs, and with exact
names)
- Shows wound sources
- Lists Chemicals/Diseases in detail

Adds some missing info/QoL to the autopsies:
- Lists Missing Organs (why weren't these listed???)
- Sorts organ/limb lists the same as healthscan
- Shows temperature, genetic stability, and blood alcohol (can inform
how someone died)
- Shows how long they've been dead in realtime (ingame time is neat, but
not at all helpful)
- Ends with a 'Coroner's Notes' section (so the coroner can write info
such as how they think they died)

Still has notable differences, of course: 
- No color (so sad)
- Doesn't list quirks (they are dead their Heirloom is irrelevant)
- No tooltips (it's paper)
- Only possible while dead
- Requires a surgery to get the printout

Hopefully this will give it more usecase outside only boosting surgery
speed. Detectives will appreciate a good coroner's autopsy now.

<h5>(It feels really copy-pastey, but with it mostly just being paper
formatting, I don't know how much CAN be made into unique procs.
Suggestions on how to improve that are welcome.)</h5>

---
Additionally:

**Creates `/mob/living/carbon/human/proc/get_missing_organs()`.** 
Just takes some code from healthscan() and makes it useable elsewhere.
Does what you'd guess. Returns a list of empty organ slots that should
have organs, where key is the ORGAN_SLOT and value is the "name".
**Adds a 'colored' variable to /obj/item/organ/proc/get_status_text()**
Decides if it returns it with color. Autopsies call this with colored
false.
<h6>(See above note about copy-paste. These were two things I could see
that I could minimize copy-paste with)</h6>

## Why It's Good For The Game
These are so fun to do, but are missing **just** enough information to
be kind of irritating without also doing a healthscan.
You shouldn't need to print a healthscan alongside the autopsy, the
autopsy is already the healthscan. _An unhealth-scan, perhaps?_

Hopefully this will make them nicer to use.
_(An autopsy? Not showing missing organs? Crazy.)_

## Changelog

🆑
qol: made Autopsy Reports follow similar formatting to Health Scans, and
adds some information previously missing such as Missing Organs.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-09-10 23:10:08 +02:00
nikothedude
fadbf16e1b Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

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

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

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

<hr>

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-09-08 13:31:21 +12:00
Bloop
5d2102d909 Stops eyelidless corpses from trying (and failing) to blink (#92874)
## About The Pull Request

<img width="1348" height="569" alt="91YPV6s2tG"
src="https://github.com/user-attachments/assets/4c86243e-ac0d-4d39-8646-f55c314bb9d3"
/>

Saw this amusing runtime-dead bodies spawned in the morgue with
randomized injuries have a chance to spawn with eyes that were damaged
so much as to be qdeleted.

The `check_damage_threshold()` proc occurs before the actual damage gets
dealt, so it is possible to enter the blinking procs with eyelids that
have become null. This just adds a safety check for that.

## Why It's Good For The Game

silly bugfix

## Changelog

🆑
fix: dead bodies in the morgue will no longer try to blink
/🆑
2025-09-07 09:39:53 +02:00
MrMelbert
135a09182b Refactors obscured (#92779)
## About The Pull Request

Fixes #85028

Obscured flags and covered flags are tracked on carbons, updated as
items are equipped and unequipped. It's that shrimple.

Closes #92760

Just removes the species exception checks for not making sense

Also refactors handcuffs / legcuffs removal. In all of these situations
they were hardcoded when they could easily just use an inventory proc to
work.

## Why It's Good For The Game

Stops a million excessive calls to `check_obscured_slots`

Makes obscured behavior more consistent

Makes obscured behavior easier to use

Cleans up human rendering (There was some cursed stuff before with
render item -> updated obscured -> update body -> cause side effects)

## Changelog

🆑 Melbert
del: Golems which somehow manage to grow wings and somehow manage to
equip something that covers their jumpsuit can no longer fly.
(Seriously, this will not affect anyone)
refactor: Refactored clothing obscurity entirely. Items should be a
loooot more consistent and what covers what, and should update a lot
snappier. As always, report any oddities, like mysteriously disappearing
articles of clothing, hair, or species parts
refactored: Refactored handcuffs and legcuffs a bit, report any odd
situations with cuffs like getting stuck restrained
/🆑
2025-09-07 09:24:34 +02:00
Rhials
b445cc8f46 Plastic surgery message no longer broadcasts to viewers (#92746)
## About The Pull Request

The message for generating random appearances during plastic surgery is
a to_chat instead of a visible_message now.
## Why It's Good For The Game

The message is directed at, and only relevant for, the guy doing
surgery. This doesn't need to be broadcast.
2025-08-29 15:16:32 -05:00
theOOZ
3db5159e11 Fixes external_bodyshapes not always applying its bodyshape to owner (#92698)
## About The Pull Request

The synchronize procs ran too early and would miss out on the last organ
loaded, which is more likely to happen than you think.

## Why It's Good For The Game

In case TG ever wants to code mask sprites for snouted humanoids, you'll
want this to work.
2025-08-26 16:47:57 -05:00
Lucy
d9da415f44 Nukes get_modified_bleed_rate() and just use cached_bleed_rate instead (#92621)
## About The Pull Request

Port of my changes from [Monkestation/Monkestation2.0@`c54fc87`
(#7295)](c54fc872bf)

This nukes `/obj/item/bodypart/proc/get_modified_bleed_rate()`, instead
everything just uses the `cache_bleed_rate` var - `refresh_bleed_rate()`
will now take into account body position and grasping in the same way
`get_modified_bleed_rate` did.

(Un)grasping a limb already called `refresh_bleed_rate()` anyways, so
the only other change needed was making
`COMSIG_LIVING_SET_BODY_POSITION` also call it.
2025-08-18 20:50:30 +00:00
Thunder12345
260960d6f4 Converts a bunch of time/delay vars to use time defines (#92495)
## About The Pull Request

Converts as many time vars expressed in deciseconds as I could find to
use time defines.

## Why It's Good For The Game

Makes these values neater and more readable.

## Changelog
🆑
code: Converted a lot of time-based variables to be expressed with time
defines.
/🆑
2025-08-12 18:30:25 -04:00
Time-Green
43fc75facb Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-08-11 18:36:50 +02:00
SmArtKar
87e1ef6f64 Changes human name updates to be request-based instead of being automatically done every single tick (#92393)
## About The Pull Request

Changes human name to update whenever anything that could result in
their visible name changing occurs, such as changing IDs, equipping
gasmasks, picking potted plants, etc. Currently name updates occur every
``Life()`` tick and in a few "special" cases, which causes a lot of name
changes from sources such as equipment to not apply until the mob ticks,
and makes us waste a tiiiny bit of CPU time on name updates.
I've also slighly cleaned up human /Life() and made species'
``spec_life()`` not run when the mob is dead, as it was causing certain
unintended interactions, such as slimepeople regenerating blood while
dead.

## Why It's Good For The Game

Microoptimization, ensures that correct names are always used (in case
something could update their name but the mob hasn't ticked yet), plus
its just a cleaner implementation
2025-08-08 13:01:12 -05:00
SmArtKar
3fdc42ba23 Makes Fluoride Stare less of a meme, fixes lizard blinking (#92426)
## About The Pull Request

Buffs fluoride stare to not be completely unplayable, increasing warning
delay from 30 seconds to 3 minutes, and post-warning grace to 30 seconds
from 10, as well as halving damage per second.
Also fixes lizard blinking being horribly broken, made brain damage
properly update eye blinking instead of you having to wait until an
update_body call to get your brain-damaged blinks.
Additionally, fixes a bug where only roundstart eyes would blink, as
#88300's removal of update_body in eye insertion prevents them from
properly updating their overlays when inserted, thus not granting their
owner passive blinking until forced by another source.

- Closes #90269

## Why It's Good For The Game

Fluoride stare was somewhat of a joke quirk, but people liked the
concept, so it should probably not make you blind in the first five
minutes of the round. Original numbers are extremely detrimental and
require constant micromanaging to the point where you can't do any job
whatsoever.
2025-08-07 12:46:54 -05:00
StaringGasMask
8222f59f61 Makes angel wings more maneuverable (#92377)
## About The Pull Request

Increases wing stabilization force for the wings from the flight potion,
allowing much quicker halting.
As a comparison, a single key press used to displace you roughly 5
tiles, after these changes, it will only displace you two.

## Why It's Good For The Game

Newtonian movement made wings hard to maneuver and annoying to use, this
aims to make them more usable.
I'm not sure about how well they'll do in combat, since after this
change you still keep a substantial speed bonus, but to my knowledge it
was like that before and not many people complained. If it becomes a
problem, the speed can be adjusted as well.

## Changelog

🆑
qol: Made angel wings more maneuverable
/🆑
2025-08-06 22:23:12 +10:00
Aliceee2ch
ee07b0ec86 Fixes tier 3 heart doesnt prevent bleeding (#92352) 2025-07-30 13:11:06 +02:00