Commit Graph
62599 Commits
Author SHA1 Message Date
_0StevenandGitHub e34504c5e3 Fixes two books creation bugs: trimming and newlines. (#95704)
## About The Pull Request

### Trimming

So as per #89165, paper below 5000 characters was getting cut off
despite being below the cap.
This seems to have been happening because of the following code:

https://github.com/tgstation/tgstation/blob/d8774f4c4176f09463457f04905570923b27b3de/code/modules/library/book_info.dm#L44-L50
Paper uses the raw text for its count and handles pen
color/font/boldness/such tgui-side, but books first expand that html
dm-side AND then encode it, significantly increasing the amount of
characters before trimming occurs.
This, obviously, leads to characters getting cut off!

Buuuuuuuut not trimming it at all isn't perfect. We know paper *should*
trim it, but we also know that's not gonna be all paper. There's gonna
be paper where it's inexplicably past the 5000 characters cap.

So, instead we use a second more lenient book limit, right now defined
as 2x the paper limit, which should stop the worst cases without
breaking for the best cases.

### Newlines

Second bit! Paper stores each writing attempt as a separate thing, but
turning them into books collapses these:

https://github.com/tgstation/tgstation/blob/d8774f4c4176f09463457f04905570923b27b3de/code/modules/library/book_info.dm#L46-L48
This, however, doesn't account for the part where paper tgui inserts
newlines between these inputs:

https://github.com/tgstation/tgstation/blob/d8774f4c4176f09463457f04905570923b27b3de/tgui/packages/tgui/interfaces/PaperSheet/Preview.tsx#L317-L318
Which book tgui doesn't! Cause it's just one big glob of text, not
separate entries.
Which in turn means paper written with multiple entries just... has all
of these put on the same line, which sucks.

So we make the paper entries collapsing actually add newlines the same
way, fixing our issue.

### Nitpicks

...We also change the `to_raw_html(...)` proc to re-use the same
`<font>` tag. Regrettably, we can't use the exact same setup as
paperwork uses on its tgui side because it uses `style` which would get
sanitized out, but there's no reason for us to double the amount of
characters behind the scenes by using multiple layered `<font>` tags for
no reason.

***Ideally*** I feel books and paper should just use the same tgui
systems, but I sure as hell wouldn't know how to do that without
breaking everything including old books, with how fickle paperwork code
already is.
## Why It's Good For The Game

Fixes #89165.
fix jank 👍
It *really* sucks when you make a book below the 5000 character cap, but
it somehow hits the character cap and gets trimmed anyway. I feel the
books using static ui data should avoid this being horrible.
## Changelog
🆑
fix: Books no longer get trimmed below the paper length limit.
fix: Books made using paperwork created with multiple inputs no longer
put all that text on the same line.
/🆑
2026-04-17 13:04:32 +02:00
aca32f38af [NO GBP] Kitsune Mask no longer hides the user's identity while flipped (#95788)
## About The Pull Request
I forgot to add an ``inv_flag`` for when it's used in hand to flip so
it'd always keep the wearer's identity hidden even if their face were
pretty much exposed

## Why It's Good For The Game
Fixes an oversight of mine, the mask pretty much reveals your face when
flipped so it shouldn't keep the wearer's identity hidden

## Changelog
🆑 Hardly
fix: Kitsune mask no longer keeps the user's identity hidden while it's
flipped
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2026-04-17 13:00:48 +02:00
MrMelbertandGitHub 05b7ce90ff Adds Lawyer/HoP/QM/Spy unique traitor item, the briefcase firearm mechanism (#95607)
## About The Pull Request

Lawyers, Quartermasters, and Heads of Personnels can now purchase a
`"Briefcase Embedded Firearm Trigger"` from the traitor uplink for 4 tc.

The briefcase looks like a normal, unassuming briefcase - But when any
weapon is placed inside, you gain the ability to "fire" the briefcase,
which *actually* fires the weapon.

Only the first weapon found is fired, even if it's empty.
So while you CAN put 5 pistols inside, you'd have to cycle them in and
out manually.

This works with *any* weapon that can fit inside the briefcase, which
essentially restricts it to pistols and some laser weapons.
*No*, sniper rifles won't work in the briefcase. (You can't use it to
bypass weapons that require two hands.)
*Yes*, you can also handcuff the briefcase to your wrist as normal. (Who
knows what this will allow.)

---

Also purchaseable is an 8tc `"Briefcase Embedded Firearm (Combo Deal)"`,
which comes pre-loaded with a Makarov and 0 magazines.

This variant is also available to all Spies as a medium difficulty
reward.

--- 

Additionally I changed the boot-dagger's examine tell to only show to
people holding the item.
When I was implementing the briefcase gun I made the examine tell only
show while held and I thought "well, the boot-dagger should follow the
same logic". They're meant to be stealth objects so being able to figure
it out from across the room feels weird.

## Why It's Good For The Game

This was a random idea someone threw out that I thought fit the vibe and
gameplay of traitors and spies really well.
It's a very espionage-y idea, very James Bond. 

It will definitely catch a lot of people off guard. It basically allows
the Lawyer to walk around with a pistol or revolver drawn at all times.
I'm a bit worried it'll be too potent combined with handcuffs (nodrop
revolver?), but the Lawyer doesn't get many Ws so maybe it's fine.

## Changelog

🆑 Melbert
add: Traitor Lawyers, Quartermasters, and Heads of Personnels can now
purchase a "Briefcase Embedded Firearm Trigger" from the uplink for 4tc
- a briefcase that allows any weapon stored within to be fired by
"firing" the briefcase itself. Weapon sizes are restricted to whatever
fits in a briefcase, meaning it practically only works with pistols and
some laser weapons. It has a subtle examine tell that only appears while
being held.
add: Also available for 8tc is a combo deal that comes pre-loaded with a
Makarov. This can also appear as a medium Spy reward.
balance: The Spy item "boot dagger"'s examine tell now only appears if
you're examining them WHILE holding them.
/🆑
2026-04-17 13:29:57 +10:00
b25ad1a016 Makes the maintsrooms xenomorphs not hostile (#5414)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Converts the xenomorphs in the maintsrooms to be non reproductive, non
evolving and non hostile to the crew

## Why It's Good For The Game

Gateway antagonists are (in general) poor a poor idea.

## Proof Of Testing

Tested it, and it works. (if its still a branch that means it doesnt
work)

## Changelog

cleared out a bit of space in front of the tavern called the "edge of
the universe" so that its not blocked along with moving 1 shaggoth and 1
hound of tindalos so the turrets dont just shoot endlessly (as often)

made the xenos not hostile to crew (neutral technically so if you shoot
them they can shoot you)

🆑
balance: Made the maintsrooms xenomorphs friendly
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
Co-authored-by: gavla <96078776+shayoki@users.noreply.github.com>
2026-04-16 20:12:07 -05:00
YobrocharlieandGitHub 26ae82d758 Snowdin and caves fluff and zoning removal (#95770)
## About The Pull Request

<img width="245" height="468" alt="image"
src="https://github.com/user-attachments/assets/e7924766-cf9a-4ca0-b3fb-a668d3d2cec0"
/>

## Why It's Good For The Game

shouldve been removed with the first pr

## Changelog

Removes everything for the caves and snowdin away missions except for
the original caves area because i used that in heretic, whoops.

not player facing there should be no CL
2026-04-16 03:44:02 +01:00
MrMelbertandGitHub bade006302 DNR'd / playerless bodies risen as zombies are ghost controllable (though mindless bodies are weaker) (#95544)
## About The Pull Request

- A body that revives as a zombie but has no player (IE never had a
player or the player DNR'd) becomes is ghost controllable: A poll is
immediately offered, and the body itself appears in the spawners menu.

- Zombies created from **mindless** mobs (such as monkeys or roundstart
morgue cadavers) are **Mindless Zombies**, a subtype of zombie which is
weaker (heal slower, move slower, not guaranteed to infect on hit)

## Why It's Good For The Game

- When zombies get rolling, there will no doubt be a few players that
DNR or a few DNR'd bodies that get infected, and it results in a lot of
zombies without players standing around, which is kinda lame. Giving
ghosts the options to take over seems like a no-brains-er to me, keeps
the horde a bit active even if some get decapitated.

- However, one big problem this allows for is that it provides a clear
vector for people spamming zombies out of hu-monkeys. Thus I changed
mindless bodies (bodies which never had a player, even a DNR'd one
(hu-monkeys)) to be easier to handle and far less deadly. That way
traitors are still encouraged to infect players over npcs.

## Changelog

🆑 Melbert
add: If a playerless body (DNR'd or otherwise) is raised as a zombie,
ghosts are given the ability to take control of it
add: If a body that never had a player control it is risen as a zombie,
they are risen as a weaker "mindless zombie" (moves and heals slower,
deals less damage, infection is not guaranteed on hit)
/🆑
2026-04-16 12:26:22 +10:00
John WillardandGitHub 569bf2fc55 You can lose it all (#95616)
## About The Pull Request

Replaces visible messages with the machine talking directly

<img width="448" height="31" alt="image"
src="https://github.com/user-attachments/assets/a0ea268e-67f8-4301-ae9d-1926be7d79ae"
/>

Winning the jackpot now gives +4 instead of +6, but is now a permanent
moodlet. The only way to lose it is if you lose at least 10k from a
CRAB-17 market crash, which will replace it with a 20m mood debuff of
-2.

<img width="639" height="523" alt="image"
src="https://github.com/user-attachments/assets/9227b931-8e72-40c9-914c-657fd50ed5d3"
/>


Also adds a memory for winning the jackpot.

<img width="641" height="147" alt="image"
src="https://github.com/user-attachments/assets/2d34dab0-9ee8-4d1a-a7af-1ad855a51abe"
/>

<img width="235" height="75" alt="image"
src="https://github.com/user-attachments/assets/e870ef6d-d4c8-4cd0-976b-316e8399669e"
/>


## Why It's Good For The Game

Winning the jackpot makes you feel great all day, not just for 30
minutes. You won life saving gamblings!
Also you aren't really glad when all your money is gone, either.
2026-04-15 13:48:49 -05:00
MrMelbertandGitHub 4eadf5caf7 The big tooltype_act de-cargo-cult-ing (#95408)
## About The Pull Request

Removes a lot of cargo cult copypasta with
`default_deconstruction_screwdriver`, `default_deconstruction_crowbar`,
and to a lesser extent `default_pry_open` and
`default_change_direction_wrench`

ALL you gotta do now if you want your machine to have an openable panel
or be deconstructible with a crowbar is this
```dm
/obj/machinery/dish_drive/screwdriver_act(mob/living/user, obj/item/tool)
	return default_deconstruction_screwdriver(user, tool)

/obj/machinery/dish_drive/crowbar_act(mob/living/user, obj/item/tool)
	return default_deconstruction_crowbar(user, tool)
```

`default_deconstruction_screwdriver` no longer directly sets
`icon_state`, requiring the user pass in the open and closed icon
states. Now, it just calls `update_appearance`, and everything that once
passed the icon state now uses `base_icon_state` and
`update_icon_state`.

## Why It's Good For The Game

Many of these procs were terribly overcomplicated and difficult to work
with for what should be a relatively simple action

Streamlining it makes it easier for coders to understand and work with

## Changelog

🆑 Melbert
refactor: A majority of machines had their screwdriver/crowbar/wrench
interactions rewritten, report any oddities like being unable to open a
machine's panel or deconstruct a machine
/🆑
2026-04-14 19:46:24 -04:00
53be5f549a Allows admins to set individual players a specific OOC colour (#95734)
## About The Pull Request

Add the `ooc_colour` var to a `client`. admins can feel free to set it
to whatever. It will even override other admins ooc colour preferences!

GO be dickheads to each other!

## Why It's Good For The Game

Admin freedom is always good.

## Changelog

🆑
admin: admins can more freely mess with ooc colours
/🆑

Co-authored-by: Josh Powell <josh.powell@softwire.com>
2026-04-15 11:34:35 +12:00
CursorandGitHub d4bb05bcc7 Replaces uses of welder sounds when using razors with hair cutting noises (#95754)
## About The Pull Request

Title. I saw someone shaving Ian and it annoyed me it was using a welder
sound.

## Why It's Good For The Game

Yo ass ain' welding.

## Changelog
🆑
sound: Shaving Ian will no longer sound like you're using a Welder.
/🆑
2026-04-14 17:00:34 -06:00
Leland KembleandGitHub 68dd7ae4a6 Gives Space Dragons a locator for the areas they need to go to (#95725)
## About The Pull Request

Gives Space Dragons an ability that lets them find out in what direction
an area of their choosing(from within their rift summon locations) is.
The ability acts very similarly to the heretic's living heart ability,
except it will provide direction even if you are above or below your
intended area.

## Why It's Good For The Game

It'd be nice to be able to find areas that you don't know the specific
location of due to a vague name or something, but the primary utility of
this is that Space Dragons spawn in space, away from the station,
without sight to the station. If they go the wrong direction, they'll be
stuck in deep space without a hope of navigation. This is a lesser
problem in real space, because you can navigate to some degree via the
background stars, but on Icebox you have precisely zero information and
precisely zero way to gain any besides simply stumbling upon the
station. This sucks, especially when you only have five minutes to find
the station, find a suitable location on the station, and place your
rift there.

## Changelog
🆑

add: Space Dragons have a new ability to locate the areas they need to
create rifts in.

/🆑
2026-04-15 10:58:25 +12:00
John F. KennedyandGitHub d598448aad Sweater Vest (#95681)
## About The Pull Request
Adds the sweater vest as an accessory in the autodrobe and loadout menu.
## Why It's Good For The Game
An alternative to the waistcoat.
<img width="704" height="82" alt="Screenshot 2026-04-07 140058"
src="https://github.com/user-attachments/assets/3ca13953-3866-4f35-9cb6-87e8c75348a8"
/>

## Changelog
🆑 Macaroni
add: Added the sweater vest
/🆑
2026-04-15 10:39:51 +12:00
RhialsandGitHub 7ceb98da74 Updates the ayylien dissection guide (#95722)
## About The Pull Request

Updates the alien dissection guide to reflect the recent changes to
surgery.
## Why It's Good For The Game

To the captain we were operating on last night, who had to sit there
while we figured this out, consider this my apology.
## Changelog
🆑 Rhials
spellcheck: The alien dissection guide steps have been updated to
reflect changes to surgical processes.
/🆑
2026-04-15 10:39:40 +12:00
Ben10OmintrixandGitHub f0ad6b8101 fixes bot huds randomly dissappearing (#95750)
## About The Pull Request
Bot huds would sometimes dissappear when they're pathing to anything
that arent beacons

## Why It's Good For The Game
Bot huds would sometimes dissappear when they're pathing to anything
that arent beacons

## Changelog
🆑
fix: fixes bot huds randomly dissappearing
/🆑
2026-04-13 22:10:11 -04:00
SmArtKarandGitHub 3103f9c413 Adds a Tactical IFF Visor and slightly refactors eye rendering (#95547)
## About The Pull Request

A new cybernetic eye implant, the tactical IFF visor, has been added to
the game, available in the combat implants research node. Its main
features are a cool LED display, dynamic color correction to make
distinguishing important objects easier, and inbuilt IFF systems capable
of distinguishing and highlighting allies and potential threats. They
also give flash/welding protection and mild night-vision capabilities.

However, this comes at a downside of making the user completely unable
to distinguish appearances or voices, or even examine others. Everyone
will simply show up as Unknown and be completely covered in static, bar
the threat assessment outline. Examining will only display their threat
status according to threat settings in the visor.

The parameters for threat assessment (both ID access and security
flag-based), as well as the visor display, can be configured by the user
at any time.

When emagged, the visor will instead completely hide and mute all mobs
except the user themselves, leaving them completely "alone" on the
station.

Deathsquads get an unmodifiable version, configured to treat anyone but
CentCom personnel as hostiles.
Settings can also be adjusted before installation with a multitool, and
locked using a screwdriver, preventing users from accessing them when
installed.

---

Eye rendering has been slightly refactored in order to support the
monovisor, as well as to get rid of duplicate code (and missing
features) on dismembered heads. Also moth eyes once again should block
emissives properly.

## Why It's Good For The Game

New content for both gameplay and roleplay, and fits deathsquad's
purpose very well.
2026-04-13 20:58:40 -05:00
John WillardandGitHub 774c07cd9b Basic mob stat panel gutting (#95543)
## About The Pull Request

Changes Guardian HUD to use action buttons instead of HUD elements,
which means their buttons
1. Can now be moved
2. Can be binded

Other Holoparasite HUD changes:

1- Moves some special buttons like explosive's explosion ability to be
where the "Toggle Mode" button typically is, to be consistent with some
other modes (assassin, gas) that also works like their unique ability.
2- Gives non-dextrous holoparasites the ability to move floors, since
they float.
3- Fixes dextrous holoparasites having 2 health HUDs
4- Moves "Check Guardian Type" verb to a new action button meant to
mimick the Antag UI Info button.

Gives Soulscythes a Combat mode indicator

Locks Revenant's combat mode indicator (cause it does nothing)

Adds another hoverable HUD element, basic mobs can now hover over their
healthdoll to see their Health %

<img width="85" height="123" alt="image"
src="https://github.com/user-attachments/assets/ad660ba4-296c-4699-9ec4-03a6e7b97880"
/>
<img width="95" height="101" alt="image"
src="https://github.com/user-attachments/assets/12d4d9d3-cf2c-4c52-81aa-17ce538b9d48"
/>


Adds a Unit Test to ensure all basic mobs have a HUD that shows some
form of health & combat mode (unless unnecessary like Revenants), to not
lose any information from basic mob conversion now that they lose the
stat panel.

## Why It's Good For The Game

This is yet another supplement of
https://github.com/tgstation/tgstation/pull/95383 - Removing stat panel
entries for all basic mobs is a great move towards lessening the
reliance of mobs on the stat panel.

This is also just good QoL for Holoparasites, especially since their
stat panel had 2 entries for "Master HP" and your "Own" HP, despite
Holoparasites not even having their own HP at all.

## Changelog

🆑
qol: Holoparasites' abilities are now action buttons, so you can rebind
or move them.
qol: Holoparasites now have floor change buttons.
fix: Holoparasites and Soulscythes now have a combat mode indicator.
fix: Dextrous holoparasites now have their inventory slot again while
non-dextrous had it taken away (not that they could use it).
/🆑
2026-04-13 17:05:57 -06:00
mrmanlikesbtandGitHub 928df286a6 Kills /datum/asset/var/_abstract, uses abstract_type instead (#95756)
## About The Pull Request

It's all in the title

## Why It's Good For The Game

Forgotten in #92909

## Changelog

no player facing changes
2026-04-13 17:20:12 -04:00
TimandGitHub 550f9f435c Fix fishing random portals not working correctly (#95737) 2026-04-13 21:06:56 +02:00
ArcaneMusicandGitHub 3503e9c565 Re-Implements the Bounty List for cargo, and various bounty improvements. (#95412)
## About The Pull Request

This PR readds a previously removed feature from cargo, that being a
global list of bounties that the whole station has access to, with some
tweaks and adjustments from the original system.

<img width="578" height="377" alt="image"
src="https://github.com/user-attachments/assets/c8e1cb8d-dda6-4983-8588-93dffffc2b4e"
/>

_Seen above: The new Global Bounty Interface._

The civilian bounty pad has a second tab added to it, which contains a
list of all the bounties that are available globally for all crew. You
can select one in order to view the contents of the bounty, as well as
have the option to send items on the pad to contribute to that global
bounty. You may also, as you could several years ago, print a sheet of
paper from the console that consists of all the global bounties on the
station, their their reward values. In addition to those bounties, some
bounties may be labeled has "High Priority", which means that they're
worth more to complete for both you and for cargo, and are denoted with
the different coloring and the star icon on the bounty list.

When a bounty is completed, it will create a bounty cube, the same as
personal bounties. However, for global bounties, multiple people may
contribute to their completion, and when the bounty cube is made and
sold, you will each get a cut of the profits proportional to your
individual contribution. So, if a bounty cube is sold worth 1000
credits, and Person A and Person B contribute 4 items and 6 items
respectively, the total "cut" of the profits crew would receive is 30%
of the total value, so 300 credits. Of those 300 credits, Person A would
receive 120 credits and 180 credits.
(In a real round, the value of the cube's 1000 credits may also increase
if the speedy delivery bonus is met by the cargo department.)

In addition, when a bounty goes from on the list to completed and cubed
up, the global bounty list will likewise automatically update, and
create a new bounty. The number of bounties available for the crew to
complete starts at 5 (Scaled to add one more for every 8 living players,
up to a maximum of 10 to begin with), and for every _3_ completed
bounties, that bounty maximum will go up by an additional 1 bounty. The
new bounty is random from all possible job categories. This may need to
be tweaked so that it pulls 1 bounty from each major department
category, but for now this is how it stands.

Most of the changes in this project fall under tweaks to the pricetag
component, UI work, and then a lot of file-cleanup and tweaking based on
testing.

## Why It's Good For The Game

There is something that was lost in the original shift from global
bounties to personal bounties. Cargo would reach out to crew in order to
get their assistance on projects that let them do their jobs better,
made forced them to have to work with the rest of the crew as opposed to
merely beating them to death when they break in to print their round
start multitools. One of the reasons that we justified that choice was
that bounties were very lopsided. You could be a a superstar helper and
complete a dozen bounties for cargo in a shift, but not only would you
run out of bounties to complete, but you would also receive nothing in
return. Switching to personal bounties did in fact let players generate
their own wealth, but now suddenly the impetus to complete bounties was
that cargo was more of a hang-up to the process than it actually being
part of their job responsibilities.

By re-implementing global bounties, we're giving crew the chance to not
only have that kind of soft community goal, but also we're incentivizing
people to contribute as much as they can to it's completion without
really requiring them to make it their whole shift as tends to be the
case with personal bounties.

There is more that could be done to this system, including using a
unique bounty pool, or at least unique "big" bounties that could be
rolled into the pool that would allow the crew to work on more varied
stuff, but for now this is at least a servable way to re-implement this
from both a longevity and nostalgia standpoint.

I also really, really like printing out sheets of paper and pinning them
to doors. Big mistake on my part by losing that.
2026-04-13 13:07:42 -05:00
TimandGitHub d2e5e35d68 Keen Nose Quirk - The Smell of Discovery (#95697)
## About The Pull Request
This adds a new positive quirk called "**Keen Nose**" that costs 3
points.

It lets you examine any open container with reagents to smell them. It
generates the smell based on the taste description. Also added an effect
to pepper spray, where it causes you to lose your sense of smell
temporarily.

This quirk is blacklisted against the Anosmia quirk, which is the
opposite. (no sense of smell)

## Why It's Good For The Game
Since there is a serious lack of positive quirks, I figured this one
might be useful as a utility quirk. It's a niche thing that could come
in handy. Keep in mind, there are several ways to identify chemicals,
like using the bartender's beer goggles, the science goggles, a chem
machine, or just eyeballing the color. Also, many chems have overlapping
taste descriptions (several different things taste like "death") so it's
not foolproof.
2026-04-13 13:03:26 -05:00
SmArtKarandGitHub 9ecf33adf9 Ore vents now turn transparent and clickthrough when there's a mob behind them (#95646)
## About The Pull Request

When a mob enters a tile above the vent its top half (and the rig, if
the vent has been tapped) will turn transparent and clickthrough. The
bottom half residing on the tile below is still clickable.


https://github.com/user-attachments/assets/5ed1cd3a-4f33-4692-adce-471eb2942d45

Same applies to ore type overlays. Also I've cleaned up ore vent code a
bit.

## Why It's Good For The Game

During combat some mobs, especially legion skulls, can end up hiding
behind the vent and be extremely hard to hit, requiring the player to
pull up the alt click menu to dispatch of them. This should resolve that
issue.

## Changelog
🆑
qol: Ore vents now turn transparent and clickthrough when a mob enters
the tile above them. The bottom half of the vent is still clickable.
code: Cleaned up ore vent code
/🆑
2026-04-13 13:59:59 -04:00
ArturlangandGitHub d25fb3ae83 heretic fixes + makes aura emissive (#95572)
## About The Pull Request
fixes https://github.com/tgstation/tgstation/issues/95493 aka rust armor
not getting buffed when floor under you becomes rusty, and missing
antimagic checks for void, also adds emissives for the heretic aura, it
looks dope, and besides, for hiding in the dark, you can still use robes
as those hide it.
also fixes a exploit where you can retract your robe hood and that would
let you exit space phase anywhere not just in space, now it no longer
forces you to exit phase if you loose your focus, instead it always
allows dropping out of phase if you're already phasing
## Why It's Good For The Game
fixes good and emissives look really nice

https://github.com/user-attachments/assets/5b725fad-2522-498a-8514-ca4a8d48fc64
2026-04-13 12:53:12 -05:00
Leland KembleandGitHub 081818078b Liberator pistol applies damage multipliers in process_fire() rather than fire_gun() (#95599)
## About The Pull Request

The code works exactly the same, because it didn't really need to be in
`fire_gun()`. The reason for this is that there are some ways that guns
are shot directly through `process_fire()`, such as clowns or mail,
which never end up applying multipliers.

## Why It's Good For The Game

I'd say that the distance from your hand to your foot is probably
point-blank.
2026-04-13 12:45:20 -05:00
IamgoofballandGitHub 34ed560bb7 Restores keybindings to their original defaults, moves the new per-hand bind options to Unbound by default. (#95698)
## About The Pull Request

Restores keybindings to their original defaults, moves the new per-hand
bind options to Unbound by default. Partially reverts #92659

## Why It's Good For The Game

I've seen approximately zero players say the new binds are better, and
quite a lot of older players report the new bindings are confusing or
harder to use. I'm also not convinced that burning 2 buttons on hand
swapping is better than having one button to swap between hands.

I understand having roguetown bindings as an option given that it's
currently eating all of SS13's pop right now, which is why I've left in
the bindings set as Unbound for now, but we should really just add
buttons for players to pick binding defaults, so that we can go "coming
over from Goon/Roguetown/Whatever flavor of the month you're from? Click
here for those bindings" and sidestep this issue entirely.

If someone can provide some data proving this is actually better for new
players, I'll close this PR, but until I see some hard data or testimony
from newer players that they find this new control scheme easier to
understand, I'm not convinced.
2026-04-13 12:42:16 -05:00
TimandGitHub 2e35b8bc13 Fix admin shuttle recall revealing admin location (#95733)
## About The Pull Request
- Fixes #95441

Using the admin shuttle recall command no longer reveals the admins
location.

## Why It's Good For The Game
Less bugs.
2026-04-13 12:40:40 -05:00
Leland KembleandGitHub 41ce7bf46c fixes second-choice headrevs having their preferences ignored (#95751)
## About The Pull Request

Second-choice headrevs after a first choice became indisposed did not
check client preferences.
Also, moves `ROLE_HEAD_REV` define into roundstart section of defines
because it is a roundstart ruleset

## Why It's Good For The Game

fixes #95742
2026-04-13 12:37:10 -05:00
ArcaneMusicandThe Sharkening bd01f0f2b6 [NO GBP] Corrects two issues with goodies and the ordering console. (#95478)
## About The Pull Request

Whoops.

~~I missed some nuance when I made #94483, namely that while I didn't
want players requesting CRATES like guns, grenades, spare SM shards with
their department budgets, the logic also touches goodies and private
orders meaning that players were unable to place goodie orders for
things that they may not have explicit access to do so, which is part of
the reason why you'd be ordering them privately in the first place. It's
cargo responsibility to determine if the player should/not be receiving
that item.~~
I have meditated on the issue, and I realize, nah, this is probably both
a healthier design decision as well as the reason we have things like
the black market in the first place. The core of the PR below however is
however sound.

ALSO, I made a fairly confusing mistake with the TGUI where the goodies
category just... hasn't been visible! That's on me.

## Why It's Good For The Game

Makes cargo goodies viewable. Makes cargo goodies purchasable.

Fixes #94928

🐛 💥 ‼️

## Changelog

🆑
fix: Cargo goodies are now visible in the ordering and request consoles.
/🆑
2026-04-13 06:16:04 -06:00
LucyandGitHub 79e7aa569e fixes up some math defines to use byond builtins instead of workarounds (#95652)
## About The Pull Request

this translates some various
- `FLOOR(x, 1)` -> `floor(x)`
- `CEILING(x, 1)` -> `ceil(x)`
- `SIGN(x)` define is gone, just uses the native BYOND `sign()` now.

Also, the `MODULUS` define is just a wrapper for the [BYOND `%%`
operator](https://ref.harry.live/operator/modulomodulo) now.

would be nice if someone double checked to make sure there's no
potential subtle oddities resulting from this.

## Why It's Good For The Game

These procs presumably did not exist whenever the defines were written -
and they are BYOND builtins, meaning it will just be, say, one `sign`
instruction, instead of two comparisons and a subtraction.

## Changelog

no player-facing changes
2026-04-13 15:32:42 +12:00
xPokee 37d18f10cc Screenshot tests 2026-04-12 16:32:35 -04:00
ElGitificadorandGitHub 4948bbaacb Changes lamarr s desc from "xenomorph facehugger" to "alien" (#95707)
## About The Pull Request

facehuggers are referred as simply "alien(s)" throughout the game,
except in lamarr s description, in which it is referred straight as
"xenomorph facehugger". This pr changes lamarr s desc to be more
"""mysterious""""

## Why It's Good For The Game

naming consistency

## Changelog



🆑

spellcheck: due to conflicts with the hive empress, lamarr has lost it s
diplomatic facehugger title

/🆑
2026-04-12 16:32:44 +00:00
SmArtKarandGitHub 5979234e9e Removes butterflies from the plasma flower MOD core, reduces the amount of particles spawned (#95623)
## About The Pull Request

The plasma flower MOD core from the Garden of Eden ruin no longer spawns
butterflies as you run around, and the amount of pollen particles it
creates on the user has been quartered.

## Why It's Good For The Game

Butterflies are incredibly annoying to deal with and can block your own
swings in combat, and don't serve a purpose beyond creating a ton of
visual clutter. Same applies to the pollen particles, there's so many
you can barely see your own sprite underneath. Quartering them still
leaves plenty there to look nice.

## Changelog
🆑
del: Plasma flower MOD core no longer spawns butterflies around the user
qol: Plasma flower MOD core's pollen visual now spawns less particles
/🆑
2026-04-12 11:16:14 -04:00
TwaticusandGitHub 16d7023da4 Hoodies (#95582)
## About The Pull Request

Adds 2 hoodie variants, the pullover and the zip-up.
Both recolorable via GAGs.
Both available in the clothesmate and in loadout.

(90% "vibe-coded" ((SORRY!!)) but thoroughly tested with no issues*)
*ok one little issue being recoloring a hoodie with a spraycan does not
recolor the hood and you need to also spray the hood itself to color it.
a problem that has already existed in the codebase and i was unable to
find a fix for.


###### Pullover hood-down / Pullover hood-up with random recolors
underneath.
<img width="192" height="192" alt="dreamseeker_3DwQU9FPb2"
src="https://github.com/user-attachments/assets/fce54ba7-138f-4961-ad87-de072fa1ab55"
/>

###### Zipup unzipped hood-down / Zipup unzipped hood-up / Zipup zipped
hood-down / Zipup zipped hood-up with random colors underneath.
<img width="320" height="192" alt="dreamseeker_COJPWnFa84"
src="https://github.com/user-attachments/assets/b91ba86f-36cc-4c89-99aa-c6848554ea1c"
/>

## Why It's Good For The Game

Hoodies are a staple to many and have been requested frequently over the
years.
## Changelog
🆑
image: Hoodies! Both pullover and zip-up hoodies are available in the
clothesmate and in loadouts!
/🆑
2026-04-11 13:49:02 -04:00
ElGitificadorandGitHub 071b9d2021 Deletes the misleading key request for the dragon lavaboat (#95708)
## About The Pull Request

seems like it was asking for a key since it was a subtype of
/obj/vehicle/ridden/lavaboat, so i set it s key_type to null

## Why It's Good For The Game

gbp pog. fixes #95634 

## Changelog
🆑

fix: Deleted the misleading key request for the dragon lavaboat

/🆑
2026-04-11 13:45:12 -04:00
FalloutFalconandGitHub c7faae3626 backticks some usages of rank in querys (#95719)
## About The Pull Request
See title. I looked pretty hard and only found these as having this
issue.
## Why It's Good For The Game
I'm mostly working off of other peoples wisdom here but `rank` is a
reserved word in sql, and as we do in MOST of our other querys.
backticking it prevents that from being an issue (and therefore fixes
some sql errors that CAN happen depending on version (my issues happened
with mysql, but apparently dont occur with heididb))
## Changelog
~~N/A as i dont acctually think this happens in TG rn unless yalls
housekeeping tab on the admin panel is broken as well.~~
🆑
fix: A handful of permissions panel querys now work again
/🆑
2026-04-11 13:40:59 -04:00
RoxyandThe Sharkening 26d7f00a76 Roxy Comments 2026-04-11 08:57:59 -06:00
RoxyandThe Sharkening cbde7d6206 [BOUNTY] Character Preferences Reorganization (#5389)
This bounty was requested by @ArrisFairburne

Cleans up the character customization; various customization features
have been moved into three new tabs, "Character Basics" "OOC
Preferences" and "Silicon Preferences".

A ton of the character customization options (maybe 40%?) are stuff that
almost nobody would use on a regular basis. Options like mushroom caps,
frills, fluff, taur bodies, xenodorsal heads, etc. could be ignored by a
most players because they're irrelevant to their characters. Ideally the
most necessary stuff (basic furry parts, our required FTs, and
soundbytes for speaking) are the stuff the players see first, with more
stuff continuing to be available upon checking different tabs.

Silicon prefs are moved into their own tab because most characters are
carbons so they just won't ever need to bother with them.

<details>
<summary>Screenshots/Videos</summary>
<img width="1100" height="790" alt="basics"
src="https://github.com/user-attachments/assets/f84ce557-09fd-414d-a076-58569392a84b"
/>
<img width="1100" height="790" alt="visuals"
src="https://github.com/user-attachments/assets/0e184209-f6d0-43f7-8452-0ec409f13dba"
/>
<img width="1100" height="790" alt="lore"
src="https://github.com/user-attachments/assets/b0f8f74c-5b21-49f3-823a-8684015c7b61"
/>
<img width="1100" height="790" alt="lore2"
src="https://github.com/user-attachments/assets/114088bc-6f3f-4a83-b528-d0d14055426e"
/>
<img width="1100" height="790" alt="ooc"
src="https://github.com/user-attachments/assets/14333121-dc87-4396-a64d-fd2d07e86780"
/>
<img width="1100" height="790" alt="silicon"
src="https://github.com/user-attachments/assets/5992d37e-17ca-4854-a88a-f6cc87f27128"
/>

</details>

🆑 ArrisFairburne
qol: Cleaned up the character preference window.
/🆑
^ Conflicts:
^	tgui/packages/tgui/interfaces/PreferencesMenu/types.ts
2026-04-11 08:57:55 -06:00
Phantastic-SwanandThe Sharkening e7a01b6b27 fixes the digitigrade sprites unit test (#5366)
## About The Pull Request

As per the title. The unit test was never skipping any typepaths,
regardless of whether or not they were defined in the modular folders.
This made it so that even TG clothing was being checked. The regex which
was used to find the typepaths was also broken, as it was prematurely
cutting off at the letter `s`, and was also matching with typepaths that
weren't actual definitions/overwrites. It also stopped searching for
typepaths in the file after the first one was found.

## Why It's Good For The Game

Fixes a unit test.

## Proof Of Testing

<img width="258" height="56" alt="image"
src="https://github.com/user-attachments/assets/24b8f8d7-42d1-429d-9a48-30eb9ef95e6b"
/>

It compiled and run the test fine. Checking with the debugger confirmed
that the `typepaths_to_check` list (renamed from `typepath_files`) was
being properly filled with clothing from `modular_skyrat` and
`modular_zubbers` folders.

This screenshot shows the status of the `typepath_files` list before the
changes:
<img width="1703" height="332" alt="image"
src="https://github.com/user-attachments/assets/4e400269-016f-4a89-81b0-887b8f44d200"
/>
As can be seen, it is empty, meaning the `if(subtype_string in
typepath_files)` line is never going to fire, because there is no item
in the list.

This screenshot shows the status of the `typepaths_to_check` list after
my changes:
<img width="1600" height="548" alt="image"
src="https://github.com/user-attachments/assets/f0bf1fed-193d-41c0-950e-3c4285a6db3f"
/>
as you can see, it has 599 entries, all of which were defined or
overwritten in `modular_zubbers` or `modular_skyrat` files.
2026-04-11 08:53:31 -06:00
RoxyandThe Sharkening 2d426b3f46 Fix mismatched parts toggle doing nothing (#5388)
## About The Pull Request

It was me I broke it

## Why It's Good For The Game

Unchecking this should actually hide mismatched parts

## Proof Of Testing

Yes

## Changelog
🆑
fix: fixed mismatched parts toggle doing nothing
/🆑
2026-04-11 08:53:28 -06:00
aKromatopziaandThe Sharkening 45b41ec946 reverts specifically the prosthetic organ part of the cyber brain update + 1 minor change (#5333)
## About The Pull Request
That part wasn't finished. It won't! The other change just makes it so
non-vox aug brains can die from emps.

## Proof Of Testing
it didn't work then, it's gone now

## Changelog

🆑
balance: vox get to keep their min brain health threshold from emps,
removed it from roundstart aug brains.
del: surplus cybernetic brain is gone again
/🆑
2026-04-11 08:53:22 -06:00
MintyandThe Sharkening b20ff0ba43 Allows MOD modules to activate in a partially-deployed MODsuit (#5354)
## About The Pull Request

This PR reverts part of a Skyrat-Era PR,
https://github.com/Skyrat-SS13/Skyrat-tg/pull/15950. The PR as a whole
was intended to fix an exploit where a retracted MODsuit's modules could
still be used, but did so by preventing any modules from being activated
at all if the MODsuit was not fully deployed and active, in addition to
deactivating them when the associated part was retracted.

TG eventually fixed retraction not deactivating modules, and the Skyrat
fix for that part is no longer in our codebase. The part preventing
modules from being activated unless the suit is fully deployed, however,
lingered, and nowadays it inconveniences me when I am trying to have hot
MODsuit sex. _This is unacceptable._

This change will bring MODsuit behavior closer to how TG has it, where
players don't need to wait for all 4 parts of the suit to activate
before using something that only needs the gloves deployed. There may be
some mild balance implications there, but given that it's moving to how
TG does it I'm not too concerned.

## Why It's Good For The Game

Keeps us closer to parity with TG, and allows for greater flexibility in
MODsuit use, rewarding players who are knowledgeable in their modules'
required parts with faster access to those modules' abilities.

## Proof Of Testing
<img width="853" height="449" alt="image"
src="https://github.com/user-attachments/assets/8acbb0ca-5852-4a65-acd8-80f9a2e92c58"
/>

## Changelog

🆑
del: Removed a Skyrat restriction on activating MOD modules with a
partially-deployed suit.
/🆑
2026-04-11 08:53:21 -06:00
SmArtKarandGitHub 93ea8085cb Datumizes material effects, slots, and material spears (#95341) 2026-04-11 09:15:07 +10:00
Leland KembleandGitHub 1d8c7f1928 Fixes hardcoded pod storage safe security level lock & its initial icon setup (#95709)
## About The Pull Request

Pod wall storage tracks its own locked state and whatnot only to
hardblock based on security state, which is confusing especially to
those attempting to varedit.

Also, its initial icon is erroneously unlocked because it is updated by
the storage while the storage is being created, but as the storage is
still being created `atom_storage` hasn't been actually set yet.

## Why It's Good For The Game

Fixes it being locked when it shouldn't be(in varedits, but also in the
scenario someone launches the pod and later the security level is
lowered)

Fixes it appearing unlocked when it isn't.
2026-04-10 12:09:33 -05:00
MrMelbertandGitHub ee08406e4a Fixes me destroying the IDC in the last commit (#95695) 2026-04-10 00:53:59 +02:00
Leland KembleandGitHub e9cc8fd978 Fixes neurine not working in the dead (#95690) 2026-04-10 00:53:42 +02:00
MrMelbertandGitHub a3bb636bc1 Carp mask can be used for internals again (#95692) 2026-04-10 00:52:53 +02:00
LemonInTheDarkandGitHub 4bc27d68f7 Adds a protection that blocks marking rank datums (#95654) 2026-04-10 00:51:03 +02:00
MrMelbertandGitHub 8c9df266b9 Transparence trauma is permanent (#95678) 2026-04-10 00:50:52 +02:00
SmArtKarandGitHub de6a6ac46e Fixes conditionally added actions not appearing on player HUDs (#95624)
## About The Pull Request

Fuckup from the refactor, this should give the action to the mob not the
owner of the action.
Fixes purple raptors, ninja katanas, etc

## Changelog
🆑
fix: Fixed conditionally added actions not appearing on player HUDs
/🆑
2026-04-09 15:50:41 -07:00
Aliceee2chandGitHub 076bcd2d45 Renamed golden data disk to syndicate data disk (#95622) 2026-04-10 00:50:39 +02:00
MrMelbertandGitHub dcbfdbe332 Zombie powder fix (#95686) 2026-04-09 19:26:43 +02:00