Commit Graph

1513 Commits

Author SHA1 Message Date
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
MrMelbert 6b631cb2c2 Roundstart nuke ops now spawn on an elevator to wait while the base loads in (#96178) 2026-06-02 20:59:42 +10:00
MrGloopy fb2610776d Add persocomm to cybernetic brains (Nova port), add EMP effects to surplus brain and fix lone infil uplink spawn on synths (#5527)
## About The Pull Request

Adds the Synth Persocomm to both cybernetic brains. Allows automatic
connection of ID to internal computer as well with the ID in your ID
slot. No more linking it via janky methods (though you still can).

Fixes the bug with spawning as lone infil as a synth. No more bugged
uplink in your brain computer.

## Why It's Good For The Game
If my brain is half computer I should be able to use it as a computer.
Fixes multiple issues with the Persocom and adds it to organics with an
augmented brain.

Also bugfix good.

## Proof Of Testing
<img width="1622" height="823" alt="image"
src="https://github.com/user-attachments/assets/9d259d09-2347-4bee-a61a-e873d3eb8b7e"
/>
<img width="1449" height="647" alt="image"
src="https://github.com/user-attachments/assets/be36fdc7-fbcc-43d6-99d1-e0a7d5fc6dc8"
/>
<img width="1463" height="838" alt="image"
src="https://github.com/user-attachments/assets/18b2dd39-c05e-43fc-bac5-00da4d642fca"
/>
<img width="1520" height="789" alt="image"
src="https://github.com/user-attachments/assets/f63fd2a2-bf3b-4652-9e92-32baff97f36d"
/>


<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog

🆑
fix: Uplink location being set to the Persocom when playing as a synth.
It will now fall back to one of the other options.
add: Small persocom update. Automatic ID imprinting and PDA theme
application on spawn. Ghost roles will not automatically imprint their
ID. Don't imprint it as a Persistence role or Ruggero will punch you.
add: Persocom to cybernetic brain options.
add: Additional EMP effects such as stuttering and jittering to the
surplus brain to bring it in line with the cortical brain. EMP effects
are tripled compared to the cortical brain. Woe.
/🆑

---------

Co-authored-by: nikothedude <59709059+nikothedude@users.noreply.github.com>
2026-05-28 12:11:07 +02:00
LT3 95905028c1 Janitors have perfect aim throwing things into disposal units (#96188) 2026-05-27 23:51:09 -04:00
SmArtKar c8a5a3d321 Fixes shaft miner and assistant outfit subtypes using incorrect pda_slot (#96140)
## About The Pull Request

Might want to unit test for this but I'm not sure exactly how to do so
without potentially running into edge cases with weirder outfits

## Changelog
🆑
fix: Pre-equipped shaft miners and handyman assistants now start with
imprinted PDAs like the rest of the job outfits.
/🆑
2026-05-19 08:48:52 +02:00
MrMelbert ea0859d5fe Bane refactor (now uses damage multipliers) (#96003) 2026-05-16 11:41:29 +10:00
Alexis 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

fixes https://github.com/Bubberstation/Bubberstation/issues/5549

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com>
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com>
Co-authored-by: loganuk <fakeemail123@aol.com>
Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com>
Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com>
Co-authored-by: Isratosh <Isratosh@hotmail.com>
Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com>
Co-authored-by: Alexander V. <volas@ya.ru>
Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com>
Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: Cameron Lennox <killer65311@gmail.com>
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com>
Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com>
Co-authored-by: Josh <josh.adam.powell@gmail.com>
Co-authored-by: Josh Powell <josh.powell@softwire.com>
Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com>
Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com>
Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com>
Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-05-16 00:56:00 +02:00
Glu-furro 077a186f0e Prisoner max spawns increased from 2 to 4 (#95964)
## About The Pull Request

Increases the max roundstart prisoner spawns from 2 to 4

## Why It's Good For The Game

Permabrig has so many spots for beds and prisoners, and for what?, Perma
isnt packed enough and warden isnt having a hard enough time, so i
figure if we have more roundstart prisoners, itd be a bit funner for sec
and the prisoners

## Changelog

🆑
add: Increased max prisoners from 2 to 4.
🆑
2026-05-13 13:10:20 +12:00
Alexis d9a6b832ed Reverts 'Virosec' and Returns Redsec to Base /tg/ + Red Skyrat Security Gear (#5518)
## About The Pull Request
Does as the title suggests. This was voted on and approved unanimously
by maintainers.

**BLUE DONATOR ITEMS HAVE BEEN LEFT INTACT.**
## Why It's Good For The Game
A lot of players discussed discontent with 'virosec' and I feel this is
a solution that works.
## Proof Of Testing
I forgot to take screenshots, but it compiles, builds, and almost
everything is red.
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
add: Added back base /tg/ redsec along with red Skyrat clothing items.
del: Removed 'virosec'.
/🆑
2026-05-03 18:47:46 +02:00
RusselNotSCP 4ceac8f297 Classic Cocktails 2: The liqueurening (#95392)
## About The Pull Request
TL;DR: "What do you mean we didn't have a negroni in the game before?"

This adds three new very commonly used liqueurs to the game: A bitter
red aperitivo, an herbal liqueur, and maraschino liqueur. Additionally,
it adds 15 new classic cocktails that use these new liqueurs.
Mechanically relevant drinks include:

- The Poet's Dream, which can grant non-heretics the ability to dream
like them
- The Garibaldi, which grants revolutionaries the determination to shrug
off their wounds
- The Jungle Bird, which soothes the supermatter when ingested by those
around it
- The Thermonuclear Daiquiri, which causes you to glow (and very rarely
emit high-energy nuclear particles)
- and more!

Full list here: https://hackmd.io/@0lHAWBNkSXixU4v6xxYS_w/SkYjyDofbg

![Sequence
01](https://github.com/user-attachments/assets/23066f45-4ab9-4f2c-a16b-1d53bfb09ffb)

On the non-player facing side of things, this also refactors the heretic
dream code a bit and adds a trait that enables non-heretics to have
heretic dreams, which could easily be used by other things (ie if anyone
wanted to make a perk or something that does this)

Also, special thanks to MrMelbert and ChipPotato for helping me out with
coding stuff in the discord!
## Why It's Good For The Game

This is good for the game for more or less the same reasons as my first
classic cocktail PR #92955 is good for the game: More variety gives
bartenders more to do and a greater range of drinks to base gimmicks off
of, and adding more cocktails to the game which are commonly served in
IRL bars decreases awkward, RP breaking moments where someone orders a
cocktail that's a staple you can find just about anywhere but which
isn't in the game. Additionally, the new liqueurs are commonly used in
many other classic and modern cocktails, which people can use to make
cocktails in future projects.
## Changelog
🆑
add: Added three new liqueurs, with bottles available in the
booze-o-mat.
add: Added 15 new cocktails that use the aforementioned liqueurs.
/🆑
2026-03-26 16:12:33 +11:00
MrMelbert af27eda051 Adds support for gags underclothing / Uses it to make them look less jank on lizards (#95454)
## About The Pull Request

1. Underclothes have all been repathed as
`/datum/sprite_accessory/clothing`

2. Underclothes now have support for GAGS. Currently it ONLY supports
static GAGS colors, ie only preset colors, however prefs support could
easily be added in the future

3. Uses the GAGS support to implement the existing digitigrade
templating system for some undergarmants - lizards will use a generic
template for their underclothings when applicable

Example

<img width="169" height="124" alt="image"
src="https://github.com/user-attachments/assets/30b6689b-13a4-4cf9-811c-0d5d0bd5da59"
/>

## Why It's Good For The Game

Existing undergarmants look really jank on lizards

<img width="170" height="140" alt="image"
src="https://github.com/user-attachments/assets/de0704e0-d403-4bdb-a4c5-432d704b9c99"
/>

<img width="118" height="102" alt="image"
src="https://github.com/user-attachments/assets/7ec47327-c2a9-4a90-aab5-fb57105d5111"
/>

I would like to solve this, and well... the two solutions are "we force
lizards to run around naked" or "we use the cool templating system". The
latter seemed preferable


<img width="165" height="125" alt="image"
src="https://github.com/user-attachments/assets/6a8e4225-10a4-4044-9a12-c220713cd613"
/>

I did yoink the template from the jumpsuit template so it might look too
similar, might need to tweak it

## Changelog

🆑 Melbert
add: Some undergarmants will now use a generic replacement on lizard
body shapes that fit more appropriately
refactor: Refactored how undergarmants generate their icons, report any
oddities with that
/🆑
2026-03-23 20:06:58 -07:00
MrMelbert da64374423 Reverts "Add prosthetic limb" surgery to involve targeting limbs, rather than targeting chest. (Adds stumps) (#95252)
## About The Pull Request

- The `prosthetic replacement` surgical operation has been reverted to
be closer to how it used to work: The operation is done targeting the
limb that's missing

The change was made out of necessity, as surgical state was tied to
limbs - you had to operate on the chest to re-attach limbs because there
was no limb to operate on.

To circumvent that, I have done the unthinkable of adding stumps when
you are dismembered.

- Missing limbs are now represented as an invisible, un-removable,
un-interactable limb.

Making this change was not as difficult as originally anticipated, and
(at least surface level) seems to have broken very little.

Surprisingly little had to change to make this work. 

Direct accesses to `mob.bodyparts` was changed to `mob.get_bodyparts()`
with an optional `include_stumps` argument.
Similarly, `get_bodypart()` had an optional `include_stumps` added. 

This means we ultimately barely needed to change anything, and in fact,
some loops/checks were able to be streamlined.

## Why It's Good For The Game

- As mentioned, this change was out of necessity and was easily the
least intuitive part of the broader changes. Reverting it back to how it
used to work should make it far easier for people to pick up on, and
means we can cut out a bunch of bespoke instruction sets that I had to
include.

- The addition of stumps also adds a ton of future potential - code wise
it allows for stuff like better damage tracking (we can transfer damage
between limb <-> stump rather than limb <-> chest), and feature we can
do "fun" stuff like have stumps bleed on dismemberment that you can
bandage.

## Changelog

🆑 Melbert
del: "Add prosthetic limb" surgical operation has been reverted to be a
bit closer to how it used to work - you operate on the missing limb /
limb stump, rather than on the chest.
refactor: Missing limbs are now represented as limb stumps. In practice
this should change nothing (for now), as no features were rewritten to
make use of these besides surgery. Please report any oddities with
missing limbs, however.
/🆑
2026-03-20 14:32:41 +13:00
nevimer 29ef34cf8d Merge remote-tracking branch 'origin/master' into upstream-feb12-2026
# Conflicts:
#	tgstation.dme
2026-03-18 13:48:42 -04:00
MrGloopy f853e7a77c Nova Port - Roundstart bag variations (#5341)
## About The Pull Request
Ports some bags for roundstart selection from Nova Sector. Same amount
of space as any other bag ever.
## Why It's Good For The Game
Cool bags. Different aesthetics, if desired.
## Proof Of Testing
works on my machine or something. Screenshot below.
<details>
<summary>Screenshots/Videos</summary>
<img width="1287" height="735" alt="image"
src="https://github.com/user-attachments/assets/d7ecf201-1442-4f80-99cd-a116ea04de51"
/>

</details>

## Changelog
🆑
add: Front pack, waist pack and belt pack for selection in character
preferences, found under the regular bag selection. Despite the names,
still equipped on your back.
image: Supporting sprites for the new roundstart bags
/🆑

---------

Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
2026-03-16 21:56:12 +01:00
Alexis 5c5a636485 Merge branch 'master' into upstream-feb12-2026 2026-03-02 07:42:16 -05:00
axietheaxolotl 51ad6527c7 stabs blusec in the jugular and takes their wallet (virosec - security resprite and reset) (#5159)
## About The Pull Request

I'm working on it. the poll won so I am going ahead w/ this. 

<img width="1436" height="286" alt="image"
src="https://github.com/user-attachments/assets/255eda79-eb2c-4e36-9ad8-53c91c3b245e"
/>

<img width="336" height="183" alt="image"
src="https://github.com/user-attachments/assets/f92f5c29-c4e0-46da-889e-88acc903d253"
/>

stuff left to do

- [x] finish hos outfits
- [x] finish warden outfits
- [x] finish obj icons
- [ ] bugtest

this is a total overhaul of security, essentially resetting everything
to a new standard which can be worked off of. this is also a deletion of
blusec, an antiquated, unpopular idea that has long since proven to both
not be liked, and not work.

### this pr will not be the be-all, end-all. stuff will likely be
tweaked, added, removed, changed, or resprited in the coming days,
weeks, and months. due to just how much stuff security has.

## Why It's Good For The Game

will write a markup for this specific pr eventually but I will just be
posting the discord justification I gave

<img width="427" height="313" alt="image"
src="https://github.com/user-attachments/assets/e033ff0c-44f2-4cf6-ad9b-4b2d124cf21e"
/>
<img width="419" height="506" alt="image"
src="https://github.com/user-attachments/assets/84e86f18-72d2-4bef-a84b-1b53067fe41d"
/>

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

<img width="967" height="1046" alt="image"
src="https://github.com/user-attachments/assets/feaf9395-88d3-4999-a02f-e89cae25cc67"
/>
<img width="602" height="728" alt="image"
src="https://github.com/user-attachments/assets/81daae2f-f18e-41a9-a225-48dbbaad697f"
/>


</details>

## Changelog
🆑 axietheaxolotl / viro
del: blusec
add: redsec
/🆑
2026-02-18 16:38:21 +01:00
nevimer 00ccf0c6b5 Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts:
#	.github/CODEOWNERS
#	.github/workflows/compile_changelogs.yml
#	.github/workflows/stale.yml
#	SQL/database_changelog.md
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/__DEFINES/atom_hud.dm
#	code/__DEFINES/inventory.dm
#	code/__DEFINES/mobs.dm
#	code/__DEFINES/species_clothing_paths.dm
#	code/__DEFINES/subsystems.dm
#	code/__DEFINES/surgery.dm
#	code/__HELPERS/global_lists.dm
#	code/_globalvars/lists/maintenance_loot.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/minor_mapping.dm
#	code/controllers/subsystem/processing/quirks.dm
#	code/controllers/subsystem/shuttle.dm
#	code/datums/components/palette.dm
#	code/datums/components/surgery_initiator.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/hud.dm
#	code/datums/mood.dm
#	code/datums/mutations/chameleon.dm
#	code/datums/quirks/negative_quirks/nyctophobia.dm
#	code/datums/status_effects/debuffs/debuffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/slime/slime_leech.dm
#	code/datums/weather/weather.dm
#	code/game/data_huds.dm
#	code/game/objects/items.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/frog_statue.dm
#	code/game/objects/items/rcd/RLD.dm
#	code/game/objects/items/robot/items/hypo.dm
#	code/game/objects/items/stacks/medical.dm
#	code/game/objects/items/stacks/wrap.dm
#	code/game/objects/items/storage/garment.dm
#	code/game/objects/items/tools/medical/defib.dm
#	code/game/objects/items/weaponry.dm
#	code/game/objects/items/weaponry/melee/misc.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/game/objects/structures/curtains.dm
#	code/game/objects/structures/dresser.dm
#	code/game/objects/structures/girders.dm
#	code/game/objects/structures/maintenance.dm
#	code/game/objects/structures/mirror.dm
#	code/modules/admin/greyscale_modify_menu.dm
#	code/modules/admin/verbs/light_debug.dm
#	code/modules/antagonists/ashwalker/ashwalker.dm
#	code/modules/antagonists/heretic/knowledge/starting_lore.dm
#	code/modules/antagonists/ninja/ninjaDrainAct.dm
#	code/modules/art/paintings.dm
#	code/modules/client/preferences.dm
#	code/modules/client/verbs/ooc.dm
#	code/modules/clothing/head/wig.dm
#	code/modules/events/disease_outbreak.dm
#	code/modules/holodeck/holo_effect.dm
#	code/modules/jobs/job_types/head_of_security.dm
#	code/modules/jobs/job_types/security_officer.dm
#	code/modules/library/skill_learning/generic_skillchips/point.dm
#	code/modules/mining/lavaland/ash_flora.dm
#	code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/basic/guardian/guardian.dm
#	code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
#	code/modules/mob/living/carbon/carbon.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_defines.dm
#	code/modules/mob/living/carbon/life.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/mob.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mod/mod_control.dm
#	code/modules/mod/modules/modules_general.dm
#	code/modules/modular_computers/computers/item/computer_ui.dm
#	code/modules/paperwork/paper.dm
#	code/modules/paperwork/paperbin.dm
#	code/modules/power/lighting/light.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/projectiles/projectile.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/food_reagents.dm
#	code/modules/reagents/chemistry/reagents/other_reagents.dm
#	code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
#	code/modules/research/xenobiology/crossbreeding/_clothing.dm
#	code/modules/research/xenobiology/crossbreeding/prismatic.dm
#	code/modules/surgery/advanced/brainwashing.dm
#	code/modules/surgery/advanced/lobotomy.dm
#	code/modules/surgery/amputation.dm
#	code/modules/surgery/blood_filter.dm
#	code/modules/surgery/bodyparts/_bodyparts.dm
#	code/modules/surgery/brain_surgery.dm
#	code/modules/surgery/cavity_implant.dm
#	code/modules/surgery/coronary_bypass.dm
#	code/modules/surgery/gastrectomy.dm
#	code/modules/surgery/healing.dm
#	code/modules/surgery/limb_augmentation.dm
#	code/modules/surgery/organ_manipulation.dm
#	code/modules/surgery/revival.dm
#	code/modules/surgery/sleeper_protocol.dm
#	code/modules/surgery/surgery_helpers.dm
#	code/modules/surgery/surgery_step.dm
#	code/modules/unit_tests/_unit_tests.dm
#	code/modules/unit_tests/designs.dm
#	code/modules/unit_tests/icon_state_worn.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png
#	icons/map_icons/clothing/head/_head.dmi
#	icons/map_icons/clothing/shoes.dmi
#	icons/map_icons/items/_item.dmi
#	icons/mob/huds/hud.dmi
#	icons/mob/inhands/64x64_lefthand.dmi
#	icons/mob/inhands/64x64_righthand.dmi
#	icons/obj/machines/computer.dmi
#	tgui/packages/tgui/interfaces/OperatingComputer.jsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/types.ts
#	tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
#	tools/icon_cutter/check.py
2026-02-12 23:50:09 -05:00
Roxy 29fc28b09c Revert "Replaces T2 Tools with T1 Versions in CE Toolbelt (#92872)" (#95134)
## About The Pull Request

Following an extensive conversation in maintainerbus that was about a
lot of things, this PR was used as an example of something that probably
shouldn't have been merged in the first place, in the context of a
larger point about the relative merge chance of a change versus a revert
to that change. (This is intentionally vague because I'm not even going
to attempt to summarize the conversation it was long and you should
probably just read it) From the way it was talked about there was vague
support from other maints that it should be reverted, so I'm making this
because I didn't agree with it being merged either and I want to re-open
the floor.

## Why It's Good For The Game

There was a LOT of discussion about this both on GitHub and in the
discord, but I'm going to focus on addressing the why it's good for the
game given in the original PR and in the comment made by cobby (the
maint who merged it).

>It encourages heads to play their subdepartment’s roles instead of
their own, which is to manage their department, delegate tasks, and
teach newer players.

Heads *do* play their department's role, that is very much an aspect of
being a head of staff. The majority of them get unique items designed
specifically to make the duties of their department easier, and I don't
think there's anything wrong with that! I'm not sure where this
perspective of it as a zero-sum game where they can either delegate and
manage the department or they can solo the department to the detriment
of their subordinates came from, but any competent head can do both!

>It encourages bad command players to take the role for the gear instead
of leaving it for the people who want it for the command.

This is basically a continuation of the first point but with the framing
that people who consider the gear a reason to play the job are Bad
Players and are taking the role away from someone better who would play
it Properly. Again, many heads can and do balance both aspects of the
job, and I'm not sure why this framing was considered reasonable. Heads
tend to be experienced in all aspects of the department they're a head
of, and being able to step in when needed and get shit done because you
have both the experience and better tools sells the fiction of you being
the head honcho, someone that can be relied on and was put in charge for
a reason.

With this in mind, I'm aware that these points were made with the
unspoken assumption that the hypothetical player being described is bad
because they're violating Rule 5: "Players in vital job roles require a
minimum amount of effort." My problem with that is, why is this being
solved with code? If a head of staff is failing to perform their duties
so grossly that it feels necessary to take away anything that might
tempt them to take the role, why are they not being dealt with
administratively? Why do the majority that can handle the job have to
take a downgrade because of it? Hell, Rule 5 even states "you should be
a reliable worker for your department", and then after that states that
"As an upside, being THE BOSS allows you to dictate the workflow of your
department as you like", which to me sounds like it is explicitly
expected that heads will both perform the duties of the department and
delegate/manage their subordinates as needed. So why was the former seen
as the wrong way to play the job?

>The heads should be about management of the department, and shouldnt
have gear incentives to forgo that aspect if it is needed in the round.
Giving them better tools FORCES them into job+ role or at best a loot
pinata because otherwise theyre not making full use of their roundstart
provided tools without it being awkward, and thats only if someone gets
in that isnt seeking the free tool upgrades to begin with.

Cobby's comment broadly supported the points made in the PR body, with a
few additions about how if a CE doesn't want to be "job+" then they're
in an uncomfortable position because they have this desirable gear
they're not going to make use of. This is a strange argument to me,
because as I just said in the last paragraph, *as a head of staff you
should be doing at least a little of the department's job*. There's room
for varied play-styles obviously, but if you consistently feel like
you're being forced into the position of doing Engineering as the Chief
Engineer such that having the upgraded tools feels like it's wasted on
you... Maybe you shouldn't be the Chief Engineer? I don't say that in a
rude way, I just don't know what the appeal of the job would be
otherwise, if you enjoy bureaucracy then the HoP is seen as the epitome
of that with little to no formal duties otherwise, I just don't see why
CE would appeal to someone who does so little Engineering they see the
tools as an uncomfortable burden they'd rather not have.

>Also dislike the idea that heads just get to skip part of the research,
they should want said research just as badly as the rest of the
department.

The last point that was made repeatedly was the idea that existence of
these tools cause a tech tree skip, and this is a bad thing because it
means the CE has no incentive to push for unlocking the Experimental
Tools node because they got theirs already. Setting aside that again,
this framing applies only to absolute worst-case players who probably
should be dealt with administratively, it doesn't even make sense if you
have experience playing Engineering. Experimental Tools gates RCD
upgrades, the node that gives you the silo link and the thing that lets
you spawn already wired machine frames and air alarm, APC, and fire
alarm circuits, even the most selfish, unfit, department soloer CE is
going to get Experimental Tools unlocked so they (and their co-workers)
can get RCD upgrades.

Overall it seems like a ton of the justification for this PR hinged on a
false dichotomy that heads can either delegate and manage or do the job
of their subordinates, and it just doesn't cohere.

## Changelog
🆑
balance: The CE spawns with upgraded tools again
/🆑
2026-02-12 17:58:08 -08:00
Phantastic-Swan 67b120813d fixes alternate job titles not showing when a new head joins (#5212)
## About The Pull Request

Fixes the departmental announcement of a new head joining.


Before:

<img width="580" height="54" alt="Image"
src="https://github.com/user-attachments/assets/4d84b435-3924-466a-a62f-39d90afd41fc"
/>

After:

<img width="687" height="104" alt="image"
src="https://github.com/user-attachments/assets/4af0d87a-8f7d-4c0f-860c-1f78ef143bf9"
/>


## Why It's Good For The Game

Fixes a bug.

## Proof Of Testing

<img width="687" height="104" alt="image"
src="https://github.com/user-attachments/assets/4af0d87a-8f7d-4c0f-860c-1f78ef143bf9"
/>

## Changelog

🆑 Swan
fix: fixes the departmental head joining announcement
/🆑
2026-02-04 09:26:09 -05:00
Y0SH1M4S73R 6f37db300b Gives non-standard nullrods the rest of the features common to regular null rods (#94980)
## About The Pull Request

Non-standard null-rods (the skateboard, bow, revolver, carpsie plush,
and eswords) did not receive all the common characteristics of regular
null rods in #93394. In particular, they were not given the
`UNIQUE_RENAME` obj flag, and they did not receive the ability to track
how many cultists they've crit/killed and be turned into cult weapons
when sacrificed. This PR corrects that by extracting the cult kill
tracking behavior to a component, while doing the following refactors to
ensure complete compatibility:

- Skateboard items now move themselves into the skateboard vehicle they
spawn on use, instead of deleting themselves. This was necessary for the
holy board to keep its custom name/desc and cultist kill count.
- Guns (which the bow technically is) will track cultists killed/crit
with bullets fired from them by a mob with a holy role.
- A signal can now be used for an item to provide an arbitrary response
when an offer rune underneath it is activated.

## Why It's Good For The Game

I just wanted the holy eswords to be renameable for chaplains to provide
plausible deniability for the possession of actual eswords, but after I
discovered this consistency issue, and felt the need to fix it.

## Changelog

🆑
fix: The holy energy swords and the carp-sie plushie can once again be
renamed
fix: The holy energy swords and the carp-sie plushie can once again be
sacrificed by cultists to spawn different weapons based on how many
unique cultists the chaplain has crit or killed with them
qol: The holy skateboard can be renamed like other null rod variants can
fix: Unusual null rod variants like the holy skateboard and bow can now
be sacrificed by cultists to spawn different weapons based on how many
unique cultists the chaplain has crit or killed with them. The bow and
the burdened chaplain's revolver, in particular, also count cultists
crit or killed by arrows/bullets fired from them by the chaplain.
/🆑
2026-02-03 22:23:20 -05:00
Ssalty b921d8c335 Departamental Sec (#5146)
# To be testmerged so we can see if players like it.

Readds departmental sec, assigning officers to departments of choice/at
random with extra access, an armband, and a radio. This started because
of a bug adding depguarsd with the voucher PR [woops] and then us
getting good feedback on the gameplay during the bugged rounsd.

**This does not remove departmental guards. They remain as individual
lower-stakes entities.**

## Why It's Good For The Game
Allowing security access to the departments they are meant to protect
reduces much of the frustration involved in actually doing their job.
Dealing with people asking "why?" when screaming to let them in due to a
changeling massacring people is potentially more frustrating for the
security player than the part about getting killed 3 times and round
removed by said ling.

The RETA system, while helpful for letting swathes in, does not fulfill
it's job if people inside are dead. How many people know the RETA system
exists, even?

A concern I am aware of is that the roles of sec and depguard might be
blurred with sec having access. I believe they won't change in the
slightest with this change. A couple examples of problems one might
anticipate to be irrevocably altered by having department sec:

Ling in science, killing people!
Currently:
Sec bangs on the door and either hos, a worker, depguard or ai let them
in to fight and die. The depguard can be there, too, as part of the mass
of NT cannon fodder.
With this change:
A. The sci-assigned officer was in sci already, and the depguard and
officer fight together until the current scenario happens all over
again.
B. The sci-assigned officer was looking for the ling in maints. Proceed
to current situation, but one can also wait on one of the 1-3 officers
who should genuinely be keeping an eye out in that area.

Sec patrols...
Currently: 
Depguards sit in departments, secoffs pace around maintenance and halls
like they're high, gearing up in between.
With change:
Depguards sit in departments, aware they might live a few seconds longer
if something DOES come.
Secoffs pace around maints AND their departments, however, there's a
chance they engage with RP with non-sec and non-antags as they now
actually cross paths with them other than when they die or need
something, and there's also a rather low chance that a depguard's job is
"taken" by having reinforcements. A secoff being there with the
depguards helps them do it better, Barney would never take down the
whole invasion himself.

Sec stealing things from departments
Currently:
A secoff has a harder time printing off, say, cells without permission
from science. If they do it, they risk the wrath of the dep guard, which
has the authority in their domain to stop it. As well as just being
fired after anyone in said dept reports them.
With change:
Sec might print off a few tools without asking, or take a medkit, at
which point IC issue, conflict is created among non-antagonists, there's
RP about corrupt cops now.

I just do not see a possibility for this to do something that isn't a
rather small amplification of a preexisting phenomenon in the game..

## Proof Of Testing

<img width="656" height="324" alt="AAAAAAAAAAA"
src="https://github.com/user-attachments/assets/a81666df-d16d-47d1-93f9-f6d35645520d"
/>

🆑
add: Sec now once more gets assigned to departments, granting bonus
access
/🆑
2026-02-03 05:44:54 +01:00
Ssalty dd5915f83d Security: A lot of changes (#5132)
## About The Pull Request

Special thanks to Cato for helping me with decisionmaking and balancing
on this one [in a bunch of things here, but not all.]


This PR changes a lot of things so I will be breaking it up into
numbers.

# 1. Security Vouchers: Primary
Ported from monkestation, securirty no longer starts with a taser, but
instead with two vouchers. A utility and a primary. All sec should get a
utility, the HOS, ~~medic~~ and detective do not get a primary voucher.
 
The vouchers can be redeemed at the same vendor that you get
flashbangs/cuffs/donuts from.
The choices are:
- The default taser
- The disabler and an energy shoulder holster to pair
- A pepperball gun and a single clip
- A flash-bulb riot shield


Why the change?:
- Warden might not be there to give you your preferred loadout, so even
on lowpop, you get your preferred gear up to some extent. We're not
giving out hellfire lasers here. It adds nothing that couldn't have been
done before, frankly.
- The weapons are availible roundstart already, with the exception of
the pepperball, which was adjusted to match
- More variety in security playstyle, allows sec officers to personalize
and play in (mostly) different ways.
- The disabler, which is the question I always get, is left in due to it
being present in the game as a standalone tool AND some players just
having a preferrence to shoot themselves in the foot, or don't like
fiddling with modes on the go.


The pepperball gun now has a higher shot delay, which is offset by how
the weapon makes or breaks fights by applying item drop, knockdown and
temporary blindness with it's reagent. Pair it with a baton and any
antag who forgot a gas mask just lost.

# 2. Security Vouchers: Utility
The choices are:
- Barrier nades x2
- Stingbangs x2
- Sec laptop, a laptop with relevant programs on it. Lets you view
cameras on the go, among others.
- Justice Helmet
- Donuts
- Weighted Space Law/Corporate Regulations. More on that later.
- Security barrier projector. More on that later.
- A pair of pinpointers, linked with eachother

## Weighted Space Law and Space Law changes:
I'll call it space law but it's corporate regulations ok?
- Space Law actually links you to wiki. Still teaches you legalese, so
just use it more than once to open it.
- Weighted Space Law, otherwise known as Space Law: Collecter's Edition.
With a gold-coloured-metal-plated trim. Allows you to beat people with
space law for 13 damage, a chance to teach them legalese so they can sue
you after, and a funny message. Overall a gimmicky thing for more
interesting interactions.

## Security Projector changes
- Security projector can now CUFF people. Use it as handcuffs to do so.
- The cuffs can be EMP'd away at a 50% chance. Makes sense according to
what they are and it works for their general purpose of "infinite cuffs,
but no cuffs". THE CUFFS FIZZLE OUT IF YOU LEAVE 1 SCREEN OF RANGE. This
is because of the sheer amount of space you can save on cuffs by taking
this 1 item in their stead, with the condition of "if you can keep them
by you until you sit them in their cell.". Worse than cuffs, but a huge
timesaver if you feel confident in your skills as an officer.


# 3. Breaching Hammer Buff
In the current meta, the breaching hammer is dead. Long-gone. Frangible
rounds in shotguns, sawn off or otherwise, are much more worth it than
any amount of cooperated breaching which leads to yourself being shocked
as they are NOT insulated. For that reason, the hammer now takes just 1
person to breach and is resistant to electricity. It's easier to get
than the frangible shotgun, it needs potentially less space counting the
shots, is infinite, can be even used for dealing with insulated things
as security. Simple as. Item revival, way behind meta, or even just
convenience.


## Proof Of Testing

<img width="1409" height="684" alt="aaaaaaaaa"
src="https://github.com/user-attachments/assets/782c23ca-11bb-4ba7-8294-80086af1b134"
/>
<img width="307" height="269" alt="bbbbbbb"
src="https://github.com/user-attachments/assets/8d75a1bb-fb2e-44d8-8338-f22ed6be62da"
/>
<img width="260" height="311" alt="ddddddd"
src="https://github.com/user-attachments/assets/51229031-0a6d-480c-8021-0f57cd8496dc"
/>
<img width="193" height="181" alt="ccccccc"
src="https://github.com/user-attachments/assets/97254655-60f7-4713-9673-bb6b3071d97e"
/>
## Changelog

🆑
add: Security starts with a primary and utility voucher for redemption
in their equipment lathe to make a choice for what they want to use as
their main, nonlethal weapon that round, and a bonus piece of gear on
the side.
add: Corporate Regulations: Collector's Edition, a space law book with
some heft and blunt force to it...
add: Security holobarriers can now additionally create holographic cuffs
around people, which have a chance to disappear when EMP'd, and
disappear if they leave the projector's range of 9 tiles [1 screen]
add: Pepperball magazines now in security vendor, premium section
balance: Pepperball guns fire much slower, fire delay 8
balance: Breaching hammers can be used by 1 person to breach and are now
insulated
fix: Space law books now link our website's space law
/🆑

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
2026-01-29 12:40:15 +01:00
MrMelbert bf22a388ca People become desensitized to death from exposure (#94924)
## About The Pull Request

Desensitized is no longer binary yes/no, now scales from 0.1x to 1x (or
beyond, I guess)

Desensitized jobs start as 0.5x desensitized (which is the threshold for
being considered "truly desensitized")
Some antags are now 0.1x to 0.25x desensitized

Witnessing death of a fellow human gives you slight desensitization
(currently -0.025x).
A normal crewmember, after witnessing 20 deaths, is on par with a
roundstart desensitized crewmember.
Likewise a desensitized crewmember has almost no reaction to death after
witnessing 20 deaths.
Your own deaths count towards this value.

There's an achievement for managing to go from 1x to 0.1x across the
course of an entire round.

## Why It's Good For The Game

This is intended to contribute to the "story" people face across the
length of a round.
Rounds with few overall deaths results in crewmembers regularly getting
shocked, but bloodbaths results in crewmembers "dehumanizing and facing
the bloodshed".

## Changelog

🆑 Melbert
add: Desensitization to death is no longer binary - some antagonists are
now more used to it than others.
add: Witnessing the death of a fellow humanoid (or dying yourself) will
slightly desensitize you to future deaths.
add: Adds an achievement for managing to max out desensitization across
a round.
add: Desensitized crewmembers care less when splattered with blood.
add: Holodeck mobs have a reduced death mood impact.
/🆑
2026-01-28 20:22:07 +00:00
Nick 12fabce357 Katanas now have their own respective sheaths, adds leather crafting recipes for katana sheaths (#94939) 2026-01-28 13:09:44 +02:00
BingusTheClown 2e98eef84b Fix Last Command Member Cryo Announcement (#5174)
## About The Pull Request

Properly marks BA, NT Rep, and Blueshield as members of command within
the job flags. (when other parts of the code already consider them as
'command', e.g. the biscuit handout)

## Why It's Good For The Game

Resolves issue:
https://github.com/Bubberstation/Bubberstation/issues/5070

## Proof Of Testing

<!-- Compile and run your code locally. Make sure it works. This is the
place to show off your changes! We are not responsible for testing your
features. -->
<details>
<summary>Screenshots/Videos</summary>

<img width="712" height="325" alt="image"
src="https://github.com/user-attachments/assets/8db7a5e6-96cd-49ee-8e42-426082a8f1ea"
/>

^ The manifest after the RD has cryo'd (Note lack of RD, which is
triggering the variable in the next screenshot), note that the count is
important here.


<img width="380" height="263" alt="image"
src="https://github.com/user-attachments/assets/e5157ce4-5b31-4ae9-a5a0-75e252232c31"
/>

^ The command member count, as the RD is entering cryo. 

Note: Before this fix, the count for this exact setup was `8` as it was
not counting the BA, NT Rep, and Blueshield.

This means that now on lowpop shifts where a BA would sign up, then a
member of command joining and then BA cryo'ing will now have the proper
count and will not fire off a 'last member of command has cryo'd
message'



</details>

## Changelog

🆑
fix: Fix last member of command has cryo'd announcement when there are
still member's of command on board.
/🆑

---------

Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
2026-01-26 11:42:07 -08:00
EEASAS 76813c0f8e Mustard (#94974)
## About The Pull Request
Mustard
<img width="230" height="219" alt="image"
src="https://github.com/user-attachments/assets/a433587a-fe8e-4f4e-ae2c-20b15e000152"
/>
<img width="123" height="115" alt="Captura de tela 2026-01-23 122145"
src="https://github.com/user-attachments/assets/fe0de423-2a8e-48cd-abe2-67eed4c9d394"
/>
I don't know how to sprite this is just a resprite of the other
condiment bottles so it may look off and also i can't actually sprite a
mustard plant or anything
Also makes it so chefs can get mustard bottles in the mail
Mustard

Adds ketchup and mustard to the chef ordering console
fuck ketchup
## Why It's Good For The Game
It's been 10 years without mustard please give me mustard
More variety of condiments. more flavor

I think it's an oversight that the mayo bottle is in the chef ordering
console but not ketchup. come on man
## Changelog
🆑
add: Mustard. find it in the produce ordering computer or receive it in
the mail
fix: Adds ketchup to the produce ordering computer
/🆑
2026-01-24 17:57:45 -05:00
Bloop 68153c2333 Refactors faction lists to use getters and setters and be cached (#94490) 2026-01-19 04:12:35 +01:00
MrMelbert 7645cef613 Allows you to install encryption keys in intercoms and station-bounced radios (#94874)
## About The Pull Request

*All* radios can have an encryption key installed

This includes intercoms and station-bounced radios

<img width="472" height="294" alt="image"
src="https://github.com/user-attachments/assets/8fe8880b-2872-4030-9e42-ced4ce529b31"
/>

These radios are *not* normally freerange, meaning to tune into channels
added by an encryption key, a new button in the radio UI has been added
- "Tune", which tunes you directly into the channel.

This even works with the Syndie key, giving the intercom access to
Syndie channel and the ability to hear all encrypted channels. However,
it will *not* work with a Binary key.

Likewise, any key with language understanding on it will do nothing. I
think **theoretically** we can have intercepted messages in alternate
languages check to see if they have a key of that language with (to
relay a translation instead), but that sounds like a lot of work...

Also this means you can now speak on encrypted frequencies (like
departmental ones) via non-subspace means - ie, when telecomms is
disabled.

## Why It's Good For The Game

To be completely honest, I haven't fully considered the repercussions of
such a change.

Someone just offhandedly mentioned that if they could tune into a dept.
radio via subspace, they would try playing without a headset, and I
thought that sounded fun.

Otherwise, this opens up stuff like departmental intercom systems -
which sounds cool - and in the future we could possibly de-hardcode
freerange settings (like the command intercom).

## Changelog

🆑 Melbert
add: All radios (intercoms and station-bounced) can have encryption keys
installed in them, rather than solely headsets and cyborgs.
add: Existing screwdriver interactions for station-bounced radios and
intercoms have been moved to right click. However, intercoms will still
default to the old behavior if they have no key installed.
qol: Screentips for radios.
/🆑
2026-01-17 10:38:54 -07:00
John Willard aedc5bae7a allowed is now signals based instead of hardcoded slots (#94871)
## About The Pull Request

ID cards/MMI mech access/simple mob access/pAIs now use signals instead
of checking specific slots with mob checks. We do this through mob's
``get_access`` proc that collects all access a mob has with a
collect_access signal.

## Why It's Good For The Game

It looks cleaner and we no longer individually check `check_access` for
every single item that may have access. It's cleaner to put it all
together and check in one go with all the access we've got. This also
makes it easier to add items that hold access that aren't necessarily
IDs but you want to be able to open stuff with.

## Changelog

🆑
refactor: ID checking for access has been reworked, please make a bug
report if anything that's supposed to grant access is not working.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2026-01-16 14:16:22 -07:00
Tad Hardesty e5e06aff43 Fix corner-case runtimes for removed jobs, other minor fixes (#94822)
* Fix runtimes in `/datum/id_trim` and when equipping corpses if a map's
.json file fully removes a job
* Remove unused `/datum/powernet/var/number`
* Fix ctrl+clicking a telescreen to mute it also activating it normally
* Unmark `_liver.dm` as executable
2026-01-12 17:51:24 -05:00
MrMelbert b804e1df79 Revamps security bounties (#94545)
## About The Pull Request

<img width="565" height="201" alt="image"
src="https://github.com/user-attachments/assets/f747992c-82d7-4cd2-9d5c-b94b7de37cdd"
/>

<img width="618" height="108" alt="image"
src="https://github.com/user-attachments/assets/8d5c4e25-87ea-4e53-b9e6-e95e26b3e69f"
/>

- N-spect scanners can no longer print reports

- Clown N-spect scanners have been removed as printing reports was their
primary function

- Security no longer get bounties to loot the brig's equipment. The
contraband bounty is still available.

- Patrol bounties have been reworked. 
- A patrol bounty will give you an area and a number of steps that you
must take in an area.
- To complete the bounty, you must walk to the area and take that many
steps. It's that simple.
   - Your ID card will update you as you progress the bounty. 
- You are rewarded more for larger areas, and less for teeny tiny areas.
- Walking back and forth the same two tiles will not count towards
progress.
- When done, all you need to do is go back to the civ console and press
"send". You don't need to add any items to the pad.
- All security officers can get general patrol bounties (service + maint
+ hallways). Departmental officers can get patrol bounties for their
department.
- And yes, it tracks if your *id card* moves. This means you can strap
your ID card to a drone and it'll count. Get creative if you're lazy.

- ID trims how handle bounty generation. This changes very little,
besides allowing certain trims for certain jobs to add specific
bounties.

- There's now setters for bounties and bank accounts. 

- Fix Bountious Bounty trait by having a `get_reward`

## Why It's Good For The Game

Sec bounties to loot a bunch of miscellaneous things from the brig is...
odd. All it does is deprive your team of equipment should you need it.

On the other hand, patrol bounties are really flavorful, but a bit
cumbersome thanks to needing a hand scanner. By integrating the process
of patrolling *into* the officer's ID card, it means you can just grab a
bounty and go about your business.

The idea is that this'll streamline the process of patrolling a bit and
make it more natural and fun (well, as fun as "walking around" can be.
Which is fun to me...)

## Changelog

🆑 Melbert
del: N-spect scanners can no longer print reports. All it does now is
scan for contraband.
del: Clown N-spect scanners have been removed.
del: Security no longer get bounties to loot the brig's equipment.
Though the contraband bounty is still available.
add: Security's patrol bounties have been reworked. Now, they just
require you to walk around an area for a bit. No scanning necessary.
refactor: Adds setters for bounties and bank accounts. Report any
situations where your bank account is not set correctly.
refactor: ID trims now handle bounty generation. Report any situations
where you get a weird pool of bounties.
fix: Bountious Bounties station trait works again
/🆑
2026-01-11 14:20:11 -05:00
MrMelbert 5ef61fde05 Being drunk makes you a worse surgeon unless you land in the Balmer Peak (also Balmer Peak tweak) (#94674)
## About The Pull Request

1. Balmer Peak voicelines can only trigger if you are of a whimsical
personality
2. If you are drunk, you get worse at surgery (up to 12x worse at 100
drunkness). However if you are within the Balmer peak you are BETTER at
surgery (0.8x).

## Why It's Good For The Game

1. Balmer voicelines are super annoying so I figure it should be
restricted to characters that would say it ICly
2. Being drunk obviously means you're bound to screw up surgery, right?

## Changelog

🆑 Melbert
add: Scientists only say Balmer voicelines if they are whimsical
add: Surgery gets slower if the surgeon is drunk, UNLESS you land in the
Balmer Peak, then it's actually faster.
/🆑
2026-01-04 20:38:22 -07:00
Tad Hardesty 4d7b9be4a2 Fix a variety of grammar errors (#94707)
* Fix uncapitalized sentences, lack of "the", and singular/plural mixup
when inserting items into lathes
* Conform some job descriptions to the pattern used by the majority:
bitrunner, chemist, coroner, janitor, RD, shaft miner
* Remove extra colon from "Open Special Role Information" action buttons
* Uncapitalize "no alerts" / "systems nominal" messages in atmos and
station alert consoles
* Fix incorrect feedback when wrenching down a freezer/heater with its
panel open
* Fix "Thank you for restocking the station!" appearing in the wrong
place in the cargo export summary
* Fix "pizza boxs" on cargo manifests
* Fix mid-sentence capital "The" when:
  * Examining walls with mounted items
  * Inserting parts into machine frames
* Fix "Pete's the udder"
* Fix double-"the" and stringified datum typepath when scooping reagents
* Fix missing spaces in door remote descriptions
* Fix uncapitalized "Nanotrasen" in emergency respone drone ghost role
poll
* Fix double-space in canister opening admin log
* Fix missing "the" when casting bear-form spell
* Fix "auxiliry" in NebulaStation airlocks
* Add `check_grep.sh` rules against "maintainance", "maintainence", and
"maintenence"
* Fix "maintainance" in NebulaStation airlocks, TCG cards, and in
examines of netpod, byteforge, quantum server
* Fix "maintainence" in examines of autolathe, flatpacker, cryo cell,
ore silo, floodlight, power storage unit, turbine, chromatography
machine, ChemMaster, all-in-one grinder, smoke machine, R&D machines,
vending machines
  * Fix "maintenence" in Sulaco ruin terminal
* Add missing periods to:
  * "That's X." examine block header
  * steal objective explanation text
  * atmospheric shield generator examine
  * autolathe examine
  * telescreen examine
  * accidentally stepping on a mousetrap
  * netpod examine
  * byteforge examine
  * hat/mask visor toggling
  * bizza box stack examine
  * ChemMaster 3000 examine
  * floodlight examine
  * power storage unit examine
  * ChemMaster interact messages
  * disposal bin animal eject message
  * techfab examine
  * vending machine examine
  * flatpacker examine
* Fix name capitalization/propriety of:
  * big manipulator
  * DeForest first aid station
  * Christmas tree
  * Thunderdome plaque
  * commission plaque
  * chalkboard coffee menu
  * experimental destructive scanner
  * scanner array
  * prison cube
  * RaptorDex
  * atmospheric shield generator
  * high-performance liquid chromatography machine
  * all-in-one grinder
  * keycard authentication device
* Fix plurality of:
  * fake stairs
  * HUDs
  * restaurant and bar seating
* Fix misc grammar/typos in:
  * recharging station description
  * worm description
  * surgery tray description
  * access failure message of restaurant portal
  * mysterious pillar description
  * Pennywise painting description
  * floodlight examine
  * power storage unit examine
  * flatpacker examine
* Remove extra newline from "Debug Z-Levels" verb
2026-01-03 21:34:59 -07:00
Leland Kemble a2d2eedc73 Moves talking nullrod claymore init proc into talking nullrod claymore subtype (#94690)
## About The Pull Request

Spellblade/talking isn't a real subtype, it's supposed to be
claymore/talking, and these are causing two extra empty nullrod subtypes
to be added to GLOB.nullrod_variants. Also, it means that the gimmick of
these nullrods don't work at all.

## Why It's Good For The Game

fixes #94491
The talking sword will talk

## Changelog
🆑

fix: Nullrod possessed swords will talk
fix: Nullrod variant selection menu will no longer have three normal
nullrods as options

/🆑
2026-01-03 18:54:46 +01:00
SmArtKar a4f0dcb76f Adds flaying, human butchering and limb surgeries (#94612)
## About The Pull Request

Merry Christmas!

This PR expands on the more gruesome areas of chef content, such as
cannibalism.
Human limbs can now be individually butchered for their meat and skin
with a knife or another butchering implement once the skin has been cut
and retracted (forks now can be used as bootleg retractors). If the limb
contains organs, those will need to be removed first, which also can be
quickly performed with a butchering tool at the cost of damaging the
inhards (head and chest will require the bone to be cut first, which can
be done with a butcher's cleaver if you don't have a saw)
You can also butcher humans whole by right clicking them with a
butchering implement on combat mode, which will attempt to gut/cut apart
the selected limb. Obviously this requires the limb to be prepped first,
so meat hooks/kitchenspikes now allow mobs strung on them to be operated
on without needing drapes. Its a pretty bad spot to be performing
surgeries at though, so beware! Torsos can only be butchered after all
other limbs have been. The gutting/butchering delay is based off the
owner's stat, halving if the limb is detached and doubling if the owner
is still alive and kicking.

<img width="392" height="265" alt="dreamseeker_D7QWbWKStd"
src="https://github.com/user-attachments/assets/050d7c25-3572-4b02-ae93-d8efefe54885"
/>

(The video is too large for github)
https://streamable.com/459a0y

After being butchered, most limbs will leave behind a nonfunctional
skeletal limb (with exceptions like jelly limbs with no skeleton inside)
which is always disabled. Skeleton chests husk their owner, so you'll
need to replace it first.
Gibbers now source their meat from the victim's limbs (and not their
species) at an RNG-based percentage based on the matter bin's tier.

As to allow individual limbs to be butchered, you can now perform (some)
surgeries on individual limbs. There are some obvious restrictions like
zombification or bioware surgeries, but most of the ones that make sense
can be performed on someone's chopped off head as long as you've got the
tools.
Wounds also contribute to surgeries now, major slash wounds count as
cut/open skin (and sealing the vessels would reduce their bleed rate),
and critical blunt wounds count as sawed bones.

I've refactored gibbers, butchering and meat spike code as well as fixed
some backend bugs while I was at it.

## Why It's Good For The Game

While rather gruesome, I feel like the freedom which these mechanics
provide fits us pretty well. We already have plenty of nasty stuff and
this doesn't really go that much further, and a chef serving their own
leg in their dish is pretty funny. (Also you can scrape plasma off
plasmamen bones)
2025-12-31 12:55:39 -06:00
MrMelbert 12670a9dab Deletes the warden's evidence bag (#94639)
## About The Pull Request

Warden's bag spawns with nothin' but their box. 

## Why It's Good For The Game

I understand the thought process behind giving sec-offs evidence bags
...but the warden doesn't leave the brig - you know, the place where you
readily have a supply of bags?
Idk why *they* need to spawn with one. 

## Changelog

🆑 Melbert
del: Wardens no longer spawn with an evidence bag
/🆑
2025-12-29 21:37:50 -05:00
Leland Kemble 8d3bbbd0a9 Gives the Chief Engineer workboots rather than sneakers (#94630)
## About The Pull Request

Changes the Chief Engineer's default shoes to workboots, from brown
sneakers. Also in their garment bag.

## Why It's Good For The Game

You're telling me our CHIEF engineer, our FOREMAN, is wearing SNEAKERS
to go work with their death machines? I don't think so. This distinction
has existed since the invention of work boots a full decade ago, and I
don't think it was a intention then.

They just look better, especially when they're inevitably covered in
oil.

## Changelog
🆑

balance: took away the CE's sneakers and gave them work boots.

/🆑
2025-12-29 13:00:49 -05:00
Bloop 53ed83bb9d Makes some more lists lazy (#94388)
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-12-28 19:57:42 +01:00
Leland Kemble 3a351994f4 Makes it so security officers don't spawn in walls (#94525) 2025-12-19 14:21:23 +01: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
Bloop 2ab2be0f37 Guards against qdeletion in afterattack (#94211) 2025-12-10 11:33:06 +01:00
Thunder12345 1d270f5f27 Converts pre-rework generic heretic gear into chaplain clothing and a null rod (#94363)
## About The Pull Request

Reused the old pre-rework heretic robe and blade assets as a new set of
chaplain gear and null rod option.

Replaced the last few existing uses of the now spriteless generic robe:
- Deathmatch, changed heretic warrior to use blade robes
- Deathmatch, changed ripper to use the new chaplain armour
- Tribal mothman legion corpse, changed to use new chaplain armour
- Heretic preview and hallucination, changed to use rust robes
- Heretic virtual domain, changed to use rust robes

<img width="127" height="131" alt="image"
src="https://github.com/user-attachments/assets/690e848e-5191-44d4-bd58-5e338fa2aa4e"
/>

## Why It's Good For The Game

Chaplains are the playground of old magic content assets, where they
find a second life as cosplay outfits. Chaplains can already cosplay
cultists, it's only fair that they can pretend to be a heretic as well.

## Changelog
🆑
add: Added a new set of chaplain armour based on the generic heretic
robes unavailable since the path rework.
/🆑
2025-12-07 19:50:19 +00: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
Roxy 9f7dc7c970 [MDB IGNORE] Make /obj/item/stamp abstract, create proper granted stamp subtype (#94139)
## About The Pull Request

There is technically an `/obj/item/stamp/granted` in that one traitor
objective refers to it and tries to override a proc on it thus making it
a valid type, but not really. This changes the base `/obj/item/stamp`
from being the granted stamp to being an abstract type, and creates a
proper subtype for the granted stamp.

## Why It's Good For The Game

Base types being concrete outside of scenarios where its intuitive are
very annoying

## Changelog
🆑
code: makes /obj/item/stamp abstract, creates /obj/item/stamp/granted
/🆑
2025-12-02 16:53:07 -07: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
nevimer baf3837ae8 Merge remote-tracking branch 'tgstation/master' into upstream-2025-11-29
# Conflicts:
#	_maps/RandomRuins/SpaceRuins/derelict_sulaco.dmm
#	_maps/RandomRuins/SpaceRuins/garbagetruck2.dmm
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	_maps/map_files/tramstation/tramstation.dmm
#	code/_onclick/hud/new_player.dm
#	code/datums/components/squashable.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/datums/diseases/chronic_illness.dm
#	code/datums/status_effects/buffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/stamcrit.dm
#	code/game/machinery/computer/crew.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/wall_mounted.dm
#	code/game/turfs/closed/indestructible.dm
#	code/modules/admin/view_variables/filterrific.dm
#	code/modules/antagonists/heretic/influences.dm
#	code/modules/cargo/orderconsole.dm
#	code/modules/client/preferences.dm
#	code/modules/events/space_vines/vine_mutations.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/carbon/human/death.dm
#	code/modules/mob/living/carbon/human/species_types/jellypeople.dm
#	code/modules/mob/living/damage_procs.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mob_spawn/mob_spawn.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/projectiles/guns/ballistic/launchers.dm
#	code/modules/projectiles/guns/energy/laser.dm
#	code/modules/reagents/chemistry/machinery/chem_dispenser.dm
#	code/modules/reagents/chemistry/reagents/cat2_medicine_reagents.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/medicine_reagents.dm
#	code/modules/surgery/healing.dm
#	code/modules/unit_tests/designs.dm
#	icons/mob/inhands/items_lefthand.dmi
#	icons/mob/inhands/items_righthand.dmi
#	tgui/packages/tgui/interfaces/ChemDispenser.tsx
2025-11-29 22:49:21 -05:00
Joshua Kidder 7a3ad79506 All camelCase (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use snake_case. UNDERSCORES RULE! (#94111)
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.

<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>


I'll upload the .cs script I used to do it shortly.

## Why It's Good For The Game
Just minor code cleanup.

Script used is located at https://metek.tech/camelTo-Snake.7z

EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder

This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
    static async Task Main(string[] args)
    {
        var readFile = new FileStreamOptions
        {
            Access = FileAccess.Read,
            Share = FileShare.ReadWrite,
            Options = FileOptions.Asynchronous | FileOptions.SequentialScan
        };
        FileStreamOptions writeFile = new FileStreamOptions
        {
            Share = FileShare.ReadWrite,
            Access = FileAccess.ReadWrite,
            Mode = FileMode.Truncate,
            Options = FileOptions.Asynchronous
        };
        RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
        Dictionary<string, int> changedProcs = new();
        string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
        Regex camelCaseProcRegex = new(regexPattern, regexOptions);

        string snakeify(Match matchingRegex)
        {
            var vals =
            matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
            var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
            string logString = $"{vals[0]} => {newVal}";
            if (changedProcs.TryGetValue(logString, out int value))
            {
                changedProcs[logString] = value + 1;
            }
            else
            {
                changedProcs.Add(logString, 1);
            }
            return newVal;
        }
        var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();

        // uses default ParallelOptions
        // https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
        await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
        {
            var reader = new StreamReader(filePath, readFile);
            string oldContent = await reader.ReadToEndAsync();
            string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
            if (oldContent != newContent)
            {
                var writer = new StreamWriter(filePath, writeFile);
                await writer.WriteAsync(newContent);
                await writer.DisposeAsync();
            }
            reader.Dispose();
        });
        var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
        foreach (var pair in logToList)
        {
            Console.WriteLine($"{pair.Key}: {pair.Value} locations");
        }
    }
}

```

## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
2025-11-27 15:50:23 -05:00
Roxy 28db621a92 Fixes for 81a8829dbc 2025-11-12 18:18:52 -05:00
Roxy 71faa643bf Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-12 2025-11-12 16:44:13 -05:00
Ghom 81a8829dbc bridge assistant and veteran advisor PDAs (inside backpack) are now imprinted automatically (#93850) 2025-11-12 17:12:07 +01:00