Commit Graph

15754 Commits

Author SHA1 Message Date
nikothedude 5786289821 [BOUNTY] Dirty quirk (#5186)
## About The Pull Request

Adds a dirty quirk, as requested in a bounty in
https://discord.com/channels/1059199070016655462/1415440129362886727/1415440129362886727.

This quirk does a few things.

1. Walking around, you have a small chance to spread dirt to the floor.
2. If you are barefoot, you track colored footprints that fade out over
7 seconds.
3. If you are attacked, you have a puff of colored, opaque smoke fly off
you. **This cannot be spammed and must be refreshed by digging in
trash.**
4. People around you get a small mood debuff.
5. You get a small examine blurb telling people that you're dirty.

Both the dirt color and flavor text can be customized in the quirk.

If you are cleaned with soap...
1. You scream, flail, and get a -6 mood debuff.
2. **All above effects are disabled.**
3. You can refresh your filth by rummaging in trash

Hygeinebots also always try to clean dirty people.

## Why It's Good For The Game

We have filth goblins on station, and this lets them reflect who they
are mechanically. Its also a small, but minor, way to give janitors just
a bit more things to do - and a small source of conflict where you may
have people running around trying to clean you because god you just
smell so bad.

## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>


https://github.com/user-attachments/assets/6c627e3f-0874-4609-84e8-d7137628ecf1

</details>

## Changelog
🆑
add: Dirty quirk - spreads dirt, makes everyone annoyed at you, defeated
by soap.
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2026-02-02 00:51:17 -05:00
Roxy 6218d1bf22 Turns the widescreen toggle into a dropdown featuring 15x15, 19x15, and (the new) 21x15. (#5166)
## About The Pull Request
Makes you able to see one extra tile to the left/right, making it feel
as if you have a wider screen. But you can also keep the original 19x15
if you want.
## Why It's Good For The Game
I feel like it looks better? Less square? Mode modern and widescreen?
idk. I feel like people will generally like this.

If you think it doesn't look better? stick with 19x15, the choice is
yours.

<details>
<summary>Before</summary>
<img width="1258" height="989" alt="afbeelding"
src="https://github.com/user-attachments/assets/3a7b259c-bd22-4fbd-94f5-6257d2c13772"
/>
</details>
<details>
<summary>After</summary>
<img width="1384" height="989" alt="afbeelding"
src="https://github.com/user-attachments/assets/bdebd573-4920-4cc1-b7be-9d99ef961062"
/>
</details>

## Proof Of Testing
With chatbar because someone told me they were worried the chatbox would
be too small with the change
<details>
<summary>After with chatbar</summary>
<img width="1920" height="1080" alt="afbeelding"
src="https://github.com/user-attachments/assets/55ca42ae-391d-4d38-9069-730669f53c9a"
/>
</details>
<details>
<summary>Before with chatbar</summary>
<img width="1919" height="1030" alt="afbeelding"
src="https://github.com/user-attachments/assets/34b443ea-ffaa-49b7-97d4-baef56f67f01"
/>
</details>

## Changelog
🆑
add: There's a new widescreen dropdown within game preferences, letting
you pick between 15x15 (4x3), 19x15 (widescreen), and 21x15 (ultrawide)
/🆑

---------

Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-01-23 18:31:11 -08:00
Bangle a2524f1f72 My 600-lb Life: How I Learned to Love the Oversized Quirk - Parts 1 & 2 (#5125)
## About The Pull Request
<img width="1263" height="172"
alt="{5D91C818-9014-4A88-B14E-07D1FB415333}"
src="https://github.com/user-attachments/assets/2ac6bb5f-ad79-4449-a3e2-1dd71fb2792b"
/>

> ᴵ ᵃᵐ ˢᵒ ˢᵒʳʳʸ


Hello team! [Bangle here.](https://www.youtube.com/watch?v=idoYCVLh2qI)

This is a two-parter.

### [**Part One: _Big ≠
Blind_**](https://www.youtube.com/watch?v=Q8Tiz6INF7I)
Oversized characters have a fair list of pros and cons. That said, one
con is inherent to Oversized characters that cannot be overlooked: the
cardinal direction that is NORTH. It is not intended gameplay to hit
myself in the face with a PKC because there's a Goliath to my north and
I clicked myself trying to get 'em **because my big dumb head's in the
way.**

So - we've implemented a rendering action that allows your character to
be rendered at 1x size client-side. There's a similar thing on
**SPLURT**, but my implementation is better, because it works with
lights, you just need to move for it to update. It takes a snapshot of
your character and uses the same framework of delusion system to replace
your sprite with this smaller, resized sprite, and changes with
directions, updating every time you do.

As of writing this, I believe **SPLURT**'s implementation does not
update with lights.
<details>

(I was mining in the dark on Lavaland for 50 minutes, lagging my ass
off, and don't intend on going back).

</details>

### **[Part Two: _MY. ASS. IS.
HEAVY._](https://www.youtube.com/watch?v=9DKwJ-yxQpQ)**

Listen, I know it's funny to watch my goofy ass break the fifth chair I
drag my sprite over towards. But, my butt needs a place to rest. Laying
on the ground EVERY SHUTTLE RIDE SUCKS. And you know what?
Proportionally speaking, a table to you is an ottoman to me. Why
pixel-shift my sprite onto it and *pretend* to sit when I can just sit?

And so, we sit.

## Why It's Good For The Game

I'm 12 feet tall, I don't have a blindspot locked cardinally north, and
God damn it, if I can stand on the fucking tables, I can sure as shit
sit on them.

## Proof Of Testing

<details>
<summary>Screenshots/Videos


https://github.com/user-attachments/assets/b058fa9a-690c-4b5e-bd82-43f2b9a219e2

</summary>
</details>

## Additional Note for the Lovely Maintainers

I'm going to be real, I am a buffoon and have zero coding skill. I was
relying heavily on Cursor (AI coding aggregate software) to get this put
together. Do not credit me with anything save for the ideas. While I'd
love to see this added, in the event this disclaimer disqualifies it,
I'm okay with that.

## Changelog
🆑 Bangle
add: Added the ability for Oversized characters to sit on tables. It
just makes sense.
add: Added an action to allow Oversized characters to render client-side
at standard height to see around them.
qol: See above! Literally. You can see above your sprite now.
/🆑

---------

Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-01-17 13:58:51 -08:00
nevimer a9a59ed3f9 Merge remote-tracking branch 'origin/upsteam-12-15-25-revert-unique-reskins'
# Conflicts:
#	_maps/bubber/automapper/templates/centcom/interlink_adminoffice.dmm
#	_maps/map_files/BoxStation/BoxStation.dmm
#	_maps/map_files/generic/CentCom_skyrat_z2.dmm
#	_maps/map_files/moonstation/moonstation.dmm
#	code/modules/holiday/holidays.dm
2026-01-12 22:09:10 -05:00
nevimer a33fd49968 Upstream 12 15 25 unique reskins fixes (#5019)
This branch needs help, tons of datums to make for the customizable
items.

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
2026-01-10 13:14:26 -05:00
LT3 4569cbbb2a Admin create antagonist/re-roll antagonist (#4971)
## About The Pull Request

- Adds a prompt when an admin is removing someone's antagonist datum if
they would like to re-roll for a new antagonist to replace them
- Brings back the Create Antagonist verb
- When creating an antagonist, it tells the admin who was selected

## Why It's Good For The Game

Admin quality of life

## Changelog

🆑 LT3
admin: Admin button in the traitor panel to automatically re-roll
antagonists
admin: Admin create-antagonist verb
admin: Game logs now include what player gets turned into an antagonist
/🆑
2026-01-05 23:37:09 +02:00
Boviro 70e16d7114 Adds a Quirk: "Loose Limbs" That Causes Your Limbs To Fall Off On Death! (#5030)
## About The Pull Request
Full disclosure: This is a PR commissioned by CodeRedAlert on the
discord for 20 USD.

Adds a quirk which causes your limbs (arms and legs) to fall off on
death. This is a feature from the "Cursed" quirk that the commissioner
wanted to see isolated. We agreed that -2 seems like a fair point value
to give it, but this can be open to change, either making it worth more
or less points if the maintainers agree on it.
Tested locally, as far as I know, there are no bugs with it, and it
should not inherit any other of the Cursed quirk.
## Why It's Good For The Game
Adds extra flavor to players who want characters with weak limbs, such
as a piñata character, or a doll.

## Proof Of Testing
<img width="158" height="161" alt="image"
src="https://github.com/user-attachments/assets/f768ffe5-acd0-4861-99ed-d2dab83173fa"
/>

Those limbs sure do come off! Tested locally in a variety of
circumstances to ensure it functions as expected.

## Changelog
🆑
add: New quirk- Loose Limbs!
/🆑
2025-12-25 00:55:18 +01:00
nevimer 1a21687143 Revert "Refactors unique_reskin, deletes retool kit (#93775)"
This reverts commit 6ebfbccebb.

# Conflicts:
#	code/modules/loadout/loadout_items.dm
#	code/modules/paperwork/clipboard.dm
2025-12-15 18:17:06 -05:00
nevimer 684d4d12e6 Revert "Wardens can alt-click-reskin their gloves to match their formal attire (#94382)"
This reverts commit c423d938d3.
2025-12-15 18:16:03 -05:00
nevimer 6e9f2ccfc0 Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
2025-12-15 18:12:29 -05:00
MrMelbert 8c56579c48 Stop drop and roll now has a progress bar (#94465)
## About The Pull Request

While stop/drop/rolling, you have a progress bar which indicates how
close you are to extinguishing yourself

<img width="137" height="106" alt="image"
src="https://github.com/user-attachments/assets/d960329f-1481-4424-8700-fed94439b037"
/>

If you get more on fire while rolling, the bar will recede as well

## Why It's Good For The Game

Some certain boomer players have struggled to adapt to the way stop drop
and roll was changed 2 years ago, moving around without realizing
they're not making progress

Now they have an indicator of some progress

## Changelog

🆑 Melbert
qol: Stop drop and roll now has a progress bar
/🆑
2025-12-14 15:54:29 -05:00
FalloutFalcon d25c6201f4 Standerdizing currency symbols Part 2 (#94259)
## About The Pull Request
Converts almost all non-constant, non-tgui usages of all variantions of
"credit" and "cr"

Everything seems in order, tested most the currencies.
<img width="905" height="119" alt="image"
src="https://github.com/user-attachments/assets/3fa005a7-a114-426c-9646-b81f68bc2dec"
/>
<img width="255" height="128" alt="image"
src="https://github.com/user-attachments/assets/14c83b54-4fd9-4bee-838f-5b1c03939d9a"
/>


## Why It's Good For The Game
Same justification as https://github.com/tgstation/tgstation/pull/94128
Just easier to mantain/adjust the grammer/names of our money
## Changelog
🆑
spellcheck: minor cleanup on some usecases of "credits"
/🆑
2025-12-13 21:00:19 -05:00
LT3 b4f73194d8 Clausophobia mind check (#94433) 2025-12-13 10:44:01 +01:00
Bloop 376588db04 Some list optimizations, heretic ruins optimization (#94386) 2025-12-13 08:27:31 +01:00
Roxy 31cc014826 Adds a key memory for the family heirloom quirk (#94431)
## About The Pull Request

The real reason I made this is because twice now I've accidentally
thrown away my heirloom because it just looked like job equipment, but
some other quirks have key memories and I think it's fun flavor to add
to something like the heirloom quirk because of the significance of the
item to the character.

## Why It's Good For The Game

Carve up the walls with scenes of your character stealing the beloved
family lighter from their ungrateful no-good sibling

## Changelog
🆑
add: Added a key memory to the family heirloom quirk
/🆑
2025-12-12 20:12:34 -07:00
archbtw a0cd0dcc85 [NO GBP] Minor nm oversight (#94417)
## About The Pull Request

https://github.com/tgstation/tgstation/pull/94395

## Why It's Good For The Game

Fix dragged light not getting snuffed out, if the user has another
equipped light turned on (light eater works simultaneously, not per hit)

## Changelog

🆑 ArchBTW
fix: Fix nightmare not properly snuffing dragged lights if other lights
were turned on simultaneously
/🆑

---------

Co-authored-by: glue0000 <230859540+glue0000@users.noreply.github.com>
2025-12-12 18:44:46 -07:00
SyncIt21 f640a0e972 Enhances algorithm for finding an atom mount (#94076)
## About The Pull Request
Depends on #94064 for the unit test but offers a better method for
finding an atom to mount on
- Finding a mount now takes into consideration the objects pixel x & y
offsets meaning diagonal mounting is now supported. Gives great
flexibility for mappers
- If you don't want to use pixel offsets but default back to using the
objects direction that behaviour is still preserved. Useful if your
object uses directional icon states(lights & cameras for now) AND don't
use offsets
- If no direction could be specified then as the last resort it defaults
back to the objects local turf for mounting

## Changelog
🆑
fix: all mounted objects on tables, fences, windows & walls should fall
of correctly when the atom it is placed on is destroyed
fix: security telescreen now falls off when their mounted wall is
destroyed
fix: defib wall mount falls off when their mounted wall is destroyed
fix: floor lights are mounted to the ground/catwalk/tram floor they are
sitting on meaning destroying it will destroy the light
fix: wall mounted plaques now fall off when their mounted wall is
destroyed
/🆑
2025-12-12 12:23:22 -05:00
Alien 9175f53a2e Adds "Department Budget" access that lets you place orders with the shopping app, gives it to warden and cargo techs (#94288)
## About The Pull Request

The "NT Shopping Network" app now checks for if you have "Department
Budget" access instead of command access for letting you place orders
and not requests. All heads, cargo techs and the warden have it shift
start but it can be given to anyone (same as EVA access) and heads of
staff can add or remove it at their access consoles.
Also makes warden start with the app to hint that they have access to
the budget.

## Why It's Good For The Game

The access itself is good because letting heads choose who has access to
the department budget is obviously good.
Cargo techs get it cuz they already have access to it by having access
to the request consoles in cargo.
Warden gets it by default because HOS is usually busy
killing/arresting/patrolling while warden is the one actually managing
brig and the armory. If HOS really hates that warden has access to the
budget they can just remove it on their console.
2025-12-11 19:18:37 -06:00
Fghj240 29c00e597f Hearing protection has a tag and is built in to modsuits (#94262)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-12-11 16:43:38 +00:00
Jacquerel 9fb7c20daa Cargo can buy more presents at Christmas time (#94251)
## About The Pull Request

Last Christmas we had and resolved this bug #88595 where via the
mechanic of buying random trash, Cargo could roll on the roulette to try
and get random Christmas presents and open them for random items.
This was removed because it's not supposed to work that way and was a
way of exploiting Christmas cheer for personal gain, which is grinchsome
behaviour.

That said, being able to order Christmas presents is also kind of
soulful, so this PR brings that mechanic back but on purpose this time.

During the Christmas season _only_, Cargo can spend 3000 credits of
their budget to order a "Surplus Christmas Gifts" crate which contains
4-6 presents _with pre-assigned recipients_.
In a similar system to addressed mail, only the person written on the
gift tag can open the present, so unless you're sufficiently scroogeous
to collect a huge pile of presents on the cargo room floor in hopes of
getting a couple with your name on (in my testing these contained raw
unbaked croissant dough, and a piece of paper from a space ruin) you
should mostly be using this to deliver generalised holiday cheer to the
crew rather than just yourself.



This PR also contains (maybe as more lines than the actual feature) a
refactor changing a bunch of boolean vars on `/datum/supply_pack` into
bitflags, because I needed to add one more and it seemed silly to have
so many booleans.

## Why It's Good For The Game

It allows those with the yuletide spirit to deliver some christmas cheer
to their fellow man, isn't that the season's reason?

## Changelog

🆑
add: When the game considers it to be Christmas, Cargo can order
additional Christmas gifts pre-addressed to random crew members.
/🆑
2025-12-12 02:10:31 +11:00
Zergspower 27551e1caf Tweaks blindness to be more player friendly (#94323)
## About The Pull Request

So something i missed from when i played Goonstation a long while ago
was my blind characters, i tried recreating them in TGCode but found
that the blind quirk here is far more harsh to play visually. So i got
some help from Melbert and got a plan goin and here's the results.


![blinds](https://github.com/user-attachments/assets/d12bd5c1-e0cb-4997-835f-279076c6a665)

Players can see colors! But muted, this change is strictly for visual
enjoyment as the constant monochrome is just - i cant really describe
how much i hate seeing it for more than 15 minutes.

Secondly the flicker is gone from the quirk but remains for all the
temporary blindness, this is 100% Melberts code as they're a helluva lot
smarter than I am and I just nod and smile before pasting it. This did
entail creating a new fulscreen in the dmi, but i just copy/pasted the
existing one and took out the animated frames and named it as 'static'
so it wouldnt interfere with anything else using it.

## Why It's Good For The Game

Playing a blind character is great, however it causes some serious
eyestrain after prolonged playstyle

## Changelog
🆑 MrMelbert, Zergspower
qol: The world is now heavily desaturated while blind, rather than pure
monochrome, to give players some visual stimulus
qol: When blind, the brief flicker of the entire screen now only appears
for mobs temporarily blinded - ie, mobs blinded from quirk / trauma /
genetic mutation no longer experience it
/🆑
2025-12-10 20:42:56 +00:00
Leland Kemble 809cef8ae9 Makes tuberculosis message only tell you to take off your clothes if you have clothes on (#94379)
## About The Pull Request

The clothes-referencing messages within tuberculosis's heating up
symptom are only chosen if the person effected has a jumpsuit on

## Why It's Good For The Game

closes #94350

## Changelog
🆑

spellcheck: Tuberculosis no longer tells naked people to get naked

/🆑
2025-12-10 20:37:20 +00:00
Fghj240 bcdcf311ed Supply pod dismember cleanup and also an e was missing somewhere (#94330)
## About The Pull Request

Supply pod had an unnecessary check because dismember() already checks
for unremovable body parts. Also there was an e missing from sleeping
carp text.

## Why It's Good For The Game

spellcheck, also I left the supply pod stuff out of the changelog
because it isn't player facing

## Changelog

🆑
spellcheck: fixed a missing e in sleeping carp's recall teachings verb
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-12-10 20:16:28 +00:00
Fghj240 10069dbdf8 Updates quadruple amputee message (#94404)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-12-10 11:34:43 +01:00
archbtw e13da48be7 Nightmare's light eater will snuff out dragged lights (#94395)
## About The Pull Request

Fix nightmare not snuffing someone's dragged light.

Nightmare sucks ass, you don't need this to win.

## Why It's Good For The Game

Dragging something should count as a light source since it's an item
you're holding onto
Unintentional/Oversight - Nullifies the intended purpose of nightmare's
light eater
Nightmare is a shite antag due to the plethora of other cheese
strategies that can be used against them. It needs some love.

## Changelog

🆑 ArchBTW
balance: Nightmare's light eater will snuff out dragged lights
/🆑

---------

Co-authored-by: glue0000 <230859540+glue0000@users.noreply.github.com>
2025-12-09 21:51:18 +01:00
MrMelbert c423d938d3 Wardens can alt-click-reskin their gloves to match their formal attire (#94382)
## About The Pull Request

Adds an alt-click skin to the Kaza Ruk gloves which match their formal
attire

<img width="113" height="231" alt="image"
src="https://github.com/user-attachments/assets/5f64d09e-a294-423e-b723-bb094ad49fef"
/>

No new sprites, all it does is apply a color matrix

## Why It's Good For The Game

The only thing that keeps me from taking the formal attire for a spin is
that the gloves don't match.
This is already theoretically possibly by just getting a spray can, but
I figured it could just be an alt-click thing. Seems appropriate.

## Changelog

🆑 Melbert
add: Wardens can alt-click-reskin their Kaza Ruk gloves to match their
formal attire
/🆑
2025-12-09 13:51:07 -07:00
Bloop a9925b2d39 Dev QoL improvements for the materials unit test (#94338)
## About The Pull Request

Just improves the new material unit test, making it more copy-paste
friendly when dealing with large amounts of things to change.

It now also calculates the appropriate sheet material value for you too
so you quite literally just have to copy paste the line and you're done,
no more having to do math yourself.

<img width="2104" height="155" alt="image"
src="https://github.com/user-attachments/assets/b605e423-0418-46b7-b40c-c65fac920af9"
/>


## Why It's Good For The Game

Developer qol.

## Changelog

Nothing player-facing

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2025-12-09 21:48:31 +01:00
Fghj240 e1f5b9edf5 Covering your face stops people from seeing your expression when you're using sign language (#94374)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-12-09 09:53:34 +01:00
necromanceranne 9fb4100405 Mild boxing tweaks (#93963)
## About The Pull Request

Boxing punches no longer halve your damage for using the same mouse
button twice.

Instead, we now have a few different 'combos' based on what mouse and
what hand we use when punching. As in, swapping hands to get different
combos

Left Left/Right Right with matching hand is a straight punch
Left Left/Right Right with the opposite hand is a jab
These moves are just normal punches, though can still apply extra
effects.

Left Right/Right Left and finishing with the matching hand (right for
the former, left for the latter) is the right/left hooks already used.
These do the same as before, but also slow your next attack slightly.

Left Right/Right Left and finishing with the opposite hand (left for the
former, right for the latter) is an uppercut, which has higher knockout
probabilities, but also slows your attack.

Adds some silly extra moves as well. 

Evil Boxing gets Sucker Punch, which is any blow dealt from behind. You
know, because you don't give a shit about being a good person. This can
knock out in one blow (if you're lucky). If the target is grabbed, a
knockout punch will also send them flying backwards. Pretty much only an
evil boxing feature.

Fixes punching mitts talking about rock breaking. Oops.

## Why It's Good For The Game

The damage malus mechanic wasn't super fun to actually do in practice
and messed with people in a way that was hard to understand.

Now, the combos are a little more interactive and there really isn't a
WRONG choice. Just do what seems cool, makes sense to you (left to right
buttons? left to right hand) and it should always work out in your
favour.

I forgot a mild bit of text about rock breaking in the punching mitts.
That's it.

## Changelog
🆑
balance: Boxing combos are now broader and user friendly. Alternating
combinations of buttons AND hands produces different results, but all of
them good. Experiment!
balance: Evil boxing now has a Sucker Punch. Hit someone from behind to
potentially knock them out cold!
fix: Punching mitts no longer mention punching rocks.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-12-08 15:58:06 +00:00
Leland Kemble 162bbaadb9 You can punch meteors (#94347)
## About The Pull Request

With legendary athletic ability or a loaded powerfist or a baseball bat
+ expert athletic ability, you can punch a meteor mid-flight to deflect
in in the **_general_** direction you hit it. There's an achievement for
doing it with just your hands.

## Why It's Good For The Game

No longer do we have to live in fear of these limp lumps of dust. Our
strongest boxer miners and ~sleepiest~ buffest assistants no longer need
to feel helpless as they are barraged, but can stand up and fight for
their beloved Nanotrasen even in the darkest of times.

More interaction couldn't hurt meteors. 

A way to actually directly benefit from emagging meteor shields

## Changelog
🆑

add: Syndicate Powerfist users and our most athletic employees have
discovered that if you punch a meteor with enough force, it can be
redirected.

/🆑
2025-12-07 19:11:35 -08:00
MrMelbert 296f3a7cbd Minor rebalance of blood loss effects / blood regeneration chemicals (#93993)
## About The Pull Request

- Across the board, bleeding wounds cause ~0.85x slower blood loss.
   - Wound clot rate while bandaged has also seen a ~0.85x reduction.
- And slashing wounds have also had their natural clotting rate reduced
by ~0.85x.
- All in all, blood wounds are expected to last marginally longer while
keeping the same level of deadliness.

- Sutures blood flow reduction has been reduced by ~0.85x as well.
Medicated suture is unaffected.

- Blood Mary now scales blood regeneration based on drunkness. 
   - Old: Flat 3 blood/tick.
- 0 drunkness = 0 blood/tick. 40 drunkness = 2 blood/tick. 80 drunkness
= 4 blood/tick.

- Epoetin Alfa saw drastic changes.
   - No longer heals liver damage.
   - No longer adds Sanguirite to the system. 
- Now directly clots 0.1 flow of bloodiest wound (almost effectively
quadrupling clot rate, but 3x less effective than sanguirite)
   - Blood/tick reduced from 3 blood/tick to 1 blood/tick.
   - Now causes minor heart damage (0.2 damage/tick).

## Why It's Good For The Game

- A while back we were talking about how volatile blood wounds were.
Blood wounds are super scary, which is good, but just how scary they
were meant that the extent to which you interacted with this was a bit
stifled. My thoughts are slowing their pace a bit should open up more
opportunities for interaction while keeping them as scary.

- See above.

- Bloody Mary was ridiculously good at healing blood loss, better than
any chemical. The tweak to the effect aims to keep it as a pocket option
for aspiring bartender-alchemists without overpowering other chemicals
in medical contexts.

- Epoetin Alfa is effectively a producible form of Sanguirite which is
something that I believe is not mass producible for a reason (it's
really strong). The changes to it aim to make it a bit less potent that
sanguirite itself while keeping it as a viable blood healing option.
- I understand the liver healing is kinda a real world analog but in the
context of our chemical system, liver damage is something intentionally
not very common. It allows for complete negation of several other chem's
downsides. While I like this form of emergent chem mixing (mannitol and
bath salts, for example), this one earns a "particularly problematic"
badge due to negating 100% of the downsides of many chems.

## Changelog

🆑 Melbert
balance: Blood flow and clotting has universally been slashed by about
0.85x. This means blood wounds kill you slightly slower, but heal
slightly slower.
balance: Sutures now heal 0.85x less blood flow and gauze's clotting
bonus is also 0.85x lower. Medicated sutures are unaffected.
balance: Bloody Mary's blood healing effect now scales with how drunk
you are. Worse in low amounts, better in high amounts.
balance: Epoetin Alfa no longer generates Sangurite. It now directly
clots bleeding wounds (at a rate ~3x worse than sangurite, but still ~4x
better than the natural clotting rate)
balance: Epoetin Alfa no longer heals liver damage.
balance: Epoetin Alfa regenerates 3x less blood. It's still 4x effective
than Saline Glucose or Iron.
balance: Epoetin Alfa now causes minor heart damage (0.2 damage per
tick).
code: All "coagulating" effects now use a shared function. 
/🆑
2025-12-07 22:09:44 -05:00
LT3 1c96273825 Portable crew monitor drag-drop element (#94327) 2025-12-06 16:14:42 -07:00
SyncIt21 a51daf610d Correctly clears hanging_support_atom from atom mounted components (#94295) 2025-12-06 16:13:21 -07:00
san7890 e0827de4b5 [MDB Ignore] Unrestricted Airlocks - Door Delays (#94040)
## About The Pull Request

This PR adds a change to a pretty prevalent feature that's been around
since #66588 (April 28th, 2022). Although it has been controversial to
some extent, I believe that it was a good change in principle for
reasons I will later get into. For now, this is what the PR does:

* All _station_ unrestricted door helpers (e.g. those in maintenance)
have been replaced with a subtype that adds a random 2-3 second delay to
opening the door, using a new "unrestricted latch" feature. **This does
not occur if the user has regular access to that door.**
* The unrestricted side will initiate a do_after and plays a distinct
small hissing sound (because I presume you're disengaging some hydraulic
lever on that side), after which the door will open as players have come
to expect.
* While you're engaging the lever, you will be resistant to pressure
movements as you are presumably holding onto the lever or something. All
other movements (e.g. voluntary, being shoved, etc.) will continue to
function as expected.
* We will statistically tabulate each time someone attempts to use the
unrestricted "lever", and every time one successfully occurs. This is
just for analysis to see player trends as we have lacked this over the
last 3.5 years.

Here's a link to the sound I added:
https://freesound.org/people/Usernameis1337/sounds/632755, the version
in this PR was converted using OGG Vorbis.


https://github.com/user-attachments/assets/4167bda4-63b5-4dc0-a7b2-694a9e3d3201

## Why It's Good For The Game

Back in 2022, I was one of the major proponents for adding such a change
to the game. This is for a few reasons:

* It doesn't really make human sense for a station to have
hallways/spaces that you can enter and then just get completely trapped
in. The station is a deathtrap because of _who_ is on it, not because it
_is_ a death trap. I have always maintained that we should assume that
the station is competently made to give the hijinx a much more jarring
background. To me, maintenance isn't old sections of a station (although
it can have those elements), but vital side pathways in the event of
emergencies, like having extra fire stairs in a building. The doors to
those fire stairs are always unlocked because they need to ensure that
people are able to efflux to save themselves from danger rather than
die.
* It was easily subvertable anyways. You can easily ask the HoP for
maintenance access or AI to let you out of maintenance (although the
latter was a bit harder to articulate). I don't find myself agreeing
with this as much nowadays but I remember the frustration I felt waiting
for minutes for someone to open the door had something occurred for me
to have found myself in maintenance. It's simply not fun and doesn't
make sense for a station to have this.
* I thought that it added a unique element to antagonism. You can't drag
someone in maintenance and then have the whole entire subsection of the
station be your den. It's important for you to secure your base should
you be dragging people in there instead of just always being able to win
via dragging.
* People tend to forget this point, but it actually did cause a lot
_more_ deaths in situations where threats originate outside the
station/in maintenance. It was much easier for the killy-stabby mass
murderers to ingress into main hallways and get to killing faster. This
is why the change felt "equal" in a way.

### Why not remove it outright?

I believe that a lot of balance changes over the last 3.5 years (30000
issues ago!) have been weighting for these interactions, and I think
removing it all cold-turkey like will cause a huge upturn in deadliness
and just not be what players are looking for in the new game loop. To
me, this was a vital step in getting more towards 90-minute rounds, and
I think we would see a drop in that. I also have those above three
reasons that I am still a firm believer in, but I am still interested in
seeing what a different system might entail and how that could play out.
I added stat gathering so after we get 4-6 weeks of data, we can
determine to keep or shelve this feature. I will probably always be on
the "blocking" side of removing it outright unless there's some severe
data that can convince me (which will probably need it's own test-merged
PR, while this is meant to be added into the game right now).

### Why are we changing it?

I think not enough people are dying. I played a few rounds yesterday and
while a decent chunk of people were dying, I saw a few follies in my
original line of thought. Maintenance should be a bit creepier and not
auxiliary hallways (in normal circumstances), I already thought we did a
really good job of that but I noticed that it wasn't as good as memory
served me. I think maintenance should have a little bit more difficulty
to navigate (i.e. if you're being chased down by someone and it's taking
2.5 seconds to open, that would be an excellent heart-pounding tension
moment) and would overall be more interesting than the status quo. It is
a bit sillier to me but some IRL buildings do have to have you hold down
the push bar for a few seconds until it disengages, so this is
agreeable.

I also don't think the unidirectional exit design flow standards are
where they were due to drift in application, so this is also a better
way to uniformly apply it.
## Changelog
🆑
balance: After noticing it was too easy for animals to crawl through
maintenance by abusing the Easy-Exit sensors, Nanotrasen has replaced
all unrestricted door sensors (like in maintenance) with a pull-down
lever that should take around 2-3 seconds to engage. It has been
designed to allow the employee to actuate it despite any pressure
differentials within an area.
balance: The above change does not apply to select doors in the medical
section of the station, which will continue to use the "older"
Ready-Exit system.
sound: In order to ensure that staff in high-traffic areas don't go
bonkers due to this new change, sound dampeners have been installed to
prevent the hydraulics from being heard for super long distances.
However, they skimped out on the quality for the ones in maintenance...
/🆑

FYI Mappers/Tweakers: This PR replaces all station map unres mapping
helpers with the new subtype. You are welcome to replace certain doors
with the old helper (the base type) to get the old behavior as you see
fit, just explain why that behavior is desired in that location.
Otherwise, it would be appreciated if we have this new behavior >95% of
the time.
2025-12-05 21:01:15 -05:00
MrMelbert 8b3619bded Detached storage fix (#94329)
## About The Pull Request

Stuff is not stored in parent

## Changelog

🆑 Melbert
fix: Fix detached storage (modsuit storage)
/🆑
2025-12-04 21:07:32 -07:00
SomeRandomOwl eed95f2a22 Fixes an oversight with the forked tongue (#94303)
## About The Pull Request

It was discovered that if a forked tongue is in an inventory slot, be it
your hands or pocket it gave you lizard speech. This is likely an
oversight that was missed for a long while. It seems likely it is
unintended behavior. This PR just adds a check to in the speechmod to
check if the items is a organ or not.
<details>
<summary>Screenshots</summary>

<img width="734" height="757" alt="image"
src="https://github.com/user-attachments/assets/f42d7993-0fad-4716-a18e-2db168253c98"
/>

<img width="470" height="631" alt="image"
src="https://github.com/user-attachments/assets/c0a4fe07-0e09-4aba-94e5-a62d5c1312ab"
/>

</details>

## Why It's Good For The Game

Less bugs and no silly behavior with a tongue not being inside of your
body.
2025-12-04 17:41:24 -06:00
Ghom 043677c6f6 Storing objects with slowdown in a backpack or belt (or any such storage) now properly updates your speed (#93967)
## About The Pull Request
Another one of those things that I've noticed when playing around with
fish tanks; The slowdown lingered even when the fish tank (which depends
on the total weight of fish inside it) was no longer held and was only
updated another item is equipped or held.

This is because `attempt_insert` doesn't end up calling `DoUnEquip`,
which along with `equip_to_slot`, is one of the cornerstones of the
whole inventory system that we have had for over a decade. Luckily, this
doesn't break things entirely because `item/doMove` seems to have a
fallback, but it only covers held items and only does half of what
`DoUnEquip` does, because it's its own copypaste code, disconnected from
the standard unequip call stack.

I've done some changes to make sure `DoUnEquip` is always called on
`doMove` if we find that the item still has the IN_INVENTORY flag. I've
also updated the code comment for it as well, to emphasize that the
measure is a fallback and not an excuse to call forceMove or Move if we
know that the object is held or equipped on a mob.
If something doesn't work, it'll be likely caught by the CI (it's a core
feature of the game after all) or stack traces.

Also, despite equipment slowdown supporting all mob types, when
equipping/unequipping items it's only applied to carbon mobs. This is
not _strictly_ a contributing factor to the titled issue but it still
limits a balance feature that ought to affect all mobs with hands and/or
equipment slots.

## Why It's Good For The Game
Fixing issues with inventory and storages. Hopefully improving and
modernizing years old code a little.
2025-12-04 17:40:16 -06:00
MrMelbert 0b09dd3472 Let's verify user input on ties that's a good idea (#94307)
## About The Pull Request

`reject_bad_name` on tie names

## Changelog

🆑 Melbert
fix: Tie names are verified
/🆑
2025-12-03 21:17:04 -07:00
necromanceranne 1cda7cedc6 [NO GBP] Fixes a runtime in sleeping carp's dodge code (#94124)
## About The Pull Request

fixes https://github.com/tgstation/tgstation/issues/94123

## Why It's Good For The Game

AAAAAAH
2025-12-03 19:04:46 -06:00
Bloop 7754938c72 Makes a bunch of lists lazy (#94239)
## About The Pull Request

Empy lists. There are a lot of 'em.

<img width="981" height="512" alt="image"
src="https://github.com/user-attachments/assets/b94b041a-2904-466b-ab89-54bd1de11b4e"
/>

Going through ways to reduce memory I found a few easy ones here. Wires,
the edible component, the seethrough component. None of these are really
a concern when it comes to needing lists in memory for performance
reasons. Wires aren't going to be cut most of the time for each door. A
lot of food does not have any junkiness. Seethrough component lies
dormant most of the round. Etc.

Making lists lazy in these cases should be a no brainer.

Everything I tested still seems to work exactly the same.

## Why It's Good For The Game

Frees memory that is just taking up space a lot of the time.

## Changelog

Not player-facing, this is all under-the-hood stuff.
2025-12-03 13:42:16 -07:00
Jacquerel 7a994fffba Pathfinder Module no longer pathfinds (#94261)
## About The Pull Request


![dreamseeker_9pYVx5xTE0](https://github.com/user-attachments/assets/86695b34-deb1-4307-83c8-ecd81b1b6b28)

Removes the "pathfinding through the halls" function of the MODsuit
pathfinder module in favour of having it "fly" to your location in the
same manner as cargo pods (by getting inside an invisible cargo pod).

If it's inside a locked crate or locker when this happens it will break
the door on the way out, so be careful where you leave it.

## Why It's Good For The Game

Mostly because nobody uses the pathfinder module.
Pathfinding through the corridors is _cool_ on a conceptual level but
it's not very practical, _especially_ because it means that it has a
good chance of not functioning at all if you are on a station with Z
levels.
This method means that it will always arrive in the same amount of time
(quite fast, but not fast enough that it will arrive before someone can
shoot you) regardless of where you are when you suddenly realise that
you need spaceproofing rather than drip.

Also Fikou asked me to do it.

## Changelog

🆑
balance: The Captain's MODSuit pathfinder module now flies it directly
to their location rather than physically traversing the halls of the
station.
/🆑
2025-12-03 13:37:35 -07:00
FalloutFalcon 6838a7b580 Scoop water from water turfs (#93878)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-12-03 20:33:32 +01:00
LT3 f24d464abc Updates silent jaws of recovery (#94082) 2025-12-03 11:25:11 +01:00
MrMelbert a0b271d336 Fix Flypeople before anyone realizes they're broken but me (#94264)
## About The Pull Request

After I merged #94200 I realized it blocked all attack hand interactions
on decal which means flypeople would break

Fixes that, adds some unit tests

## Changelog

🆑 Melbert
fix: Fix Flypeople's vomit interaction before anyone realizes it's
broken but me
/🆑
2025-12-02 17:07:20 -07:00
Ghom 0b0c5ea91e Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.

## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.

Currently a WIP as I slowly deal with the unit test reports.

## Changelog

🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
2025-12-02 18:29:01 -05:00
necromanceranne ac6c47f601 Several file changes just to make high frequency blade null rods block mechs, mech melee blocking finally implemented (#94089)
## About The Pull Request

High frequency blades, both null rod variant and admeme variant, can
block mech melee attacks. For the former, that is the only thing it can
block. Great if you're fighting a lot of mechs as a chaplain I guess.
And you're also really committed to the bit.

Weapons that were vibro subtypes are now claymore subtypes. The only
difference here is that they now have 30% block instead of 35% AP.

Null rod high frequency blades are now two-handed. This mostly
determines force changes (10 unwielded, 18 wielded), and mech attack
block chances.

Mech melee attacks respect block...assuming the blocking source can even
block the attack in the first place. Currently, the few sources that can
block/avoid mech attacks are;
- high frequency blades
- energy katanas
- Those staff nullrods (its a holy force field, iunno)
- wizard modsuit shield (and it will eat literally every single charge
it has to do that)
- Sleeping Carp evasion (and only at half the possible chance)
- CQC defense mode (themed as dodging the attack, and also halved)
- probably something I overlooked when I implemented OVERWHELMING_ATTACK
originally and have overlooked here as well.
 
Just think 'could this help avoid being hit by a road roller being
dropped on you' and go with your gut as to whether or not it is
appropriate if you spot something in the wild that seemingly can block a
mech.

## Why It's Good For The Game

> High Frequency Blade

I wanted to elevate the meme and that is as deep as this goes. Also I
wanted to make this two-handed, much like the true version.
The only thing it is lacking is the cool attack functionality, but I'll
be damned if I can get that to work in a sensible fashion for a crew
weapon...

> Vibro subtype

A lot less of these than I thought. And most of them seemed more
appropriate as claymore types anyway.

> Mech Block

I seeded this previously by making mech clamps respect block. I've now
come back to fully implement it in order to facilitate MGR memes.

For the most part, mechs should still enjoy being largely unblocked by
most sources, even from things like operative suit shields, and
certainly not from actual shields (which I've stripped the ability to
block the attack from entirely) and melee weapons.

The sources that can block them do so poorly. Or, in the case of the
high frequency blade, very well and that's pretty much the only thing it
IS good at blocking.

## Changelog
🆑
balance: High frequency blades (both null rod and admin versions) are
able to block melee attacks from mechs.
balance: High frequency blade null rods are now two-handed weapons.
balance: Mech melee attacks can be blocked or avoided by a few rare
sources.
/🆑
2025-12-02 01:13:58 -05:00
Fghj240 37daf7cf6c A new trait that prevents passing out from oxygen damage (#94240)
## About The Pull Request

A new trait, TRAIT_NO_OXYLOSS_PASSOUT, that prevents you from passing
out due to having over 50 oxyloss. Applied by taking nooart and being a
super hulk.

I couldn't replicate it, but if it's still a bug this definitely closes
#92771. Also I didn't remove the line in nooart that constantly removes
the knockedout trait from oxyloss for redundacy reasons. I mean if it's
going to keep removing the knockedout trait from hardcrit every turn
despite having nohardcrit that's probably intentional.

## Why It's Good For The Game

Bugfix I think. Also super hulks are supposed to be immune to everything
stun related and fight on no matter how much damage they've taken, so
yeah.

## Changelog

🆑
fix: Nooartrium patients and super hulks can no longer pass out from
oxygen damage
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-12-01 16:36:20 -07:00
Fghj240 80987cd203 Revolutionaires are happy when heads of staff die (#94232)
## About The Pull Request

If you're a rev and you see a head of staff die your moodlet says
something different and it's +4 instead of -8.

Closes #94217

## Why It's Good For The Game

revs are brainwashed, they shouldn't feel bad about killing heads of
staff
2025-12-01 16:00:39 -06:00
archbtw 10ff097c7c Fix click dragging something onto a tile with a decal (pool of oil/blood, etc) (#94200)
## About The Pull Request
Clicking a floor decal (pool of oil, etc) while dragging something will
move it onto it's tile

## Why It's Good For The Game

Oversight 
Decals are cosmetic - Clicking on a decal should Move_Pulled as intended
Some decals (pool of oil) take up nearly the whole tile - makes pulling
onto that tile near improbable/frustrating in practice
2025-12-01 21:59:49 +00:00
Fghj240 c3edf46e04 Healing virus symptom stuff (#94085)
## About The Pull Request

This PR touches up a lot of the healing virus symptom code, removing
single letter vars and simplifying stuff and the like. It also makes a
couple of small changes.

- Healing symptoms can heal robotic and golem body parts if the virus
has inorganic biology
- Regen coma now activates at damage equal to 70% of your max health
instead of just 70, and the passive messages come after taking damage
equal to 30% of your max health instead of just 30.
- Regen coma checks a second time for TRAIT_NOSOFTCRIT when the coma
activates, so if you inject a penthrite pen within 6 seconds after
getting the warning you'll avoid the coma.
- Toxolysis food scales with the amount of chems purged. If you only
have 0.1 unit of a chem in you you won't get fed as much from it. As a
result, if you have the doubled purging stat threshold you can feed
yourself twice as much.

## Why It's Good For The Game

Code cleanup is nice, regen coma shouldn't be taking you out early while
you've still got some fight left, and I don't think it's supposed to
coma you if you're on penthrite when it happens.
<img width="945" height="431" alt="image"
src="https://github.com/user-attachments/assets/425e8e1b-61d9-4eca-a413-1470ba9752cc"
/>
This was actually the original intention of regen coma checking for
nosoftcrit, it just didn't make it in. [Original
PR](https://github.com/tgstation/tgstation/pull/89072)

Toxolysis food scaling just makes logical sense. Otherwise you can take
a chem patch microdose and become super fat super fast. Doubled food is
fair if you're purging twice as much reagents.

Also currently if you have regen coma and really damaged robotic limbs
you'll just keep going into a coma over and over again forever because
it can't heal your robotic limbs. This can still happen (and should
probably be changed) but at least there'll be a way to circumvent it.

## Changelog

🆑
balance: Regenerative Coma activation thresholds scales with your max hp
balance: Regenerative Coma can be canceled by gaining nosoftcrit before
it activates
balance: Toxolysis food scales with the amount of reagents purged
/🆑

---------

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-11-30 23:44:03 -05:00