732 Commits

Author SHA1 Message Date
Roxy
71faa643bf Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 2025-11-12 16:44:13 -05:00
SmArtKar
3ddab8f729 Fixes luxury paywall laserguns dropping their pins when spawned, refactors them to item_interaction (#93863)
## About The Pull Request

Closes #93839
Also made them use item_interaction while I'm at it

## Changelog
🆑
fix: Luxury paywall lasers no longer drop their pins when spawned
/🆑
2025-11-12 03:26:44 +01:00
MrMelbert
d04e942ede Adds an easy bitrunning domain themed around sacrifing people, also makes digitital beings not care about death (#93546)
## About The Pull Request

1. Adds `Heretical Hunt`, an easy difficulty domain that tasks you with
killing and sacrificing simulated crew members. The domain has a few
ways to conquer it, as you don't need to kill all the simulated crew
members and there's some hidden loot to make use of

It's an easy domain because 
- You have quite decent armor,
- The mobs are pretty unintelligent, 
- You can always fall back and heal passively on the rust tiles
- There are many ways to tackle it

Though it's not a complete pushover, the mobs can still overwhelm you if
you're not careful.

<img width="440" height="347" alt="image"
src="https://github.com/user-attachments/assets/a3f30204-0200-4197-80bb-aee083059164"
/>

2. Virtual beings are given a minor positive moodlet for killing people
instead of a negative one

## Why It's Good For The Game

1. I thought it'd be kinda fun if we had antag-themed domains which
soft-explains the gameplay loops or mechanics of certain antags, in this
case, heretics sacrificing people

2. You don't feel remorse for killing people in video games, right anon?

## Changelog

🆑 Melbert
add: Added a new easy difficulty bitrunning domain, "Heretical Hunt" 
add: Digital mobs receive positive moodlets for killing people rather
than negative
fix: Madness Mask no longer affects corpses
fix: Fixed some heretic runtimes
/🆑
2025-11-08 02:20:41 +01:00
Fghj240
6b2409065a Empaths is now a component instead of a trait (#93680)
## About The Pull Request

Empath has become a component instead of a trait, letting it store
variables or whatever components are good for. Also, it works slightly
differently for empath quirk users and moon heretics alike.

Additionally:
- You can only shiver when you see an evil person once. After that it
won't happen again.
- Empaths no longer get a mood debuff from seeing someone distressed. 
- Moon heretic empaths no longer get smited by evil people. 
- Moon heretic empaths aren't scared of evil people.

The component also supports empaths being able to tell if a fake dead
body is actually dead, and being able to use empath on yourself, but
those aren't enabled for the empath quirk or moon heretics. (Self-empath
would probably powercreep self aware)

## Why It's Good For The Game

While the empath quirk is incompatible with the evil quirk, the trait
wasn't. That means you could potentially become an evil empath and still
feel bad about other people feeling bad and get smited by other evil
people. Being an empath is different from having empathy, and there's
now a personality trait (compassionate) that has a very similar feature
so the mood debuff got axed and moon heretics can't get smited by
mending touch anymore.

I think being a heretic and looking into pierced realities probably
means you have the mental fortitude to not freak out when you see an
evil person. Evil people are (probably) a lot less scary than whatever
mind destroying thing is in those holes.

As for the only-getting-scared-once bit, freaking out when you see an
evil person is flavorful but annoying after it happens multiple times.
Especially if it happens after examining the same person multiple times.
2025-11-06 18:04:07 -06:00
Roxy
d0ca474789 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 2025-11-05 19:43:07 -05: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
MrMelbert
cc936a6547 Removes some isdullahan checks (#93760)
## About The Pull Request

Deletes some `isdullahan` in revival code

## Why It's Good For The Game

I think having snowflake isdullahan checks in core revival code is
ontologically evil

## Changelog

🆑 Melbert
code: Small dullahan code cleanup post Halloween
/🆑
2025-11-03 18:22:01 -07:00
MrMelbert
6395f12833 Adds a rewards bonus for nohitting combat bitrunning domains (#93531)
## About The Pull Request

Completing a combat bitrunning domain grants 0.8 score bonus per player
that escaped without being hit

## Why It's Good For The Game

I figured it be a fun challenge to try to nohit these things, especially
the megafauna ones. For a bonus.

## Changelog

🆑 Melbert
add: Nohitting a combat bitrunning domain rewards a higher score.
/🆑
2025-11-01 13:39:08 +01:00
SmArtKar
1c6c506936 Raptor Rework - Ranching and Companionship (#93564) 2025-11-01 22:13:29 +11:00
NiklasNeighbor
719d42ca1a Laser tag refactor to use components instead of checking for the vest (#93650)
## About The Pull Request
Baby's first refactor!
Originally meant for a downstream, I was told to PR it here instead.
Please do tell me if I did something wrong.
Previously the Lasertag guns would directly check if you were wearing a
vest before dealing stamina damage. Now they instead check for a
component and it's team, which is added by the vest.

## Why It's Good For The Game
This should make it easier to add new lasertag equipment.
It compiles and lasertag functionality seems to remain unchanged from
the player side.
2025-10-31 20:45:55 -05:00
MrMelbert
5cffc0d169 Extremely minor reagent optimization (#93645)
## About The Pull Request

Saves us like, 10,000 - 20,000 lists per round by not initing a list for
every reagent

Uses a signal to handle allergic reactions blocking metabolism rather
than adding behavior `/reagent`

## Why It's Good For The Game

Will it matter? Probably not, is it cleaner? Heck yeah

## Changelog

🆑 Melbert
qol: Tox damage from allergic reactions is affected by tox damage
modifiers
refactor: Changed how allergic reactions to chem pause metabolism,
report any oddities
/🆑
2025-10-29 22:39:48 +01:00
Roxy
e28e9fbdba Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025 2025-10-23 17:38:23 -04:00
Tim
0ee962c4b4 Secure safe, secure briefcase, and vaults improvements (#93085)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-10-20 15:19:58 +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
Roxy
d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04: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
Ghom
4e1eb514b5 Flash and flasher refactor/rework (simple mobs no longer immune edition) (#93076)
Co-authored-by: necromanceranne <40847847+necromanceranne@users.noreply.github.com>
2025-10-15 13:49:11 +11:00
Hatterhat
17303dfe7b syndicate modsuit visor pseudo-toggle (tied to combat mode) (#93391)
## About The Pull Request

The visors on MODsuits using the Syndicate welding visor (now renamed
the "flash-protected optical suite") now toggle their armor booster
overlay depending on whether the user has combat mode on or off.

## Why It's Good For The Game

Style. Listen, man, I just thought it'd be a shame if the cool visor
sprites never got used again.


https://github.com/user-attachments/assets/d5103168-7a1e-4405-adb3-53420c8601d7

## Changelog

🆑
add: The visors on MODsuits that used to have armor boosters now visibly
toggle based on whether the wearer is in combat mode or not.
/🆑

---------

Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-10-13 00:28:39 +02:00
MrMelbert
e85674d366 Unified CMO blues slightly, updates garment bags slightly, updates CMO locker contents slightly (#93321)
## About The Pull Request

### CMO palette update

Before - after

<img width="533" height="324" alt="image"
src="https://github.com/user-attachments/assets/c8a843a6-875d-4796-8c62-d24dd509147b"
/>

Logical follow up to #93313 and #91902

CMO now has a backpack which matches their teal palette rather than
re-using the medical doctor's blue backpack

CMO now starts with white sneakers instead of blue sneakers

### Garment bag update

Garment bags can hold backpacks, duffels, etc. 

However they CANNOT store backpacks which have ANY contents, so no risk
of storage nesting memes here.

### Misc

Removed the defib mount from the CMO's closet

Minor bugfix for being unable to swap storage positions of items which
were instantiated in a storage

## Why It's Good For The Game

- Much like the Paramedic, the CMO has had many cooks which have not
always been on the same page, so this makes their sprite a bit more
coherent.

- Heads with unique packs just tossed them in their closet which is
pretty spammy given we have four variants now. Putting them in the
garment back makes sense.

- Defib mount in CMO's locker hasn't been necessary for a while now that
all treatment centers spawn with defib mounts.

- Bugfix.

## Changelog

🆑 Melbert
image: CMO now has unique backpack/satchel/etc. sprites which matches
their teal palette.
image: CMO spawns with white sneakers instead of blue sneakers.
qol: Garment bags can hold empty backpacks/satchels/etc.
del: Defib mount removed from CMO's locker.
fix: Items stocked in a storage item by default can be
mouse-drag-swapped like any other item.
/🆑
2025-10-13 00:16:49 +02:00
Gaxeer
7468a0fbcf refactor detective scan categories, fix some categories not being shown at all, remove Syndicate scan category (#93138)
## About The Pull Request

Refactor detective scan categories.
Fix some categories not being shown at all.
Remove Syndicate scan category.

<details>
<summary>TGUI</summary>
<img width="514" height="545" alt="image"
src="https://github.com/user-attachments/assets/754ce576-545e-40e5-9fad-86f19d8d2606"
/>
</details>

<details>
<summary>Paper report</summary>
<img width="460" height="609" alt="image"
src="https://github.com/user-attachments/assets/e37e1965-e90a-4e0c-8109-f4384d6a4a79"
/>
</details>


## Why It's Good For The Game

DETSCAN_CATEGORY_SETTINGS, DETSCAN_CATEGORY_HOLY,
DETSCAN_CATEGORY_ILLEGAL and DETSCAN_CATEGORY_NOTES are now shown in
detective scanner ui and printed report.

Cleaner code

## Changelog

🆑
fix: energy dagger pen report will be now shown in detective scanner and
also all items that transform will have additional note about it
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
2025-10-12 05:44:56 +02:00
SmArtKar
4d648d016c Sleeping Carp and Cain & Abel no longer tell you about armor penetration when you reflect projectiles with them (#93275)
## About The Pull Request

Projectile refactor pulled armor check above the pre-hit comsig, this
fixes that. No need to check armor before you're hit when you
potentially will not be.

## Changelog
🆑
fix: Sleeping Carp and Cain & Abel no longer tell you about armor
penetration when you reflect projectiles with them
/🆑
2025-10-12 05:39:43 +02:00
necromanceranne
86c499ebc3 Adds the Jaws of Recovery, a specialized form of Jaws of Life for paramedics with heavier limitations. (#93021)
## About The Pull Request

Adds the Jaws of Recovery, a form of Jaws of Life. These spawn in
cabinets in medical, similar to the fireaxe and mech removal tool.

Jaws of Recovery have two heads; prying, like a standard set of jaws of
life, and bonesetting.

Jaws of Recovery cannot be used to open windoors, and cannot be used to
open certain restricted doors. These doors include command staff private
offices, any command specific areas, AI upload areas and security areas
that aren't the brig entrance.

Jaws of Recovery also send out an alarm whenever used to open a door
that is of meaningful significance, like a departmental area. This does
not happen when opening maintenance airlocks, public accessible doors,
external airlocks and the auxiliary base.

The standard Jaws of Life and Syndicate Jaws of Death are entirely
untouched and function as expected.

<img width="240" height="177" alt="image"
src="https://github.com/user-attachments/assets/4e661720-25c7-42b5-963d-707b77d3683f"
/>


## Why It's Good For The Game

In my last PR I removed the broad access available to paramedics.
https://github.com/tgstation/tgstation/pull/92751
I have already explained my reasoning as to why this broad access is a
mistake. This is not anywhere close to that broad access being returned.
This is a slow, deliberate interaction meant to create friction when
someone is moving around using this tool.

Now, obviously, the change was something of a kick in the teeth for
paramedics (which I won't apologize for doing). I hadn't received any
moderate alternatives that sounded like a good idea for months. That is,
until the PR was merged and someone told me about how paramedics over on
Baystation have jaws of life, but they alert people over the radio when
they are used. Seemingly they were as much worried about paramedic
tiders as we are, and they're a high roleplay environment. We clearly
invited a problem on our end that they had sought to resolve because
they too realized that it was a mistake to just give the role this
access.

Now, obviously, [RETA exists to get medical staff into an
area](https://github.com/tgstation/tgstation/pull/92753). That's all
well and good and I like that system. This does not detract from that PR
whatsoever either. This is meant to serve as an extra emergency measure
in the event a paramedic REALLY needs to get into an area while trying
to create some kind of accountability for their actions by telling sec
when they start being used to pry open airlocks. If sec doesn't like how
much the paramedic is invading areas without reason, they at least know
where and when they've been going into locations and might be
incentivized to go investigate.

## Changelog
🆑
add: Adds the Jaws of Recovery. One can be found in a locked glass
cabinet in medical. These jaws of life are restricted on what they can
force open, and alert security and medical whenever they are utilized to
pry open departmental doors. They can't be used to open high security
doors whatsoever. And they come with a bonesetter attachment instead of
wirecutters. You know, for power-relocating your arm.
/🆑
2025-10-10 16:44:57 -04:00
Ghom
aa4cf2b136 The nullrod refactor (the carp-sie plushie is now actually a plushie) (#93311) 2025-10-10 13:42:33 +11:00
die
0204ab8fdd Canreach refactor (#93165)
## About The Pull Request
ports https://github.com/DaedalusDock/daedalusdock/pull/1144
ports https://github.com/DaedalusDock/daedalusdock/pull/1147

full credit to @Kapu1178 for the juice

instead of `reacher.CanReach(target)` we now do
`target.CanBeReachedBy(reacher)`, this allows us to give special
behavior to atoms which we want to reach, which is exactly what I need
for a feature I'm working on.
## Why It's Good For The Game
allows us to be more flexible with reachability
## Changelog
🆑
refactor: refactored how reaching items works, report any oddities with
being unable to reach something you should be able to!
/🆑
2025-10-07 20:28:59 +02:00
Ghom
f72eb75a6f Handcuffs can now be used to bind certain items (briefcases, toolboxes, etc.) to your hand. (#93305)
## About The Pull Request
Technically, this PR introduces the cuffable_item element and the
cuffed_item status effect and their relative code.

In more player-friendly terms, this allows the ability to use handcuffs
to bind certain items to your hands by right-clicking it with a pair of
handcuffs in your active hand. This makes the item unable to be dropped,
for better or worse, until you or someone else remove said cuffs. And
no, this doesn't conflict with the ability to be handcuffed if you're
silly enough to think that.

There are more than one way to remove the cuffs. For the player with the
item cuffed to their hand, to remove the cuffs they can either click the
status alert, or examine the item and click the relative hyperlink. The
second option is good to have if for some reason the status alert
doesn't show up (too many alerts etc.).

For other people, they can remove the cuffs by opening the strip
inventory menu (the one you open by click-dragging the sprite of person
with the item onto yours). It's an alternative action specific to this
status effect (therefore only held items). Until the cuffs are removed,
trying to remove the item **directly** will bring you nowhere **because
the item is stuck to their hands**, duh. Alternatively you can just chop
their arm off. You do what you do.

For a list of items that can be bound with cuffs (suggestions welcome):
- briefcases
- toolboxes
- lockboxes
- first aid kits
- shields (they generally have handles and all. gameplay-wise they
already take away one hand slot to use. Using cuffs seals the deal: no
swapping items on the go, so no two-handed weapons, but you won't drop
the shield until it's broken)
- jerrycans (Kryson's suggestion)
- soup pots (ditto, kinda weird)
- coffee mugs, and the mauna mug (ditto)
- buckets
- plushes (silly stuff, if you ever want to arrest a plush or test the
feature)
- pet carriers
- mining drills
- swords with closed guards (ERT chainsaw-sword, cap's sabre, parsnip
sabre, cutlass, e-cutlass...)
- crutches and the white cane
- baskets
- flashlights and lamps (not subtypes like flares, glowsticks and
torches)
- TTVs
- chairs

## Why It's Good For The Game
This opens up for some emergent use for handcuffs beside people (or
prisoner shoes). Inspired by a scene of some 1998 action movie, where
one of the bad guys had the mc guffin briefcase latched to his wrist
with a pair of handcuffs.

Codewise, it was also a reason to refactor bits of code like handcuffs
and screen alerts slightly. On a sidenote, actual sprites for
cult/heretic shackles.

## Changelog

🆑
add: You can now bind certain items like briefcases, toolboxes, medkits,
shields, jerrycans etc. to your hand with a pair of handcuffs,
preventing them from being dropped. You can remove said binds at any
time unless incapacitated, and so can others through the strip inventory
menu.
qol: The appearance of a screen alert now updates if the object it
represents (like, an item offered by another player) changes appearance.
imageadd: The shadow shackles item (from cult magic and heretic
sacrifices) now has its own icon.
/🆑
2025-10-07 05:24:20 -06:00
SmArtKar
b99bea96a8 Mining style hotswapping now respects item interactions (#93277)
## About The Pull Request

Hotswapping now hijacks the attack chain in pre_attack rather than doing
so before item_interaction, which now allows players to interact with
items in their inventories (such as stabilizing cores with serums)
without hotswapping the two items.
Also added a unit test to ensure that it works as intended.

## Changelog
🆑
fix: Mining style hotswapping now respects item interactions
/🆑
2025-10-07 02:43:07 +02:00
xPokee
5e629dff04 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-10-03 07:05:54 -04:00
MrMelbert
3ea7b03369 Accentuate the positive with **Personality**: A (soft) mood rework (#92941)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-10-02 19:00:13 +00:00
Ghom
a28575aa82 [NO GBP] Fixing more issues with sand (you can make sand walls again, also ghost glass sheets?) (#93215)
## About The Pull Request
Apparently wall construction code is snowflaked and indented as fuck
(and the same goes for door assemblies). I'm not bothering refactoring
everything with them, only to reduce the indentation, changing a couple
vars and overall making it easier to work with them later. This includes
wall construction not being hardcoded to sheets but include the
possibility to use other kind of stacks as well (if you don't count the
snowflake interaction with iron rods). In layman's terms, this means you
can make walls made out of sand (distinct from sandstone) again.

Also I've done some small changes to the materials storage, so that it
can eject ores too if the material doesn't have a sheet type.

Also, I've been told there may be issues with broken, uninteractable
(probably not properly initialized) glass sheets beside the ORM. I'm not
100% sure about the deets, but it may have something to do with spawning
the glass on the same turf the ORM is listening to, when smelting sand,
causing some race conditions, so let's spawn it in nullspace

## Why It's Good For The Game
While I'm sure there may be more elegant solutions (just take a look at
the wall and door construction code, they both use text2path oh god!),
I'm just here to make things a lil' cleaner and be done with issues with
the fact that sand is made of sand.

## Changelog

🆑
fix: You can once again make sand walls.
fix: Deconstructing an autolathe with sand in it should now drop sand.
/🆑
2025-10-02 19:12:11 +03:00
SmArtKar
5f3c85eee0 Unifies mob, megafauna and boss crusher loot and achievements (#93068) 2025-09-30 17:24:34 +10:00
SmArtKar
5227e3e333 Reworks the mining MODsuit (#92948)
## About The Pull Request

Slightly reworks the mining MODsuit to be more distinct from other
mining gear and have its own designated role as an exploration and
mining tool.
- Base armor (when covered in ash) has been reduced to 50 from 60, being
equal to that of an explorer suit with two goliath plates attached.
However, entering the sphere mode will grant additional 20 armor,
bumping it up to 70 (equal to that of a H.E.C.K. suit)
- Integrated drill no longer mines instantly by default, instead having
a delay of 0.25 seconds. However, when entering the sphere mode, the
drill will overcharge and get back its instamine, as well as get halved
power consumption. Currently, those two are mutually exclusive, and the
drill cannot be used in the sphere mode.
- Mining bomb cooldown has been reduced to 1s from 1.25s. They also now
detonate much faster, and the detonation time matches their animation.
The digging radius has been reduced back to 3x3 from 5x5, and their
damage has been reduced to 28 from 48 to compensate increase in firing
speed and reduced detonation delay making them much easier to use
(functional DPS has been reduced from 36 to 28)
- Rewrote ore bag a bit to try and make sure it doesn't break when
depositing ores into the ORM. I only have faint suspicions of this being
possibly being caused by ore getting deleted and leaving a null in the
list, so removing it should hopefully? stop the bag from breaking.
- The 0.25 slowdown is back, but it should be less of a problem
considering that the sphere mode now is a much more viable traversal
tool and not an utter joke aside from lava traversal.
- The MODsuit now comes pre-equipped with a magnetic harness, which is
now capable of stowing kinetic crushers in addition to guns. This should
make using the sphere mode less of a pain in the ass, as you won't drop
your weapon whenever you enter the sphere mode before you remember to
put it in your suit storage slot. The delay on harnesses has also been
reduced to 0.5 seconds, which should make them more comfortable to use,
while still allowing someone to grab your gun if you're not careful.
- The sphere mode can no longer traverse lava roundstart, instead
requiring to be upgraded with two pieces of bileworm skin to get
lava-resistant plating. This is meant to work together with #92877,
being a part of ongoing effort to bring mining back in terms of speed
and action level, reducing mining and exploration speeds in favor of
higher ore spawns and more focus on gear and equipment progression.

<img width="92" height="98" alt="image"
src="https://github.com/user-attachments/assets/740ab28d-210d-4832-ba07-00dbd8680491"
/>

Additionally, both the mining drill and green raptor bumpmining has been
nerfed (technically fixed, practically nerfed) by removing the diagonal
movement... thing which allowed you to mine thrice as quickly and ignore
the one-tick movement delay due to how diagonal movement works.


https://github.com/user-attachments/assets/711e895f-e7e7-4cd9-b484-d7d11ff597af

Its still fast and comfortable to use, just not absurdly fast.

## Why It's Good For The Game

The mining MODsuit is in a very weird place both balance and progression
wise. Its very easy to get if you ignore vents, it has good armor stats,
it allows you to partly ignore being set on fire (or fully if you get
the regulator module, but that requires more effort). I don't think that
the buff was very needed, it was very strong as-is when used properly
(with a yellow or green raptor mount) which not a lot of people seem to
have realized.
However, its still in a pretty pitiful state as its core feature (sphere
mode) is nigh useless as the drill only works outside of it, and mines
themselves are extremely clunky and uncomfortable to use. This leaves it
only being useful for its cheap armor (without needing to kill
goliaths), free GPS and ore bag that don't occupy your pockets, and
ability to ignore environmental hazards.

The solution I've decided to go with is reworking the MODsuit to be
focused on mining and exploration rather than combat, being a good
equipment piece for newer players and miners less interested in hunting
megafauna. This carves the MODsuit its own niche rather than being
weirdly slotted between base suits and contending with drake armor in
terms of stats/effects.
Roundstart lava crossing capabilities removal alongside bumpmining nerf
is somewhat unrelated to the rest of the changes, it is a part of the
exploration rework alongside #92877, which is intended to force miners
to engage in combat more. Without the nerf, the suit is as fast as a
yellow raptor, which lets it go through lavaland at absurd speeds when
moving diagonally. (Yes, diagonal zig-zag movement ignoring the bump
delay allows you to outspeed someone moving cardinally)

More details about the project can be found in this [design
doc](https://hackmd.io/@smart-kar/HkUINgBtke). The instamine ability of
the sphere will likely get slightly nerfed in the future with the main
batch of ore spread buffs and mining speed nerfs, but I've left it as
powerful as a green raptor to not make the suit useless when compared to
other options in the meantime.

## Changelog
🆑
add: Mining MODsuit has gained a magnetic harness for all of your
crusher stowing needs.
balance: Magnetic harnesses now take only 0.5 seconds to pick up your
gun, and can pick up crushers.
balance: Mining MODsuit has regained it small slowdown, and lost 10
melee armor.
balance: Mining drill MODule is no longer instant (outside of the sphere
mode of a mining MOD)
balance: The mining sphere MODule now can break rocks when rolling into
them, gives 20 melee and bomb armor when active, and has a shorter bomb
cooldown, but bombs themselves have reduced damage and mining AOE.
balance: Mining sphere MODule now requires an upgrade in form of two
pieces of bileworm skin to be able to traverse lava, as opposed to being
able to do so innately.
fix: Fixed MODsuit ore bag sometimes breaking permanently when
depositing ores into the ORM.
/🆑
2025-09-29 01:34:41 -04:00
xPokee
b308ee9d78 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-24 10:13:01 -04:00
SmArtKar
7601d66a96 Refactors immerse element to use alpha filters instead of static overlays (#93038)
## About The Pull Request
Immerse element now uses an alpha filter rather than a vis_contents
object, which allows them to be much more smooth and seamless. There's
no longer a visible contour on fully opaque liquids, nor a janky effect
when you move in a liquid. This also fixes the broken fluid animation,
so now it actually has a bit of a wave to it.

<img width="179" height="183" alt="dreamseeker_PDjP1zyMRl"
src="https://github.com/user-attachments/assets/7c1bbefe-0e97-456e-a303-c34e6a1a238a"
/>
<img width="177" height="180" alt="dreamseeker_hGjKOyBL8f"
src="https://github.com/user-attachments/assets/6c3bc33f-a22c-452a-beb0-9dd44b080a7c"
/>

<img width="152" height="162" alt="dreamseeker_Et3eRd3NF6"
src="https://github.com/user-attachments/assets/1478aaba-d345-44de-8baa-9d0da0bc9d1c"
/>
<img width="185" height="182" alt="dreamseeker_5Iok1lUni2"
src="https://github.com/user-attachments/assets/4ac5fea4-24a7-46c2-b475-4445a43493b4"
/>

The code is immensely cursed in some places, ideally this should not
have to use vis_contents whatsoever but BYOND seems to be intent on
causing memory leaks whenever you try to set mutable's render_target to
an interpolated string, so I'm using a VIS_HIDE object as a relay for
the filter for the time being.
I've ended up changing some mob pixel_y offsets to pixel_z (as they
should've been from the start) to account for this (the logic is being
that pixel_y is "physical" position on the turf, while pixel_z is how
high above the turf something is)

## Why It's Good For The Game

The effect is less jank and looks cool.

## Changelog
🆑
refactor: Refactors immerse element to use alpha filters instead of
static overlays. It should look much prettier now.
/🆑
2025-09-21 15:01:40 +02:00
MrMelbert
4a618934e9 Removes message arg from Hear, free performance (#93020)
## About The Pull Request

The first argument of `Hear` is `message`, the message heard

OR SO YOU'D THINK

Actually the first argument doesn't do anything but get overridden by
ALL implementations of `Hear`

No other uses as far as I and Ephe can tell. Removing it makes it a ton
easier to understand and gives us some free performance in radio code by
not rendering messages twice

## Changelog

🆑 Melbert
code: Removed some redundant code from core hearing code. Report if you
hear anything weird.
/🆑
2025-09-20 12:29:40 +02:00
xPokee
9b282a850e Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-17 11:45:44 -04: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
xPokee
939f2fc9ac Merge branch 'master' of https://github.com/tgstation/tgstation into xpokee-test-upstream-sync 2025-09-10 14:12:16 -04:00
nikothedude
ee99d0e5b0 Asthma quirk, inhalers - Electric Boogaloo (#92747)
## About The Pull Request

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

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

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

<hr>

<details>
  <summary>Details</summary>

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

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

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

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

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

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

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

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

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

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

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

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

</details>

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

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

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

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

---------

Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
# Conflicts:
#	code/datums/quirks/negative_quirks/allergic.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
2025-09-09 23:24:54 -04:00
Ghom
c274677cfd glass ore (aka sand) is now actually made of sand (#92889)
## About The Pull Request
sand blocks existed for the only purpose of making sand available as a
material. However, the only method to get them was pretty whimsical and
the existence of the feature wasn't really conveyed to the player, which
involves rinsing regular sand in a sink... and before you ask, we also
have sandstone, which can be crafted just by using the sand in hands, no
water involved. In fact, the sand blocks use the same sprites for
regular sandstone, except they have no recipes associated to them,
nothing! Nada!

Let's address the elephant in the room: We already have sand, however
said sand already has the glass material attached to it even before
being smelted, so if you put sand into the Autolathe, you get glass,
yay. Sand blocks really only existed to make up for the shortcoming of
whoever coded the sand material at the time.

But enough ranting. As the title says, sand is now made of sand, sand
blocks are kill. I've been careful enough to give the ORM the ability to
smelt gathered sand into glass beforehand, so miners won't curse me for
making them _actually_ use the smelter for once, "I will rather die to a
goliath than have anything to do with that". However, this still means
you cannot shove sand directly into lathes and expect glass out of it.
Get a welder.

## Why It's Good For The Game


## Changelog

🆑
balance: sand is now made of sand and not glass. Get a welder if you
plan to shove it into a protolathe.
del: Removed now useless sand blocks.
/🆑
2025-09-09 15:08:45 -04: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
sushi
d19856e2b7 Fix element/elevation failing to clean up its element/elevation_core from turfs when deleted before Moved is invoked on its source (#92860)
## About The Pull Request

* Fixes https://github.com/tgstation/tgstation/issues/92759
* Fixes https://github.com/tgstation/tgstation/issues/81474

The problem is that things like the recycler and bitrunner goal hole
react to the crate Enter'ing them, and within their
`COMSIG_ATOM_ENTERED` handlers will just outright delete the crate.
However, `COMSIG_ATOM_ENTERED` is raised _after_ the crate's `loc` has
been set, so upon its deletion the `element/elevation` that was attached
to it would `Detach` and attempt to remove the `element/elevation_core`
that it had attached to its turf, but will try to do so at the turf it
was moved to, not where it was moved from. Thus, the
`element/elevation_core` would be left on the tile and would still
elevate mobs that moved onto it even though the crate was no longer
there. The second issue linked above goes into more detail about the
bitrunner crate case showing code and such.

This pr attempts to solve this by introducing a new signal,
`COMSIG_ATOM_EXITING`, which is raised in the same fashion as
`COMSIG_ATOM_ENTERING`. It also splits `element/elevation/on_moved()`
into `on_source_exiting()` and `on_source_entering()` so that
`elevation` removes its `elevation_core` from the turf it was on
immediately, before anything has a chance to delete it upon it entering
something.

I'm not TOTALLY confident in this being the proper way to go about this,
but made sure that overlapping elevation things still interact like they
used to, that the `elevation_core` is properly removed upon falling into
a chasm and when entering wormholes, and most importantly that the two
issues listed above no longer happen. This could still be an issue if
there's anyway in game to get an atom to move w/o it going through
`doMove` and raising the ENTERING and EXITING signals so let me know if
there's anyway this can happen!!!
## Why It's Good For The Game


![dreamseeker_8aiK7O3L10](https://github.com/user-attachments/assets/cd5d9439-2851-4d07-9ad8-090edbb533df)

vs


![dreamseeker_SpX6NtHtQG](https://github.com/user-attachments/assets/f15e5572-82a2-4dea-aa9f-7d1a1b455fb3)
## Changelog
🆑 sushi
fix: crates and other objects causing elevation will no longer leave
behind magic elevating turfs upon destruction
/🆑
2025-09-07 09:39:16 +02:00
Leland Kemble
b5313bac34 Makes the arcade machine experiment succeed on game completion rather than item vending (#92857)
## About The Pull Request

Previously, the arcade game win experiment succeeded upon the machine
calling `prizevend()`, meaning the experiment completed upon tickets
being inserted into the machine, counter to the experiment's text. This
pr changes the experiment to succeed upon the machine calling the new
`victory_tickets()`, which has replaced each instance of a won game
dispensing tickets.

## Why It's Good For The Game

fixes #80218
Standardized ticket dispensing

## Changelog
🆑

fix: Arcade machine experiment now succeeds on output rather than input
of tickets

/🆑
2025-09-07 09:10:50 +02:00
nevimer
b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
Y0SH1M4S73R
f8511ea227 You can install B.O.R.I.S. in circuits with MMI components (+other MMI component changes) (#92002)
## About The Pull Request

This PR adds the ability to install a B.O.R.I.S. in a circuit that
contains an MMI component. These circuits can then be remotely connected
to by an AI by clicking on them or anything they are inside of. To
indicate that a circuit allows remote AI connection, an indicator is
given to the circuit and anything containing it.

Additionally:
- Refactors the MMI component to use `item_interaction`, since it was
pertinent.
- You cannot insert an MMI/B.O.R.I.S. into a locked circuit.
- You can no longer hotswap MMIs/B.O.R.I.S.es - you must manually eject
the inserted one.

Let me know what changelog labels I should use for the hotswap removal
and the prevention of insertion into locked circuits.

## Why It's Good For The Game

If you can put an MMI or posibrain in a circuit, why not allow an AI to
use it using a B.O.R.I.S.?

## Changelog

🆑
add: B.O.R.I.S.es can be installed inside of integrated circuits with
MMI components, allowing an AI to remotely interface with them the same
way an MMI or posibrain could.
refactor: The MMI component now uses item interaction behavior for
inserting MMIs/B.O.R.I.S.es.
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-09-03 23:25:50 -07:00
Ghom
3ea1eb101e [NO GBP] Fix to burned mess (#92684)
## About The Pull Request
#92394 did more harm than good.

First, only the microwavable element transferred reagents even if the
result was a burned mess (in general, a non-positive one), while
grillable and bakeable comps didn't... but that's because I've
overlooked a few checks that skipped the "transfer reagents to the
result" step, which the microwavable element also has, though it stopped
working as intended after I messed with it.
However, I think it's stupid for bad recipes to have a static amount of
"bad food" reagent in them, and overcooking a whole cake shouldn't yield
the same reagents as a bag of chips burned to a crisp, so I scrapped
those damn bad_result checks, and finally let the burned mess item
itself handle converting the consumable reagents into "bad food".

Second, examining most food items no longer tells you that you can make
a burned mess if you microwave it.

## Why It's Good For The Game
This fixes the above issues.

## Changelog

🆑
fix: Examining most food items no longer tells you that you can make
burned mess by microwaving them.
fix: Burned mess now has "bad food" in it more or less proportional to
the nutrients of the item you just overcooked. This also applies to
decomposition now.
/🆑
2025-09-03 04:39:43 -07:00
tonyhawq
64af7e953d Adds back mounted wind turbines (#92516)
## About The Pull Request
Adds portable wind turbines that can be put in your back slot or
anchored to the ground. They accept a cell-powered item and charge it
while you walk, or when space wind passes over them. Can be purchased
for 400 credits or crafted with 3 kitchen knives, plastic, and servos.
Requires a capacitor to charge things, and higher tiers charge faster,
faster walkspeed also charges faster.

<img width="592" height="644" alt="im222age"
src="https://github.com/user-attachments/assets/e9997536-5ee0-4417-a31c-cb58666d4d07"
/>


https://github.com/user-attachments/assets/1cf7fce5-d385-4e3e-be97-fb15e253c308

## Why It's Good For The Game
Sometimes you don't have a cell charger. And you need to charge
something. Now you can charge something by running laps around the
station.
During a blob, rechargers are brought to the front lines to charge
energy guns and such but what if the blob turns off the power? And what
are bar-rp'ers to do? Kill two birds with one stone by having them run
laps instead of sitting around doing nothing.
Also its funny.

## Changelog

🆑
add: Added a portable wind turbine which can charge things when you walk
around
add: Added a signal that procs when an object resists space wind (from
being anchored / pulled)
sound: added woosh.ogg as a low "wooshing" noise
image: added a wind turbine sprite
/🆑

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
2025-08-31 21:13:11 +00:00
SmArtKar
93b7faec7f Fixes chasm jaunters not working while you're buckled to a mob or an object (#92693)
## About The Pull Request

Now all mobs are unbuckled from falling objects and dropped
individually, similarly to how lava functions. Also updated jaunters to
be comsig-based rather than chasms snowflake checking for jaunters in
belt slots.
Closes #92663
2025-08-26 16:49:39 -05:00
MrMelbert
59f8de91dc Adds 5 Bond-tier gadgets to the Spy's reward pool (#92481)
## About The Pull Request

1. Penbang

A flashbang disguised as a pen. Clicking the pen arms the flashbang and
has no other visual or audio tell besides the pen clicking.
The fuse's length is based on the angle the pen cap is twisted. 
Works as a normal pen otherwise.

2. Camera Flash

A camera with a high power flash. 
Clicking on an adjacent target will flash them, ie, as a handheld flash.
Works as a normal camera otherwise - no tell.

3. Dagger Boot

A pair of jackboots with a blade embedded in them.
Makes your kicks sharp, meaning they will cause bleeding.
Looks like normal jackboots otherwise, though has a tell on
double-examine

4. Monster Cube Box

A box containing 5 monster cubes, which spawn into a random monster when
wet.
Monsters include Migos, Carps, Bears, Spiders, Wolves...

5. Spider Bite Scroll

A martial art focused around kicks and grabs. 
- Punches against standing, staggered targets will instead kick them,
applying the bonus accuracy and damage that you'd expect from a kick.
(Also combos with the dagger boots)
- All kicks have a chance to disarm the target's active weapon. Chance
increases per sequential kick.
- Grants you the innate ability to tackle. This form of tackling has a
very high skill modifier, meaning you are very likely to get a positive
outcome (or at least, not fail). You also get up fast from it.
- Your grabs are 20% harder to escape from and deal an additional 10
stam damage on fail.

## Why It's Good For The Game

1, 2, 3: Just some random flavorful items, giving them some more toys to
use to complete bounties.

4: Shenanigans, for people who just wanna do "funny thing" instead of
focusing on big loot.

5: I figured it would fill a fun niche: Spies are commonly depicted as
martial artists, and the only martial arts they can obtain is Krav Maga
(it's not unique to Spies) and Sleeping Carp (it's not unique to Spies).
This gives them their own thing that people may look forward to
acquiring and playing around with.
As for the design of it, I wanted to add something that synergizes with
one of the other other items, so in the field if you notice both of them
pop up you really want to go for both.
The rest of the design I just filled in as vaguely useful and flavorful
tools a spy might want for kidnapping or detaining people: Better grabs,
tackling, and disarms.
Then I just went with the flavor of it being something the Spider Clan
used to teach to their Spies / Ninjas, kinda like an analog to the real
life Ninjutsu. (Maybe we can give it to Space Ninjas as well later...
since it doesn't especially benefit Ninjas in any way.)

## Changelog

🆑 Melbert
add: Adds 5 rewards to the Spy item pool: Penbang, Camera Flash,
Dagger-Boot, Monster Cube Box, and the Spider Bite martial art
/🆑
2025-08-26 10:22:11 +10:00
_0Steven
edb85b2d0c Refactors say modes and custom say verbs. Extends custom say verbs to more situations, forwards more spans. (#92127)
## About The Pull Request

Oh man, so this entire pr started because of two things:
1. A kinda hacky fix to #92123 that got closed a good while ago.
2. A borg I know mentioning you can't do custom say verbs over robotic
talk.

Which subsequently led me down this rabbit hole of say modes and custom
say verbs.
So! The most wide-reaching thing this does is merge the custom say
verb/radio emote logic that used to be specialcased in
`compose_message(...)` into `say_quote(...)`, renaming this to
`generate_messagepart(...)` with its new functionality. This means
things that don't use the exact same chain as living things talking
normally can still generate custom say verbs if given that message
modifier.

Then, we split up say modes into a "can we do this" and "try to do this"
check to reduce conflicts (like #92123), and forward more of our data to
the latter. This allows us to then edit the say modes to actually make
use of that data, and with the previous addition of
`generate_messagepart(...)` allow for custom say verbs to be used.

In doing this I realized the logging was kind of awkward and all over
the place, so we create the new logging helper `log_sayverb_talk(...)`
which handles selecting how we should log things based on the given
message modifiers.

For better or worse I forgot about this pr for a few weeks, so I don't
perfectly remember all the details, but those are the big key parts.
## Why It's Good For The Game

Fixes #92123.

I think custom say verbs are some of the best flavour we have for
talking over radio, and any situation benefits from that being possible.
It's great to be able to tap your microphone, and it's hilarious for an
AI to be able to emote beaming an image directly into the heads of their
borgs over robotic talk.

The rest is mostly cleanup.
2025-08-19 22:35:54 -04:00
Ghom
7ff0a19883 Burned mess from culinary disasters is once again toxic. (#92394)
## About The Pull Request
When an item is cooked, reagents are generally cleared from the
resulting object and the reagents of the source object are transferred
to it instead. This means burned mess won't have its toxins when cooked,
locking you out of one or two chemistry recipes that require it while
also making the item generally not toxic at all.
So to fix it, we simply have to replace all or most of the consumable
reagents inside the burned mess with bad food, via component signals.

## Why It's Good For The Game
Fixing an issue with food and chemistry.

## Changelog

🆑
fix: burned mess made with a microwave, oven or griddle once again
toxins.
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-08-19 22:30:38 -04:00