4356 Commits
Author SHA1 Message Date
RoxyandThe Sharkening 26d7f00a76 Roxy Comments 2026-04-11 08:57:59 -06:00
Alexis 5c5a636485 Merge branch 'master' into upstream-feb12-2026 2026-03-02 07:42:16 -05:00
b535552bd3 Cybernetic Reshuffling (#5271)
## About The Pull Request
Moves combat cybernetics to the combat cybernetic techweb node, and
section in the fab.
## Why It's Good For The Game
Things that are illegal, dont look illegal, and thats bad. This makes
the combat implants visible and undeniable.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

<img width="616" height="204" alt="image"
src="https://github.com/user-attachments/assets/9cc5ae4f-7c2a-487b-b586-4264ddaa2bc0"
/>

<img width="617" height="151" alt="image"
src="https://github.com/user-attachments/assets/761a05b1-6542-43cf-b330-4de47f8dc812"
/>

<img width="447" height="322" alt="image"
src="https://github.com/user-attachments/assets/6add6153-de4a-480e-8339-62246a25a239"
/>

</details>

## Changelog
🆑
fix: Combat implants are in the combat implant section. Where you would
think they would be.
/🆑

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
2026-02-25 20:35:50 +01:00
axietheaxolotlandGitHub 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
ArcaneMusicandGitHub ea883deda7 Decreases multitool credit cost, increases quantity from vending machines. (#95076)
## About The Pull Request

Based on feedback from #94903, this PR decreases the cost of multitools
from the youtool vendor, as well as increases the quantity available
from the premium section from 2 to 4. The cost has been adjusted from
300 credits -> 150 credits each.

This change is being atomized out of the linked PR above, but is
otherwise relatively simple.

## Why It's Good For The Game

To quote the previous PR this was atomized out of:

> Multitools are considered to be standard job equipment for about 1/3
of the jobs on station, and the jobs that don't have multitools,
assistants included, typically will make obtaining one part of their
roundstart routine. It was looking into this that led me to learn that
multitools are currently sitting at 300 credits, which, while expensive,
just means that roundstart players are more tempted to just break into
or ask cargo/engineering for a multitool instead of ever buying one, and
for good reason. It's too good to pass up, especially when it's only one
door or plastic flap away for most players.

> So, to try and incentivize people to buy them from vendors over the
alternative, I've decreased the price to be within the range for regular
crew, but expensive enough for assistants so that they're encouraged to
look for/make a few credits, or wait a moment or two before they jump
into them.

## Changelog

🆑
balance: Multitools cost has been decreased from youtool vendors, and
their stock increased (150 credits, 4 stock).
/🆑
2026-02-08 14:15:01 +11:00
SmArtKarandGitHub f58b8511f0 Refactors effect_system (#94999)
## About The Pull Request

This PR refactors ``effect_system``s to be a bit easier to use by
getting rid of ``set_up``, allowing ``attach()`` to be chained into
``start()`` and refactoring most direct system usages in our code to use
helper procs.

``set_up`` was unnecessary and only existed to allow ``New``'s behavior
to be fully overriden, which is not required if we split
sparks/lightning/steam into a new ``/datum/effect_system/basic`` subtype
which houses the effect spreading behavior. This allows us to roll all
logic from ``set_up`` into ``New`` and cut down on code complexity.
Chaining setup as ``system.attach(src).start()`` also helps a bit in
case no helper method exists

I've added ``do_chem_smoke`` and ``do_foam`` helpers, which respectively
allow chemical smoke or foam to be spawned easily without having to
manually create effect datums and reagent holders.

Also turns out we've had some nonfunctional effect systems which either
never set themselves up, or never started, so I fixed those while I was
at it (mostly by moving them to aforementioned helper procs)

## Why It's Good For The Game

Cleaner code, makes it significantly easier for users to work with. Also
most of our effect system usage was copypasta which was passing booleans
as numbers, while perfectly fine helper procs existed in our code.

## Changelog
🆑
refactor: Refactored sparks, foam, smoke, and other miscellaneous effect
systems.
refactor: Vapes now have consistent rigging with cigs using the new
system.
fix: Fixed some effects never working.
/🆑
2026-02-03 22:23:09 -05:00
MrMelbertandGitHub baeb6e4fe2 Adds doppler radar towers with an anomaly core "upgrade" (#94893)
## About The Pull Request

1. Adds doppler radar towers to Lavaland and the Icemoon

Weather radios now need a doppler radar on the target z-level to get an
accurate reading. Without a radar tower, the expected timing of incoming
storms will be off by a random factor.

Lavaland and the Icemoon both have a few towers mapped into them. 

The towers themselves can be constructed with plasteel if they some how
get destroyed. They also have an in built GPS.

Each tower requires a cable connection to function. They need a pretty
small amount of power to function.

2. Adds anomalous radar towers

Attaching a weather anomaly core to a radar tower results in an
anomalous radar tower.

<img width="260" height="409" alt="image"
src="https://github.com/user-attachments/assets/3430b0aa-0bbc-44df-ae75-67c2c3cca5a6"
/>

This allows you to cancel ongoing storms **or summon storms yourself**. 
Each cancellation and summon uses a percentage of the core's charge.
After the charge runs dry, the core is destroyed, and the tower goes
back to being normal.

Yes, you can construct a radar tower on the station to summon storms on
the station, *including* rad storms.
All storms summoned abide by radstorm rules, meaning maint is safe. 
Summoning onto the station uses significantly more charge.

3. Limits weather anomaly cores to 5

Because they are charge based and spamming weather events all round
would be annoying, slightly lowers the max core count.

## Why It's Good For The Game

Weather manipulation seems super appropriate for weather anomaly cores.
Initially it was just going to be the machine, but then I thought "what
if I want the frame of the machine to be available roundstart on
Lavaland to encourage cooperation with miners" and then I thought "what
if it tied into the weather radios, which opens up rare sabotage
methods"

So that's how we got here. The towers exist to facilitate the anomaly
use while also allowing enterprising traitors to sabotage, potentially
leaving their target unaware in a storm.

## Changelog

🆑 Melbert
add: Adds doppler radar towers to Lavaland and the Icemoon. These towers
ensure weather radios have accurate readings.
add: Adding a weather anomaly core to a radar tower upgrades it, giving
you control of weather - allowing you to cancel storms or even spawn a
weather event of your choice. However, the core will expire after use,
requiring replacement.
add: You can construct radar towers with plasteel. Even on the station.
Yes, you can summon weather onto the station.
balance: Limits weather anomaly cores to 5. 
/🆑
2026-01-28 20:04:50 +00:00
ArcaneMusicandGitHub fe266c28dd Minor spelling mistake in Slime Management Console (#94978)
## About The Pull Request

The Slime Management Console will include a random stored_monkeys in a
to_chat if there aren't enough. This removes it so that it reads better.

## Why It's Good For The Game

Reads like proper english in a player facing console.

## Changelog


🆑
spellcheck: The slime management console no longer reads a variable name
out incorrectly.
/🆑
2026-01-23 18:01:41 -05:00
SmArtKarandGitHub c74f104c89 Rewrites plasma rigging code to be much more flexible and dynamic, and cover more cases (#94861)
## About The Pull Request
Instead of being snowflake interactions on objects themselves, rigging
things with plasma or welding fuel is now handled on reagents' side via
``on_spark_act``, allowing each reagent to decide how they want to
handle exposure to electric currents or violent heating.
- Obviously plasma and welding fuel cause explosions, but former gains
additional power from electric current being passed through it (same
math as powercells), while latter doesn't explode unless in an enclosed
space, or a high enough current/temperature has been reached, and merely
creates a hotspot instead.
- Napalm and phlogiston create hotspots, or (try to) damage the holder
if they're enclosed
- Sorium, liquid dark matter, TATP, nitroglycerin and flash/smoke/sonic
powders trigger their usual detonation effects, albeit slightly weaker.
- Teslium creates a ZAP, with additional power for a BIG ZAP if it has
been triggered by electric current.
- RDX becomes spicier with temperature and current, similarly to how it
becomes more dangerous when mixed with LE or teslium.
- Gunpowder produces a delayed explosion effect (unless its hot or the
current is high enough, in which case its instant) and causes sparks as
the message claims it does (normal gunpowder explosions also do that)

Plasma and gunpowder rigged items can now be controlled using
stabilizing agent - in its presence, plasma will not explode unless the
used charge is higher than 0.2% of a standard cell's per unit of agent,
while gunpowder will instead spend 0.1 + (charge / 10% of a standard
cell's charge) units of agent to delay its detonation.

Smoke (powder) now produces a visible message and slightly damages lungs
of whoever it reacted inside of, if the container was a mob.
The numbers on plasma/welding fuel rigs should be ***roughly*** the
same. Also lighters can now be rigged in a fashion similar to welding
tools.

Also it turns out we broke light rigging at some point, so now it works
again.

## Why It's Good For The Game

This makes the system much more flexible and allows players to make more
creative IEDs, expanding upon the sandbox aspect of the game. Also I
have an upcoming project bringing IEDs (kind of, in a new form) back,
which is why I wrote this in the first place (but decided to atomize the
PRs).
As for smoke damage, it feels weird to not have any tells when someone
suddenly starts hacking up volumetric amounts of smoke, it makes sense
that they'd struggle a bit after coughing a few dozen cubic meters of
thick vape clouds.

## Changelog
🆑
add: Multiple new reagents such as napalm, sorium, TATP,
smoke/sonic/flash powders and other explosives can now be used to rig
cells or tools.
add: Plasma and gunpowder rigged items can now have controlled current
requirement/delay by adding some stabilizing agent alongside the main
reagent.
balance: Creating chemical smoke inside of a mob now makes them
violently cough it up, damaging their lungs a bit.
fix: Chemically-rigged lightbulbs now once again explode.
refactor: Refactored how power cells, welding tools, lightbulbs,
cigarettes (and now, lighters) handle being rigged with chemicals.
/🆑
2026-01-21 19:21:06 +00:00
ElGitificadorandGitHub bd7969b233 fixes experimentor not ejecting item after irradiate goo failure (and therefore getting locked until deconstruction) (#94917) 2026-01-21 10:44:35 -05:00
BloopandGitHub 68153c2333 Refactors faction lists to use getters and setters and be cached (#94490) 2026-01-19 04:12:35 +01:00
MrMelbertandGitHub 596b785ec5 More medical larp: Stasis bodybags and triage cards (#94709)
## About The Pull Request

1. Adds stasis bodybags, unlocked with cryogenics tech 

These bodybags are portable forms of stasis. However, they wear down
with use, only being able to keep someone in stasis for about 2, 3
minutes before falling apart.

Bodyparts and organs put in the bodybag are also frozen, allowing you to
maintain parts of gibbed people.

You can med scan through the walls of the stasis bag as well. Also you
can med scan through holographics bodybags.

2. Adds triage cards to the medical vendor

Triage cards are small pieces of paper you can write on and stick to
people. They're color coded according to severity, and are intended to
be used in mass casualty events for prioritizing patients.

3. You can pin paper to bodybags

You can pin a sheet of paper to bodybags that people can read, be it
autopsy or whatever.

4. Updates paper interaction code slightly

We have new procs for allowing interactions rather that snowflakes

5. Other forms of stasis apply tumor suppression

Oversight?

## Why It's Good For The Game

I made these a while back to just give medical doctors a few more tools
to play around with beyond the meta tools. Just to get more immersed
into the larp.

Otherwise, stasis bodybags gives Paramedics a tangible upgrade(if you
can call it that), offering a safer way to retrieve patients

## Changelog

🆑 Melbert
add: Adds stasis bodybags, unlocked with cryo tech. They put its
occupants (organ or mobs) in stasis, but wear down over time.
add: Adds triage cards to the medical vendor, a flavor item docs can use
during mass casualty events.
qol: You can pin papers to closed bodybags. Keep organized with your
autopsies.
qol: You can interact with papers in folders and on clipboards
qol: All forms of stasis stop brain tumors
/🆑
2026-01-17 10:37:49 -07:00
Y0SH1M4S73RandGitHub f77680a329 Adds the MOD Storage Module of Holding (+multiple prerequisite modsuit module refactors) (#94467) 2026-01-10 13:16:40 +01:00
MrMelbertandGitHub 36dc39053a Medical larp: Adds vitals monitors to medbay (#94704)
## About The Pull Request

Adds vitals monitors to medbay

<img width="368" height="292" alt="image"
src="https://github.com/user-attachments/assets/af32ef4b-5d20-4d9d-bb0d-bec554dd4dbc"
/>

These are wall mounted monitors that display a patient's state visually:
- The doll on the left shows bodypart damage + missing bodyparts
- The droplet next to the head shows blood level, from a bright red to a
grey
- The top bar shows heart rate (an approximation - stops when dead,
speeds up in hard crit), as well as overall health
- The second to the top shows respiration (stops when not breathing)
- Second from the bottom bar shows oxyloss level
- Bottom bar shows toxloss level

You can **examine** a vitals display to get a condensed health analyzer
output to your chat. (This lets the AI see health scans as well)

They beep as patient conditions betters or worsens, though I didn't add
any sound FX to it (yet), it's just a runechat message.

They can link to most machines that accept an occupant - such as cryo
cells and stasis beds - as well as operating tables.

They are printable in two forms - basic and advanced, the latter
requiring tech and does advanced scans on examine, rather than basic
scans.

The displays are mapped in every surgical theatre, as well as over most
stasis beds and by a few cryo cells.

## Why It's Good For The Game

I made these to cut down on juggling the health analyzer when trying to
determine how a patient is faring. (And also to add to medical larp.)

Currently while monitoring a patient's state you have to spam click them
with your scanner and fill up your chat.
This is cumbersome and distracts you from the rest of chat. 

The vitals display provides a visual feedback for how a patient is
doing, no spam clicking needed unless you need specific details like...
organ health.

Some other benefits:
- AI can now monitor patient health without a shell.
- Other doctors don't need to crowd around a patient, they can step back
to watch the screen instead.
- Visitors don't need to rush in and print an analyzer to see how a
patient is doing either.

## Changelog

🆑 Melbert
add: Adds vitals monitors, mapped into the medbay treatment center,
cryogenics, and every surgical theatre. They act as wall mounted health
scanners, providing visual feedback for a patient's health.
/🆑
2026-01-05 08:59:53 +13:00
Tad HardestyandGitHub 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
3799968eb3 feat: new floppy disk sprites; most disks are now under the /item/disk type; adds disk stacking, uqinue styling and wrapping (#94112)
## About The Pull Request

Floppy disks received a sprite upgrade, as well as unique wraps:

<img width="364" height="150" alt="image"
src="https://github.com/user-attachments/assets/0ac433e3-7432-4c06-bec2-aeae00b6852f"
/>

<img width="786" height="527" alt="image"
src="https://github.com/user-attachments/assets/0f36bd0d-0362-4431-8131-49060a2fe348"
/>

You can now stack floppy disks! They also scatter around when thrown.
The video also showcases new styling options with a selection of
stickers! You can also write something on the disk instead of selecting
an icon:


https://github.com/user-attachments/assets/ff0a8542-9d79-4108-ae46-672ca5d620a2

MOST disks now inherit the `/item/disk` type to properly stack and do...
stuff. An updatepaths script included.

## Why It's Good For The Game

Old school is cool. Stacking disks makes them feel more authentic, while
styling allows for more crearivity!

## Changelog

🆑
add: New unique wraps for floppy disks
qol: Floppy disks can now be stacked
image: New sprites and stickers for floppy disks
map: Added and ran an updatepaths script
refactor: Most disks are now under the base disk item type
/🆑

---------

Co-authored-by: The-Tyrant <tyrantofgaming@gmail.com>
2026-01-04 08:52:18 +13:00
SpaceSmithersandGitHub 994b5cbe49 Card readers can be printed at cargo techfabs (#94649) 2026-01-01 16:50:01 +01:00
3c5749f862 General maintenance for plumbing (#94427)
## About The Pull Request
The overall behaviour of everything should stay the same but the memory
& speed of these components has been slightly improved and when you
scale that across large plumbing factories you get a substantial
improvement. Here's a list of the most noticeable changes along with
many others that aren't worth mentioning

- Removed vars `use_overlays`, `turn_connects`,
`recipient_reagents_holder`
- `active` var is now replaced with a proc which simply returns is the
machine wrenched or not
- `turn_connects` has been removed because all machines have their pipes
rotate when the machine is rotated. This also removed all the static
icon states ending with `-s` from the `dmi` file thus reducing that file
size as well
- `extend_pipe_to_edge` var is directly integrated into `cut_overlays()`
because it's use cases were limited such for showers & sinks
- Simplified `Initialize()` a lot. Removed params `start`,
`turn_connects`, `custom_receiver`, `extend_pipe_to_edge`. We now only
pass `bolt_layer` making that proc faster & less convoluted
- Replaced `set_recipient_reagents_holder()` proc with
`recipient_reagents_holder()` which returns the reagent holder for
holding reagents instead of storing it in the component. This removes
the need to hook a qdel signal on the holder & we don't need to keep
track of it
- Merged a ton of procs to reduce overhead & reduce file size
- Plumbing ducts creating the network at mapload is faster without using
recursion and the timer subsystem
- Deconstructing plumbing ducts is faster in reconstructing the network
without using recursion and the timer subsystem

This makes managing plumbing code less convoluted & overall better for
the foreseeable future. See the lines of code removed vs added and still
preserves behaviour

## Changelog
🆑
qol: added examines & screentips for ducts & stack of ducts
qol: you can wrench a stack of ducts on the ground to create a pipe
refactor: plumbing code has been improved overall. Report bugs on github
sprite: removed unused static(does not rotate with machine) icon states
for plumbing connections
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2025-12-31 13:03:42 +01:00
NickandGitHub 0a5b5b7de4 Let all department protolathes print out a expiri science scanner (#94442)
## About The Pull Request
This PR makes it so you can print expiri science scanner out any
departmental protolathe.
(its the tool you do research with)

## Why It's Good For The Game
Currently the whole weight doing expiriments is on science, where we
have tasks like make pure halopiridol or scan blood and such normally
you have to go science to ask for one of these devices, we also made a
standard where heads can research for their department this allows
departments work impedentely when it comes to expiriments.

A engineer would likely do stock parts upgrading etc
where medbay would do corpses autospies/pure chem scanning etc

Eitherway i think its intresting for every department being able to
control their own research progress instead of being forced to break
into science for one of those devices, departments control their own
expirimental progress where science itself control the research flow
along with the departmental heads.

## Changelog
🆑 Ezel
balance: All protolathes can now print out a expiri science scanner
/🆑
2025-12-26 13:21:02 +02:00
SyncIt21andGitHub 468b351b86 Axes grind & juice vars into procs (#94592)
## About The Pull Request
Inspired by #94233. `grind_results`(list) & `juice_typepath`(typepath)
are only used when grinding & juicing after which the atom is deleted.
This means if that object is not processed these vars occupy memory &
don't do anything.

Now these values are only generated on demand by calling their
respective procs. Considering how these vars are on the obj level the
memory savings are quite significant

## Changelog
🆑
refactor: grinding & juicing have been refactored to occupy low memory.
Report bugs on github
code: improved grinding & juicing code
/🆑
2025-12-25 20:40:35 +01:00
BloopandGitHub 0190e64654 Converts simple rotation into a bespoke element (#94582)
## About The Pull Request

<img width="579" height="67" alt="image"
src="https://github.com/user-attachments/assets/d7a4427e-2a6e-44d3-94ba-c90a2d474984"
/>

Simple rotation components number in the 8-9k range per round, and each
contains a needless callback datum as well.

These do not need to hold any state and can be bespoke elements, and the
proc to do things post_rotation can just be a normal atom proc.

<details><summary>Still works as you'd expect, including items that have
flag requirements like the wrench</summary>


![dreamseeker_UhvaohsIYK](https://github.com/user-attachments/assets/a4bd6b3f-d502-4a11-852f-0b96472d688d)


![dreamseeker_fEwUfNQben](https://github.com/user-attachments/assets/62dca771-4622-4cb2-9105-7f3a7c73e15a)

</details>

## Why It's Good For The Game

Makes a heavily used element much more lightweight, saves a few mb of
memory.

## Changelog

🆑
refactor: simple rotation component has been refactored into an element
Please report any bugs to github.
/🆑
2025-12-25 10:32:41 +01:00
SyncIt21andGitHub fa9c98058f Refactors material components to regular datums (#94596)
## About The Pull Request
This was LONG overdue and its finally time. Refactors 2 components to
regular datums
- `/datum/component/material_container` -> `/datum/material_container`
- `/datum/component/remote_materials` -> `/datum/remote_materials`

Reduced memory overhead and stops misuse of component i.e. storing it in
a variable

## Changelog
🆑
refactor: refactored material container code to reduce memory overhead.
Report bugs on github
/🆑
2025-12-25 01:02:10 +01:00
John WillardandGitHub 41f34c2a86 Adds tgui color picker (#94313)
## About The Pull Request

Ports https://github.com/Monkestation/Monkestation2.0/pull/1231 which is
a port of https://github.com/BeeStation/BeeStation-Hornet/pull/9417
which is a port of https://github.com/omgovich/react-colorful/
Also a port of
https://github.com/effigy-se/effigy/blob/main/tgui/packages/tgui/interfaces/effigy/ColorPickerModal.tsx
for hex color presets

Admin stuff got excluded (pref-like picker, filterrific, get-variables)



https://github.com/user-attachments/assets/7069bef9-81cd-4636-bf68-cbad227ef09e


## Why It's Good For The Game

It's one of the only input areas that still doesn't use TGUI, leaving
darkmode players flashbanged every single time a color selection UI is
opened. This is also just visually great and I think a big upgrade from
byond's.

## Changelog

🆑 omgovich, itsmeow, Absolucy, JohnFulpWillard, jlsnow301, TealSeer,
lessthnthree
add: Color selection panels now use TGUI (If you have TGUI enabled in
settings).
/🆑
2025-12-21 16:18:34 -08:00
MrMelbertandGitHub acd881147f Adds cybernetic surgical processor implant (#94555) 2025-12-21 14:16:51 +01:00
TimandGitHub 826d2b4638 Add recipes for flare, washer machine, lamp, lantern, cabinet, alien closet, and large metal box (#94283) 2025-12-21 14:00:19 +01:00
MrMelbertandGitHub a9b0ecb7d0 Weather anomaly (#94509)
## About The Pull Request

A weather anomaly can spawn on the station, causing a sandstorm,
snowstorm, or rainstorm to affect the room (and nearby rooms). These
weathers range from "harmless" to "mildly damaging".

They last for around five minutes.
The weather doesn't start immediately, giving people time to neutralize
it before it causes damage.
Neutralizing the anomaly stops the weather. 
If they detonate, it just throw objects away from itself.

<img width="407" height="225" alt="image"
src="https://github.com/user-attachments/assets/2de1b797-2b17-442c-9023-11085b4849cf"
/>

<img width="991" height="674" alt="image"
src="https://github.com/user-attachments/assets/afe5a21d-9cf8-4e9d-95ec-adef6fd12a93"
/>

A rarer version of the anomaly can also occur, which brings a lightning
storm, which may damage the station itself.

Also, reactive weather armor. When you are hit, it summons a lightning
strike below nearby assailants.

## Why It's Good For The Game

With the added rain mechanics I wanted to use them, but it's kinda hard
to shoe them into the station because, "why is it raining on a space
station that makes no sense"

However, anomalies are weird, so this fits perfectly

## Changelog

🆑 Melbert
add: Weather anomalies, in four variants: Rain, snow, sand, and the rare
lightning storm.
add: Reactive Weather Armor
/🆑
2025-12-20 12:33:10 -05:00
MrMelbertandGitHub bfdb237612 Spooky Scary Supreme Surgery (Rework) (#93697) 2025-12-19 18:42:58 +01:00
c006a59de0 Modsuit expanded storage modules are now way easier to get (among other things) (#94228)
## About The Pull Request

Modsuit storage modules are now called compact storage modules and the
expanded ones are just regular storage modules. (Regular because they
have the same capacity as a backpack afaik) They're researched in the
modular suit equipment node instead of all the way on the advanced
engineering node, and the small storages only take up 1 capacity.

## Why It's Good For The Game

Picking your storage module is now more of a choice instead of "I'm not
going to get a modsuit until advanced engineering suits are researched".
The advanced engineering node is still good though because it has ion
thrusters.

## Changelog
🆑
balance: Expanded storage modules are now unlocked much earlier
balance: Regular storage modules require 1 complexity instead of 3
spellcheck: Regular storage modules are now called compact storage
modules and the expanded ones are just called storage modules.
/🆑

---------

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-12-19 17:08:35 +11:00
fc1cb7d16c Adds a fish trait extractor/injector to the marine utility node (and a bluespace fishing reel) (#94042)
## About The Pull Request
Huzzah! It's been a good while since I last added more fishing features
(instead I focused on small fixes now and then), but here I'm at it once
more.

This PR adds two designs to the Marine Utility techweb node (which
previously only had the bio-electric generator kit): The fish gene-gun
an as well as the bluespace fishing reel.

The fish gene-gun is a pretty easy concept. It's a device that takes
empty syringes. When used on a fish with an empty syringe loaded inside
it, It'll prompt the user to choose which trait to extract. Once the
trait is extracted, the syringe is replaced with a specialized 'fish
trait injector' containing said trait. You can then hit another fish
with the fish gene-gun again to inject the trait, or use it to remove
the injector, which can then be used on its own, or loaded into the
gene-gun later (the results are the same anyway). There are two caveats
though: Using the fish-gene gun on the same fish more than once
(extracting or injector) will kill it, and it also cannot be used on
dead fish. The fish can still be revived though.

The other thing is the bluespace fishing reel. It greatly increases the
cast range, and it also goes through walls and other solid objects and
is not disrupted by them. If used on objects, reeling the item in will
move it through wall and solid objects as well. Other than that. It's a
pretty standard fishing reel. However, it has one flaw, and that is it
cannot go through reinforced walls (as well as indestructible ones), so
no stealing from the armory etc.

## Why It's Good For The Game
I've been having some honest to god skill issues with aquariums at times
(they were also half-broken in the past but things have gone for the
better...). Some of the fish traits are good, some are bad, others are
utterly terrible (*looking at the anxious zip zap*) and kinda withhold
some of the potential stuff that can be done, which is what prompted me
to make this PR.

Also, bluespace fishing reel because ~~JoJo Vento Aureo reference~~ it's
such a neat concept.

## Changelog

🆑
add: Two items have been added to the The Marine Utility tech node: a
fish-gene gun to add and remove traits to/from fish, and a bluespace
fishing reel.
/🆑

---------

Co-authored-by: Jacquerel <hnevard@gmail.com>
2025-12-18 01:02:25 +00:00
John WillardandGitHub ed3e00cd7b Map-unique technodes is excluded on maps that don't have it. (#94494)
## About The Pull Request

As the title says, this excludes Kilo & Pubby from failing CI due to the
design being added while the tech node isn't, now it's only ran if the
map has it. This was an oversight of my original PR
https://github.com/tgstation/tgstation/pull/94160

## Changelog

Nothing player-facing.
2025-12-16 21:59:29 -05:00
nevimer 6e9f2ccfc0 Merge remote-tracking branch 'tgstation/master' into upstream-12-15
# Conflicts:
#	.github/workflows/compile_all_maps.yml
#	.github/workflows/run_integration_tests.yml
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/_onclick/hud/credits.dm
#	code/controllers/subsystem/networks/id_access.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/diseases/advance/symptoms/heal.dm
#	code/game/machinery/doors/door.dm
#	code/game/objects/structures/crates_lockers/closets/secure/medical.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/modules/antagonists/malf_ai/malf_ai_modules.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/loadout/categories/accessories.dm
#	code/modules/loadout/loadout_helpers.dm
#	code/modules/loadout/loadout_items.dm
#	code/modules/loadout/loadout_preference.dm
#	code/modules/mob/living/silicon/robot/robot_defense.dm
#	code/modules/mod/mod_theme.dm
#	code/modules/projectiles/ammunition/energy/laser.dm
#	code/modules/reagents/reagent_containers/cups/drinks.dm
#	code/modules/shuttle/mobile_port/variants/supply.dm
#	code/modules/surgery/organs/internal/eyes/_eyes.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_heretic.png
#	icons/hud/screen_full.dmi
2025-12-15 18:12:29 -05:00
shayoki 739a897e5f merging with current 2025-12-14 03:25:39 -06:00
RoxyandGitHub 34e8bf773c fixes flae typo (#4995)
## About The Pull Request
Skyrat gun removal pr somehow made a typo from FLARE to FLAE

## Why It's Good For The Game
Flae

## Proof Of Testing
no

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

</details>

## Changelog

🆑
fix: Fixed a typo in the .38 flare ammo, no longer will it be Flae ammo.
/🆑
2025-12-08 22:31:24 +01:00
MrMelbertandGitHub 36df832ff1 Strange relic animals get spawned mob trait (#94333)
## About The Pull Request

So they don't give you omega-depression.

## Changelog

🆑 Melbert
fix: Summon animals relic makes you less depressed
/🆑
2025-12-06 09:53:59 -07:00
MrMelbertandGitHub 72f76caea0 Spy loot tweaks (#94189)
## About The Pull Request

1. Ammo will no longer show as a loot option until a weapon that uses
said ammo has been claimed. Some ammo, particularly shotgun ammo has
unique status bypassing this, since you could reasonably acquire a
shotgun from the armory, a bartender, or cargo. There is also a 10%
chance that some ammo will show up anyways, to keep people on their
toes.

2. If you claim another weapon of an already claimed ammo type, the ammo
in the pool will be refreshed, meaning obtainable once again.

3. Unclaimed items have a 40% chance of being re-added to the loot pool.
This is on top of the 80% chance for an item to not be removed from the
pool when selecting loot.

4. When hard bounties empty out their loot pool, they will instead draw
from the medium loot pool. Likewise medium bounties will draw from the
easy pool when they run out.

5. Modified the antag info panel text slightly. 

6. Made more appropriate use of `SStraitor.uplink_items`, and checks for
abstract items more thoroughly.

7. Some weapons no longer come in gun cases for Spies

## Why It's Good For The Game

1. Initially the thought was Spies would just have dud bounties on
occasion. They could take the time to lie low or work on their plans
rather than prowl for loot. Alternatively, an aggressive spy would go
after them *just in case* they got the correct gun, or a passive spy
would go after them for the ability to later bribe someone carrying the
correct gun.

However, in practice it seems people largely just don't like having dud
bounties, as it hurts the pacing. Someone who is on a roll doesn't want
to sit there and do nothing.

Ghommie tried to implement this earlier but I disagreed with the
implementation, so here we are.

2. It would be pretty unappealing to go after a gun after realizing all
the gun's ammo has been looted already.

3. I noticed in testing pools would drain themselves pretty fast. This
serves as a bit of a stop-gap, and prevents items that rolled on
particularly difficult targets from being lost forever. Now you can roll
the dice and hope that it shows up again.

4. Might as well reward people with non-junk items if they manage to
drain a tier's loot pool, especially since the top tier pool is pretty
small.

5. People were oft confused about the wording of the text, thinking
they'd get banned.

6. No reason to use the indexed list. 

7. Having a gun case thrust into your hands is not very inconspicuous 

## Changelog

🆑 Melbert
balance: Ammo will no longer show up in the Spy loot pool until a weapon
that uses said ammo has been claimed. Some ammo for weapons easily
obtainable on station (shotgun shot) are not limited by this
restriction. Also, there's a rare chance ammo will show up anyways just
to keep people on their toes.
balance: Claiming a weapon will refresh ammo in the loot pool that has
already been claimed or cycled out.
balance: Bounty rewards that no Spy claimed have a chance to re-enter
the loot pool after a bounty refresh, rather than being lost for the
remainder of the round.
balance: When higher tier Spy bounties empty their loot pools, they will
attempt to draw from lower tier pools before defaulting to telecrystals.
balance: Spies no longer are rewarded with gun cases for bounties;
rather just the gun itself
spellcheck: Modified the Spy antag info text
/🆑
2025-12-06 13:42:32 +11:00
RikuTheKillerandGitHub be1f231869 Lock R&D console boards by default (#94114)
## About The Pull Request

This PR makes all R&D console boards that are either printed or sourced
from tech storage start out locked. They can be unlocked by swiping them
with an ID that has research access.

R&D consoles can also be unlocked with an emag, but doing so will break
their comms circuit as well, making all researched nodes broadcast over
public comms. You can still emag the console itself after it's been
constructed without breaking it in any way, while also silencing
announcements instead. (that's definitely a noob trap, but it's out of
scope for this PR)

The reason why the tech storage board is locked as well is because the
goal of this PR is to stop engineers from making R&D consoles, and
engineers have access to tech storage. Leaving the board unlocked and
moving it to secure tech storage would make engineers break in there
every shift.

The changelog basically has a FAQ for "Okay, so what do I do instead?",
because I know people will be confused about what route they're intended
to take when science closes their desk shutters for the umpteenth time
this week.
## Why It's Good For The Game

Engineering has a habit of making an R&D console every round to bypass
having to ask science or a head of staff to research things. Locking the
consoles at least makes engineers consider asking science to do
science's job.

Note that this doesn't solve the issue entirely, it just removes the
easiest and most convenient way of bypassing science. Engineers can
still break into R&D extremely easily using their wire knowledge, and do
so regularly.

More importantly though, this might shine some light on the fact that
heads of department like the CE have remote access to the research
network via their PDAs. This means engineers can ask the CE to research
things for them.

Asking people with access to the research network to research things is
a lot better for roleplay and immersion than having engineering
construct R&D consoles every shift.

## Changelog
🆑
balance: R&D console boards sourced from printing or tech storage are
now locked by default. It's recommended to ask your respective head of
department or the science department to complete research for you. Heads
of department can remotely access the research network using their PDAs.
/🆑
2025-12-05 19:12:22 -05:00
49d2f1f3c9 Adds the Modular Suit (Or Portable Suit) (#93776)
## About The Pull Request

First, boring stuff.
The "Modsuit equipment" techweb node has been split into two nodes, with
the additional node containing the more civilian MODules (And the new
plating), and costing 20 points.
A new "Perfumer" MODule has been added(not printable anywhere, but in
the new suit by default) that just cleans you.
The MODsuit being added has been added to the LawDrobe's premium
section, for 300 credits.

Now, the real addition.

This adds a MODsuit that is a modular suit, that is to say, a suit, tie,
shoes and glasses. The glasses aren't actually real flash-proof
sunglasses by default, but the welding protection module can be added.
The suit is obviously not space-proof, and offers no protection to
anything but biohazards. The suit has 10 complexity max, due to the fact
that most modules don't have a point on it. This is subject to change.

The pre-made one also has the stamp and paper dispenser MODules
pre-installed, which are both now activateable via the neck slot.

The suit control unit is the tie. 

## Why It's Good For The Game

Have you ever been called to court, but you didn't have a nice suit, so
the judge holds you in contempt and sends you to jail? Well, never
again. Gone are the days that you cause two innocent boys to almost be
executed for a crime they didn't commit simply because you don't have a
nice suit. With the Moonraker Conglomerate's newest export in your
hands, you'll never be the less formal one ever again. No matter the
occasion, you're never more than a few moments away from
self-representing.

Video of the fit:



https://github.com/user-attachments/assets/44d08ca8-9ae1-4887-81e6-cec11792132e

It's the same look as a suit jacket, white tie, sunglasses and laceup
shoes. You must get a matching jumpsuit of your own.

I think it's neat, and it's a damn shame that there's not a single
MODsuit that isn't just head gloves suit shoes. All these MODules which
are activateable from head, mask or glasses, and no suits that allow it.
Missed opportunity, I'd say.

Also, lawyer buff. Need I say more?

## Changelog
🆑

add: Added a modular SUIT, a deployable, one-piece three-piece suit.
Purchasable from the LawDrobe.
balance: The MODsuit equipment techweb node has been split in two, with
an offshoot for civilian MODules.

/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2025-12-02 17:42:15 -07:00
GhomandGitHub 0b0c5ea91e Unit test material checks are now performed on all crafting recipes by default. All stack recipes now transfer mats to the results (#92620)
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.

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

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

## Changelog

🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
2025-12-02 18:29:01 -05:00
NickandGitHub 595b9c00b3 Removes Defibrillators from being printable, and adds cmo compact defib as a spy objective. (#94182)
## About The Pull Request
This PR removes Defibrillators from being printable in the techlathe.
Which means the Compact belt becomes CMO exclusive item.
And adds a objective for spies to steal compact belt because it feeds it
into the black market, which other antags can maybe buy and emagg it to
turn it into a reasonable weapon
This pr also makes it so the baseline of roundstarting defibs is 4

## Why It's Good For The Game
Years ago we made defibrillators never printable, and there was no way
to get them unless it was trough cargo, and later we added it to the
techlathe which immediatly voided the cargo crate.
Medical starts with 4 defibrillators medbay usually uses 2, and then the
other 2 go to medical borgs (and theres not really ever a real reason to
print out another since you got plenty).

We also have spefific upgrade modules for medical cyborgs which is
voided by just printing a defib and inserting it into the medical borgs.

TL;DR order it from cargo either 1 using your departmental budget, 2
using your free ordering console, or 3 just from cargo

## Changelog
🆑 ezel
add: Compact Defibrillator is now a Spy objective
balance: Compact Defib is CMO exclusive again
balance: you can no longer print Defibrillators in techlathe (purchase
them via cargo if needed)
sprite: CMO compact defib now looks unique from other ones
map: catwalk defibs trimmed to 4 instead of 6
map: metastation defib added from 3 to 4
map: wawastation defib added from 3 to 4
map: tramstation defib added from 3 to 4
map: nebulastation defibs trimmed from 6 to 4
/🆑
2025-12-01 00:17:21 -05:00
BloopandGitHub 9c8a60a0b8 Removes some cargo cult string interpolations (#94210)
## About The Pull Request

Macros that are strings do not need to be doing this.

## Why It's Good For The Game

Less improper things to copy paste existing in the codebase
2025-11-30 13:25:45 -06: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
31021a628d Mechfab UI now shows the Savannah-Ivanov's supported equipment (#94195)
## About The Pull Request

It's the same as every other combat mech, but the category was just
completely empty for some reason. Probably an oversight?
Atomized from #94190

## Why It's Good For The Game

bugfix

## Changelog

🆑
fix: Exosuit fabricator UI now shows the Savannah-Ivanov's supported
equipment
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-11-29 19:06:32 -07:00
John WillardandGitHub 92fb372a8c Adds the monastery monitor (#94160)
## About The Pull Request

I'm working on a pubby update for the map depot for admins to run, and
thought I should throw this here. Removes a varedit from Pubby and makes
the monastery telescreen replaceable by making it researchable and
printable through the service techfab.

Also re-adds the pubby map wall item, using the new map item outlines.

## Why It's Good For The Game

Repairability for a map that seems to be ran frequently by admins
(judging by it getting actual issue reports), this has no effect
otherwise.
2025-11-29 11:33:33 -07:00
NickandGitHub 387645d546 Removes soup pot from technode (#94166)
## About The Pull Request
This removes printable soup pots

## Why It's Good For The Game
<img width="915" height="378" alt="image"
src="https://github.com/user-attachments/assets/827f193b-56bb-4046-8ffe-eb0c9dfa0626"
/>
Just get it from the vendor or order restocking units.

## Changelog
🆑 ezel
balance: You can no longer print soup pots
/🆑
2025-11-27 21:45:52 -08:00
Joshua KidderandGitHub 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
MrMelbertandGitHub c4542c2085 Maybe makes stuff like zombie powder more consistent / less buggy with status effects (#93836) 2025-11-27 06:22:11 -07:00
Sir WintersandGitHub b0ca137649 Janiborg Modifications (#4912)
## About The Pull Request

- Gives Janiborgs the Experimental Broom round-start.
- Comments out the wirebrush upgrade. (It's already there round-start
already?)
- Gives Janiborgs Cable, RLD, RTD, and Decal Painter upgrades.
## Why It's Good For The Game

Allows janiborgs to fix lights and maint-mice wires later in the round.
Upgrades them from their shitty-tiles to modern-tiles so they can
actually make the kitchen look classy after someone blows it up. Gives
them the ability to touch up areas with decals as well, because most
engineers are just gonna slap down the pipes/wires and call it a day.

## Proof Of Testing

<img width="461" height="398" alt="image"
src="https://github.com/user-attachments/assets/75ffe907-f4ec-4d81-aefa-f43d458f17a3"
/>

<img width="599" height="160" alt="image"
src="https://github.com/user-attachments/assets/d8307015-6980-4138-8556-bc8a72f1264c"
/>

<img width="563" height="203" alt="image"
src="https://github.com/user-attachments/assets/d5c0b210-3826-4f28-8555-1c19a57a9ee1"
/>

</details>

## Changelog
🆑
add: RLD, RTD, Decal Painter, and Cable upgrades for janiborgs.
del: wirebrush upgrade, because it's already roundstart.
qol: added brooms to janiborgs roundstart
/🆑
2025-11-26 04:35:05 +01:00
Leland KembleandGitHub 9072e3404a Fixes xenobiology consoles not being able to use potions (#94121)
## About The Pull Request

The console called attack() on the potion, which, after the recent
refactor, no longer works. This switches it to interact_with_atom.

## Why It's Good For The Game

fixes #94120
2025-11-24 18:18:46 -06:00
302b241be2 NT Frontier lets you refund researched nodes (#94074)
## About The Pull Request

If you research a node you can still buy it from NT Frontier, and when
you do it refunds the research points you spent. It's like how
experi-scanners work.

Also cytology gives you an 80 point discount instead of a 120 point
discount. This doesn't change anything because it only costs 80 points
and NT Frontier boosts can't make costs go negative.

## Why It's Good For The Game

Right now it's most efficient to delay research until ordnance gets
finished and then grab all the free stuff, and any head of staff
researching stuff for their own deparment or robo that wants to make
cool mechs can fuck things up. That's not great, because it's
unrealistic to expect everyone to be coordinated and delaying research
never gets tried in practice.

Also, doing ordnance after the round has been going on for a while is
way less effective because all of the nodes you would've discounted were
already researched.

## Changelog
🆑
balance: NT Frontier can purchase and refund researched techweb nodes.
/🆑

---------

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-11-22 17:29:02 +01:00