Commit Graph
1253 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
SmArtKarandGitHub f3283799e7 Reworks lavaland tendrils into minibosses (#96186) 2026-06-02 21:00:15 +10:00
+37 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
Vanilla1040andGitHub eb5ccb7bda Makes the veteran cloak less straining on the eyes (#5529)
## About The Pull Request

This PR is simply to make the Veteran cloak, aka the cloak you get for
having 5000 hours playtime (living) less straining on the eyes for the
person having it and the people seeing it with it being less flashy and
less just one solid color giving it texture from all observeable sides

## Why It's Good For The Game

Less flashy lights on screen = good

## Proof Of Testing

Works on my machine


https://github.com/user-attachments/assets/fdf4666f-a018-401c-9b3d-f84c1e0c0444

## Changelog

🆑
image: Makes the veteran alot less straining on the eyes and gives it
more texture
/🆑
2026-05-09 05:43:36 +02:00
TwaticusandGitHub 16d7023da4 Hoodies (#95582)
## About The Pull Request

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

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


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

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

## Why It's Good For The Game

Hoodies are a staple to many and have been requested frequently over the
years.
## Changelog
🆑
image: Hoodies! Both pullover and zip-up hoodies are available in the
clothesmate and in loadouts!
/🆑
2026-04-11 13:49:02 -04:00
SyncIt21andGitHub 47b889ec9b Fixes 2 instances of turf changing not affecting mounted objects correctly (#95534)
## About The Pull Request
- Fixes #95532

And the same fix applies to
- Syndicate theme bomb `/obj/item/bombcore/dimensional`
- Anomaly dimension `/obj/effect/anomaly/dimensional`
- Midas grand finale `/datum/grand_finale/midas`
- Area transmogrify `/datum/grand_side_effect/transmogrify_area`
- Dimensional anomaly core
`/obj/item/assembly/signaler/anomaly/dimensional`
- Relic dimensional shift `/obj/item/relic`
- Dimensional Armor theme

Also fixes floor mounted objects not deconstructing when the plating
they are attached deconstructs into something like water/lava

## Changelog
🆑
fix: Any effect that changes the theme of the environment no longer
break turf mounted objects
fix: destroying plating with lava/water etc will destroy any object
mounted to it
/🆑
2026-03-29 17:51:54 +02:00
SmArtKarandGitHub b9cb6dc52d Fixes elder atmosian getting affected by metal hydrogen it is made out of (#95307) 2026-03-05 22:29:35 -05:00
SmArtKarandGitHub a3498fdcd7 Material Science 1: A bunch of math (#95090) 2026-02-22 16:53:51 +11: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
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
NickandGitHub eac94083c9 sword sheathes can now be worn on all suits (#94816)
## About The Pull Request

This PR makes it so you can wear sheathes on all suit storages

## Why It's Good For The Game
It mostly allows players freedom to shuffle stuff around they already
have to haggle a sheathe around with the sword in it while still having
most of their storage thing vs a gun, which allows players freedom when
it comes to setups, but also make them be able to use counterattack
mechanic. heres some cosmetic setups i just made up that isn't reliant
on armour

in the future we can make things less reliant on backpacks when it comes
to storage

<img width="227" height="317" alt="image"
src="https://github.com/user-attachments/assets/83a684cb-a096-4a92-af8f-ebc8d982a463"
/>

## Changelog
🆑 Ezel
balance: sabre, parsnip, gladius sheathe can now be worn on suit
storages
fix: mirrors gladius belt worn sprite so it doesn't overlap with belted
revolvers
image: adds mirrored belt sprites
/🆑
2026-01-19 14:00:12 -08:00
BloopandGitHub 68153c2333 Refactors faction lists to use getters and setters and be cached (#94490) 2026-01-19 04:12:35 +01:00
ElGitificadorandGitHub bfa5aa847e fixes bear suit not hiding your hands (#94859)
## About The Pull Request

fixes #92341. 

## Why It's Good For The Game

muh bear larping

## Changelog

🆑

fix: fixed bear suit not hiding hands

/🆑
2026-01-15 00:55:53 +01:00
NickandGitHub 4d31f35668 Removes unused wizard_clothes.dm and moves wizard_weapons.dm into artefact.dm (#94731)
## About The Pull Request
This PR removes unused wizard_clothes.dm which has a duplicate path
overriding the magus helm armor values
This PR moves wizard_weapons which includes the singularity hammer and
mjollnir into the wizard antag module
This PR moves wizard_robe into wizard antag module

## Why It's Good For The Game

So things are easier to find

## Changelog
🆑 Ezel
fix: fixes the armour value of the magus helm to be the same as all
other wizard gear
/🆑
2026-01-05 17:17:20 -05:00
BloopandGitHub cf14dcfc1a Converts 3 components into elements (#94589)
## About The Pull Request

`adjust_fishing_difficulty` is a good one to make into a bespoke element
since a number of the same clothing item are created in the wardrobe
system.

climb_walkable is also good due to how prevalent it is, and it is a bit
of a two for one since it also removes the need for the
`/component/connect_loc_behalf`

Also stops adding the on_climbable trait to literally everything in the
turf, it now only applies it to atoms with density. So no more pipes and
stuff getting trait lists created for no reason.

<details><summary> Tested + things still work as before </summary>

<img width="422" height="122" alt="image"
src="https://github.com/user-attachments/assets/b23696f5-cd16-4150-aeb3-14ea6bd256fc"
/>

</details>

## Why It's Good For The Game

Lessens overhead, fixes a bug as well.

## Changelog

🆑
fix: fixes a pushed crate not removing on_climbable trait properly off
the mob standing atop it
/🆑
2025-12-30 01:05:50 +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
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
d3ede8e4b2 The heavy pirate's armored 'Pirate Coat' can store the same items as standard issued armor. (#94201)
## About The Pull Request

The special armored pirate coat variant (from heavy pirates/rare
treasure chest rng) can hold what standard armor can hold.
Oversight as a result of inconsistent object pathing, see below.

## Why It's Good For The Game

- Could be an oversight - Pirate coats aren't pathed under
"/obj/item/clothing/suit/armor" despite being an armored variant of
clothing (the armored variant is pathed under 'costume'), and therefore
doesn't inherit 'GLOB.security_vest_allowed' like regular non-special
armor (non heretic) usually have.
- Heavy pirates spawn with shotguns and laser guns, but they can't
actually store their guns on their back/belt slot. They also don't get a
backpack on their ship.
- Transporting valuables to the pirate ship should be a tad bit more
convenient considering a pirate's primary role is theft.
- Pirate armor is rare and exclusive - It's only obtainable through
heavy pirates, or gambling the beach treasure chest.
- Logic/spirte wise makes sense - See armored trenchcoat.

## Changelog

🆑 ArchBTW
balance: Heavy pirate's armored pirate coat can hold the same items that
standard armor can.
/🆑

---------

Co-authored-by: glue0000 <230859540+glue0000@users.noreply.github.com>
2025-12-13 17:45:24 +11:00
MrMelbertandGitHub 2619b728ba Compact defib can be worn in medical suit storage slots (#94255)
## About The Pull Request

Compact defib can be worn on the suit storage slot of labcoats, medical
coats, surgical aprons, and medical MODsuits

## Why It's Good For The Game

This thing is dope but sucks to use because you have to juggle your
belt.
Allowing docs to wear it on their coat so they don't have to inventory
juggle with their belt would make it 10x more usable.

## Changelog

🆑 Melbert
add: Compact defib can be worn and used on the suit storage slot of
labcoats, surgical aprons, and medical MODsuits
add: Drones and Dex Holoparasites can (hypothetically) wear and use
compact defibs
/🆑
2025-12-02 16:47:27 -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
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 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
san7890andGitHub 8400284868 Illusion Basic Mob Refactor (#93860)
## About The Pull Request

Another relatively simple simple_mob to basic mob refactor. I wish more
people were doing these since I was saving these for people to get their
feet wet, but I think it's better to pivot away from that and just have
only the gargantuan ones outstanding (since those ones are pretty much
their own framework).

I also delayed this one because we didn't actually have the AI framework
available 1-2 years ago for this to be seamless and easy, but now we
have easy fleeing functionality so that's an easy plug and play.

This rework contains the following:

* General code readability changes and standardization (i.e. removing
single letter vars, `SECONDS` defines)
* Moves more stuff to subtypes instead of having it be on parent
* Removes the necessity for define "attack modes", that's on subtypes
now
* Fixed instances where args weren't defined. I think cult apparitions
via the mirror shield have been much weaker than what they were
originally intended to, so I changed it to what I thought was correct. I
can change the health to be down but it really doesn't make sense as a
lot of the args were not standardized (ideally we would have more
subtypes). I can change this back to the original arg order, let me
know.
* Clones now replicate on damage taken as well as when they attack. I
wanted to tweak this around more but this was originally added since I
confused myself, but it gave a more realistic mitotic effect I liked
more for the replicating clones.
## Why It's Good For The Game

If we want more flamboyant mirage escapes or sneaky clone AI behavior,
it is now far easier to implement. It's very simplistic at the moment
but is pretty much fully featured and representative of the simple mob
version of illusions. They were already laden to the item/mob that was
spawning them in anyways, so this is really the most simple stuff we got
going on.

I tested this with the mirage grenade, reactive stealth armor, and the
mirror shield. I have no clue how the heretic stuff works but it appears
to be a really simple framework plug-and-play so no real worries there I
think.
## Changelog
🆑
refactor: The Cult of Nar'Sie realized that they were installing the
mirrors on their mirror shields the wrong way around, thus altering the
makeup of their mirror clones health, damage, and re-replicability.
refactor: In response to the recent updates in clone magic, Nanotrasen's
Stealth Reactive Armor should now generate more convincing clones.
/🆑
2025-11-26 13:02:00 +11:00
MrMelbertandGitHub 25c7679fab Genders your coveralls (#93938) 2025-11-16 08:33:03 -07:00
Roxy d0ca474789 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-2025-11-05 2025-11-05 19:43:07 -05:00
410cebd7d1 Sleeping Carp: Unarmored Defense Edition (#93466)
## About The Pull Request

Reworks Sleeping Carp significantly.

### Returning Moves: Stomach Knee and Wrist Wrench

Stomach Knee, much like the previous incarnation, causes the victim to
be winded and stunned, though this version only briefly stuns the
victim. It also deals stamina damage and silences the victim for five
seconds. It is performed by a Grab Punch combo. Named Kraken Wrack.

Wrist Wrench, much like the previous incarnation, disarms the victim of
their held items. It also potentially dislocates or breaks their arm, as
it rolls with a very high wound chance. It is performed by a Harm Grab
combo. Stole Gnashing Teeth's name.

### Gnashing Teeth (as it was) is gone

This move didn't do very much at all other than being a harmful punch
with more damage. Throwing a bunch of normal punches won't result in
anything now.

### Harm Punches are no longer have special overrides, but Sleeping Carp
does grant perfect accuracy.

Rather than use a bespoke override, Sleeping Carp now merely uses your
normal unarmed punch for its standard normal punch. However, rather than
leave things to chance, Sleeping Carp grants you perfect accuracy with
those standard punches.

### Grabs are treated as one stage higher

Now that martial arts can directly interact with grab state, as well as
some prior changes to how effective compared to actual grab state is
determined, I've reintroduced Sleeping Carp's stickier grabbing by
making it so that they elevate the effective grab state by one stage.

This is not instant aggro-grabbing like they used to have. This just
makes it so that if they try to resist out of a passive grab, they may
fail as though it was an aggressive grab, but it won't stun them until
it is elevated to a proper aggressive grab.

### What you wear is important for determining the effectiveness of your
Attack Dodging (and attack dodging is broader)

Sleeping Carp's projectile dodging and now attack dodging is based on
whether or not you're 'on theme'. That is, if you are wearing nautical
themed clothing and other factors.

At a baseline, Sleeping Carp has perfect projectile dodging and no
melee/unarmed avoidance.

To improve your chances, you need to;

- Wear martial arts or carp themed clothing on your head. (20% if one is
present, but it only counts one)
- Wear martial arts or carp themed clothing on your chest (20% if one is
present, but only counts one)
- Wear appropriate footwear, like sandals. (20%)
- Be a literal carp. (75% flat)
- Mutate yourself into a carp person. (20%)

However, your chances of avoidance diminishes if:
- You wear armored clothing on your head and chest. (based on Melee
armor)
- While lying on the floor (30%)

Holding objects diminishes your chances as well, This is based on the
weight of the object, and whether or not the object is wielded. Normal
sized objects, for instance, are -30%, and would be -60% if wielded.

It will not diminish your chances if:
- The object is Small or smaller.
- The object is an abstract object or hand grafted object and it doesn't
have block chance.
- The object is in the exceptions list.
	- **The exception list is as follows:**
	-  Nunchaku (this is spies exclusive)
	- Bo Staff (the unobtainable one)
	- Monk's Staff (the chaplain's null rod)
	- Bamboo staff
	- Cane (like, walking cane)
	- Knives
	- Bolas
	- Toolboxes
	- Spears
	- Shortswords (the ones from the medieval pirates)
	- Nullblade (it's a shortsword)
	- Extendohands (because lol)
	- Mops
	- Push Brooms
	- Baseball Bats
	- Claw Hammers
	- Carp plushies.

<details>
  <summary>A list of appropriate clothing</summary>

Headwear

- Strange Bandana (which come in the kit)
- Maid headband
- Fancy Hairpin
- Carp Mask
- Carp-skinned Fedora
- Carp Costume Hood (this comes with the costume)
- Carp Costume Spacesuit Helmet (as above)

Chestwear

- Martial Gi (which come in the kit)
- Carpskin Suit
- Carp Costume
- Carp Spacesuit
- Maid Outfit
- Kimono
- Yakuta
- Trenchcoats
- Geisha Outfit
- [Swag Outfit](https://www.youtube.com/watch?v=l6DmoPlq3S4)
- Eastern Monk's Outfit (the chaplain outfit)
- Buttoned down line of clothes
- Blazer jacket
- Lawyer jackets


Footwear
- Sandals (which come in the kit)
- Swag Shoes
- Laceup Shoes
  
</details>

As an example of being OFF theme, being in a full security outfit would
reduce your avoidance chance by a whopping 80%.

You avoid attacks while in combat mode, much like projectile deflection
does on live. You can only get up to a 75% chance melee/unarmed
avoidance.

## Why It's Good For The Game

> Returning Moves

People quite liked some of the older moves, and there weren't as many
dials around at the time to make them particularly more interesting when
I first removed them. We were aiming for an out and out stun removal as
a whole codebase, but largely we're ended up still being comfortable
with minor stuns here and there. Stomach Knee can be one of them.

Wrist Wrench was something I realized I could reintroduce with literal
limb breaking thanks to wound changes. Arm dislocations/breakages are
surprisingly rare as a wound type, and since it is an attack on a
specific arm, not quite as good for bringing someone to death, but quite
good for leaving someone with a maiming wound they now need to fix to
keep pursuing you. Highly useful for those stubborn stun immune targets,
who Sleeping Carp struggles to fight. As in, they can't really fight
them.

> Grab Stage

A bit of my work and a bit of Melbert's has resulted in this being a lot
more reasonable to reintroduce as a benefit. The original instant
aggro-grabbing was definitely very oppressive, since it was a
pseudo-hardstun that lead into a hardstun. Now this is a bit softer by
comparison, and surprisingly quite important. I think the loss of good
grabbing ended up filtering a lot of folk somewhat hard.

> Removal of the override

I was really taken with Spider Bite using baseline punches as the
groundwork for the martial art and I wanted to work into that. Not only
does it mean becoming a carp person is actually a great idea beyond the
avoidance mechanic, but also for your actual basic punches improving. It
just in general feels like it opens up possibilities in the game world
to experiment and the design of martial arts in general. We should make
more martial arts work like this.

> Avoidance

My original rework had one glaring flaw that continues to haunt it to
this day. Defense stacking on Sleeping Carp is ridiculous. Layering
defense upon defense makes the one particular immunity it grants,
projectile immunity, all the more oppressive. Hiding behind high block
and high armor makes you a menace.

The end result is that more people utilize Sleeping Carp not for the
martial art part, but for the projectile immunity part, usually using
something else instead like a baton.

This rubs me the wrong way. You would think and hope that the reason
people take the martial art is to be a goofy martial artist in space.

So, I'm implementing an idea I knew I could never pull off in the
framework at the time.

I'm implementing Unarmored Defense, bitch.

(I was totally also not inspired by Payday 2 in any fashion, nope, not
at all)

I like the idea of forcing a choice between the goofy outfit that gives
you bonuses over just getting the biggest armor you can find and
turtling like a motherfucker. And I want people to focus on the martial
arts and benefit from the martial arts when you're specifically unarmed.

Maybe right now some of the restrictions are a little severe, so if
anyone has any opinions, lemme know.

## Changelog
🆑
balance: Completely reworks Sleeping Carp, again.
balance: The return of Stomach Knee (Kraken Wrack) and Wrist Wrench
(Gnashing Teeth). Time is a flat circle.
balance: Sleeping Carp has better grabs (no instant aggro grabs)
balance: Sleeping Carp integrates normal unarmed punch by not overriding
your normal punches.
balance: Sleeping Carp's deflection weakens if you wear armored headwear
and body armor, or while carrying objects. However, by wearing martial
arts (or carp) themed outfits, you can improve your defenses instead,
allowing you to not just dodge bullets, but also incoming melee attacks.
balance: Some objects are exempt, like staff weapons (such as mops or
the monk's staff), short blades (like knives and shortswords), club-like
(baseball bats and toolboxes), or thematic (like extendo hands and carp
plushies)
balance: You can also get these improvements by being a literal carp or
being a carp person.
/🆑

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
2025-11-02 16:35:09 +00:00
8614982a29 Scientist armor consistency change thingy (#93723)
## About The Pull Request

So basically, the description of the scientist jumpsuit/jumpskirt says
that it provides minor protection against explosives. This is actually a
complete lie because it doesn't do that. Instead, the scientist _winter
jacket_ has a minor protection against explosives. Why? I have no idea,
it's probably a bug.

This pr swaps out the bomb 1 and fire 2 on the winter jacket for bio 1
and fire 2, because every other winter jacket (that I know of) has at
least bio 1, and adds the bomb 1 to the scientist jumpsuit and
jumpskirt. Also, the jumpsuit and jumpskirt went from bio 5 to bio 4,
for game balance reasons I guess. If they're better off staying at bio 5
I can change that.

## Why It's Good For The Game

Bugfix... I think? Consistency improvement at the very least.

## Changelog

🆑
fix: Scientist jumpsuits have minor bomb protection and less biohazard
protection
fix: Scientist winter jackets no longer have bomb protection
/🆑

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2025-11-02 15:42:57 +01:00
Aliceee2chandGitHub 1513f779ad Repaths oxygen jetpacks and "removes" fake empty jetpack (#93676)
## About The Pull Request

removes oxygen jetpack subtype and makes empty jetpack actual oxygen

## Why It's Good For The Game

because our empty jetpack wasnt actually empty and we infact had two
oxygen jetpacks?

## Changelog

N/A
2025-11-01 13:40:04 +01:00
NiklasNeighborandGitHub 719d42ca1a Laser tag refactor to use components instead of checking for the vest (#93650)
## About The Pull Request
Baby's first refactor!
Originally meant for a downstream, I was told to PR it here instead.
Please do tell me if I did something wrong.
Previously the Lasertag guns would directly check if you were wearing a
vest before dealing stamina damage. Now they instead check for a
component and it's team, which is added by the vest.

## Why It's Good For The Game
This should make it easier to add new lasertag equipment.
It compiles and lasertag functionality seems to remain unchanged from
the player side.
2025-10-31 20:45:55 -05:00
Roxy e28e9fbdba Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-23-10-2025 2025-10-23 17:38:23 -04:00
Aliceee2chandGitHub 51a01efdab Jaws of Recovery QOL's (#93454)
## About The Pull Request

changelog should say pretty much enough, dont want to double it here.

## Why It's Good For The Game

as paramedic later into the game you'll prefer jaws of life over jaws of
recovery because theyre both silent AND have no area restrictions, but
heres the thing: you cant wear it in suit storage, nor it can act as
bonesetter additionally (why would paramed need wirecutter?) this PR is
aimed to combie both of those jaws into one modified, that would be
useful for paramedic.

also you really should be able to wear them in mod suit storage, trust
me, it sucks to carry paramedic jacket/coat in inventory everytime and
waste time on swapping

## Changelog
🆑
qol: Jaws of Recovery can be worn on medical MODSuit suit storage now.
add: Added modified Jaws of Recovery and recipe for them. Made from
regular Jaws of Life they act like one, without area restrictions and
radio announcements.
/🆑
2025-10-16 09:23:44 -04:00
Roxy d14e538393 Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-15-10-2025 2025-10-15 19:34:41 -04:00
e7abcf98a8 Moves RedSec to our folder (#4800)
## About The Pull Request

Title. To be honest this started as just fixing up some errors I made
with the bomber coats. Woulda fixed them sooner but telling someone on
my own PR that 'I don't care' is apperently ragebaiting.

But that's in the past. This is the future. And the future is red.

I moved everything in the bubber redsec folder to the goofsec folder
where the other reskins are handled. I ported Nova's red variants where
I could. Removed overrides (like the ugly bulletproof helmet and the PDA
colours) and the 'durr no skirt as hos/warden' thing.

I also removed species & joblocks from the Akula outfits. Nothing else
has a species lock and the sprites work perfectly fine on the default
spaceman.
## Why It's Good For The Game

Redsec is better, actually.


## Proof Of Testing

I've tested it but I wasn't sure what exactly to screenshot with the
sheer volume of shit I done. But I tested all I done. It all worked.

## Changelog
🆑
add: Most, if not all sec clothing now properly has a red variant via
the alt click reskin system.
add: Anyone can wear the Akula outfits now.
del: Removed Bluesec PDA override and the ugly bulletproof helmet.
del: HoS and Warden can wear skirts again.
fix: Atmos Bomber no longer hides legs or slows you down.
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2025-10-13 01:13:04 -04:00
necromanceranneandGitHub 86c499ebc3 Adds the Jaws of Recovery, a specialized form of Jaws of Life for paramedics with heavier limitations. (#93021)
## About The Pull Request

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

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

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

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

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

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


## Why It's Good For The Game

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

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

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

## Changelog
🆑
add: Adds the Jaws of Recovery. One can be found in a locked glass
cabinet in medical. These jaws of life are restricted on what they can
force open, and alert security and medical whenever they are utilized to
pry open departmental doors. They can't be used to open high security
doors whatsoever. And they come with a bonesetter attachment instead of
wirecutters. You know, for power-relocating your arm.
/🆑
2025-10-10 16:44:57 -04:00
xPokee 9b282a850e Merge branch 'master' of https://github.com/tgstation/tgstation into upstream-sync 2025-09-17 11:45:44 -04:00
FalloutFalconandGitHub d2f34e33be moves abstract_type up to datum, spawners wont spawn them (#92909)
## About The Pull Request
moves all implementations (im aware of) for "Im a parent type dont spawn
me please" to the datum layer to standardized behavior
adds a standerized proc for filtering out "bad" items that we dont want
spawning. applies to it the subtype vendor, gifts, and a new spawner and
mystery box for a random gun (neither playerfacing)
"port" of https://github.com/shiptest-ss13/Shiptest/pull/4621



https://github.com/user-attachments/assets/22f6f0b2-b44e-411a-b3dc-6b97dc0287aa

small warning: I dont have EVERY abstract type defined right now but,
ive done a good enough job for now. Im tired of data entry rn
## Why It's Good For The Game
standardizing behavior. Might be a micro hit to performance however

having this lets us not rely on icon state to determine whether
something is a parent type and makes it much easier to tell something is
a parent type (could be applied further to things like admin spawning
menus and things like that).

need feedback on if this is actually good for the game.
## Changelog
🆑
add: Soda cans show up in the silver slime drink table.
add: Examine tag for items that are not mean to show up ingame.
refactor: Standardizes how gifts rule out abstract types.
fix: gifts no longer check if something has an inhand, massively
expanding the list of potential items.
/🆑
2025-09-13 00:36:15 +02:00
e67ab69e5a Lets jackets as a whole clothing category carry handguns and holsters, improvised weapons on a few more 'assistant' clothing options, and minor changes (#92833)
## About The Pull Request

Jackets as a category now can carry handguns like pistols and revolvers
and can hold holsters in their suit storage. This also includes hawaiian
shirts and comedian coats.

More 'assistant' jackets can carry improvised firearms.

Justice suits (which are actually security vests in disguise if you can
believe it) hold security gear.

Imperium monk outfits now hold the true list of chaplain suit storage
items, and not just a limited list.

## Why It's Good For The Game

These lists were kind of a mess so using some more consistent holder
lists should make things easier going forward for making sure suits
across a category are at least consistent with one another. Redefining
the allowed list usually means a lot of items get lost from parent to
child.

The additions were either potentially oversights, or are because of
either for reference or trope reasons.

I actually think I overlooked the imperium suit last time I touched
chaplain clothing suit storage.

## Changelog
🆑
balance: Jackets can carry personal firearms and holsters in their suit
storage. So can hawaiian shirts and comedian suits.
balance: More 'assistant' attire can fit improvised weapons.
balance: Justice suits can fit security items in their suit storage.
fix: Imperium monk outfits now hold the true list of chaplain suit
storage items, and not just a limited list.
/🆑

---------

Co-authored-by: 1393F <59183821+1393F@users.noreply.github.com>
2025-09-11 09:06:28 +12:00
nevimer b348b617a3 Merge branch 'master' of https://github.com/tgstation/tgstation into pupstream-2025-09-07
# Conflicts:
#	README.md
#	code/__DEFINES/admin.dm
#	code/__DEFINES/melee.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/economy.dm
#	code/datums/components/crafting/crafting.dm
#	code/datums/elements/crusher_loot.dm
#	code/modules/antagonists/pirate/pirate_shuttle_equipment.dm
#	code/modules/clothing/suits/_suits.dm
#	code/modules/escape_menu/leave_body.dm
#	code/modules/jobs/job_types/_job.dm
#	code/modules/mining/equipment/mineral_scanner.dm
#	code/modules/mob/living/living.dm
#	code/modules/plumbing/plumbers/pill_press.dm
#	tgui/packages/tgui/interfaces/Vending.tsx
2025-09-07 00:37:52 -04:00
BloopandGitHub c66c5c58ab Fixes an oversight with suit accessory overlays (#92687)
## About The Pull Request

Just because an accessory has `above_suit` set to `TRUE` does not mean
the suit has an `accessory_overlay`.

You wouldn't wanna add a null to the overlays list to return here so
make sure we actually have one first.

(It turns out, it is actually silently doing this every time you first
attach or remove an accessory-when an accessory is added, it calls
`successful_attach()` which ends up calling `update_clothing()` which
calls `worn_overlays()`--all _before_ creating the `accessory_overlay`
-- which results in a `null` in the returned list of `worn_overlays()`)

Shifts the ordering around so that this race condition no longer occurs.
2025-08-26 16:40:36 -05:00
Thunder12345andnevimer 20118ad747 Converts a bunch of time/delay vars to use time defines (#92495)
## About The Pull Request

Converts as many time vars expressed in deciseconds as I could find to
use time defines.

## Why It's Good For The Game

Makes these values neater and more readable.

## Changelog
🆑
code: Converted a lot of time-based variables to be expressed with time
defines.
/🆑
# Conflicts:
#	code/modules/clothing/head/hat.dm
#	code/modules/clothing/shoes/boots.dm
#	code/modules/clothing/suits/utility.dm
2025-08-19 22:38:55 -04:00
Time-Greenandnevimer 147df9ec59 Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>

# Conflicts:
#	code/modules/clothing/head/tinfoilhat.dm
2025-08-19 22:29:26 -04:00
Thunder12345andGitHub 260960d6f4 Converts a bunch of time/delay vars to use time defines (#92495)
## About The Pull Request

Converts as many time vars expressed in deciseconds as I could find to
use time defines.

## Why It's Good For The Game

Makes these values neater and more readable.

## Changelog
🆑
code: Converted a lot of time-based variables to be expressed with time
defines.
/🆑
2025-08-12 18:30:25 -04:00
43fc75facb Organ Growing Kit | Coroner Cytology Cargo Content (1/2) (#92108)
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2025-08-11 18:36:50 +02:00
SmArtKarandnevimer 53f198a61d Implements (a poor imitation of) speculars, improves/fixes unrestricted access overlay lights (#92272)
## About The Pull Request

Implements a poor imitation of specular surfaces by encoding "shinyness"
into blue channel of emissive overlays, which allows some pixels to be
more illuminated than others (by applying lighting multiplied by
specular mask onto them a second time)
This means that hazard vests, engineering coats, security jackets and
firefighter suits no longer outright glow in the dark, but instead
amplify light so even the tiniest amounts make them highly visible. I
made a pass through all of our emissive overlays and converted ones that
made sense into bloom-less/specular ones.

https://github.com/user-attachments/assets/2167e26e-f8b8-42d7-a67c-dfc643e1df29

I've also converted unrestricted access airlock overlays into overlay
lights instead of ABOVE_LIGHTING overlays, so they should no longer look
jank or catch people's clicks.

<img width="297" height="262" alt="dreamseeker_LovPHZ7xHQ"
src="https://github.com/user-attachments/assets/1bf4d7b8-219a-41ed-aee9-6cdc41803e21"
/>

Turns out that windoors had incorrect icon states assigned to theirs, so
I fixed that too - they should show up again after god knows how many
years.

## Why It's Good For The Game

~~Shiny lights make my moth brain go happy~~
Neat visual effects that look more believable than neon glowing stripes,
and airlocks no longer have inflated hitboxes with extremely weird
visuals.

## Changelog
🆑
add: Added specular overlays - some items like hazard vests or
firefighter suits no longer outright glow in the dark, but instead
amplify existing light to shine brighter than their surroundings.
add: Redid unrestricted access airlock overlays to look less bad
fix: Fixed unrestricted access overlays not showing up on windoors.
/🆑

(cherry picked from commit 3d730689f4)
2025-08-08 15:31:15 -04:00
SmArtKarandGitHub 3d730689f4 Implements (a poor imitation of) speculars, improves/fixes unrestricted access overlay lights (#92272)
## About The Pull Request

Implements a poor imitation of specular surfaces by encoding "shinyness"
into blue channel of emissive overlays, which allows some pixels to be
more illuminated than others (by applying lighting multiplied by
specular mask onto them a second time)
This means that hazard vests, engineering coats, security jackets and
firefighter suits no longer outright glow in the dark, but instead
amplify light so even the tiniest amounts make them highly visible. I
made a pass through all of our emissive overlays and converted ones that
made sense into bloom-less/specular ones.


https://github.com/user-attachments/assets/2167e26e-f8b8-42d7-a67c-dfc643e1df29

I've also converted unrestricted access airlock overlays into overlay
lights instead of ABOVE_LIGHTING overlays, so they should no longer look
jank or catch people's clicks.

<img width="297" height="262" alt="dreamseeker_LovPHZ7xHQ"
src="https://github.com/user-attachments/assets/1bf4d7b8-219a-41ed-aee9-6cdc41803e21"
/>

Turns out that windoors had incorrect icon states assigned to theirs, so
I fixed that too - they should show up again after god knows how many
years.

## Why It's Good For The Game

~~Shiny lights make my moth brain go happy~~
Neat visual effects that look more believable than neon glowing stripes,
and airlocks no longer have inflated hitboxes with extremely weird
visuals.

## Changelog
🆑
add: Added specular overlays - some items like hazard vests or
firefighter suits no longer outright glow in the dark, but instead
amplify existing light to shine brighter than their surroundings.
add: Redid unrestricted access airlock overlays to look less bad
fix: Fixed unrestricted access overlays not showing up on windoors.
/🆑
2025-08-06 23:27:43 +00:00
93bd0c3607 Balance changes to the Wizard MOD and energy shields. (#91932)
## About The Pull Request

Wizard MOD is now bio,flash proof, and comes with the no slips module ,
and the Hilbert DNA lock module installed.

Energy shield charges on the battle shield module have been reduced from
15 to 5 but now regenerate over time.

energy shield charges are now only consumed if at least 3 damage is
dealt to the bubble.


## Why It's Good For The Game

atomization of this PR:
https://github.com/tgstation/tgstation/pull/91702 so I'm just gonna
copypaste the same reasoning.

**Wiz Modsuit changes**

Despite being the Mod given to arguably the highest possible threat a
station should face, this thing is insanely underwhelming.

It doesn't come packaged with even some basic immunities we would grant
to our common antagonists, the charges are limited and once they expire
this suit has nothing to offer besides basic space protection and some
decent armor.

The suit has been rebalanced to offer a wide array of protections and
have the Shield charges regenerate overtime to a maximum of 5, and it no
longer has any slowdown.

You might also want to reconsider using this as crew....

"That's a lot of stuff Jake, won't this make the suit overpowered?"

You can bet your spessman arse it will, Wizard is not supposed to be a
balanced antagonist in any way shape or form, but an absolute force of
chaos.

Given how everything else in the game has been powercept over the Years,
we left this poor dude behind, it's time to address that.

**Energy Shield MOD changes**

I don't think the Shield should expire if no damage (or a pitiful amount
of) hits the bubble, these have already been nerfed to only have 1
charge, it shouldn't require so little firepower (or none of) to
destroy.

## Changelog

🆑
balance: Wiz suit is now bio,flash proof, comes with the no slip and
Hilbert dna module installed, slowdown was removed.
balance: Energy shield charges on the battlemage module have been
reduced to 5 but now regenerate over time.
balance: energy shield charges now require a minimum of 3 total damage
to be consumed.
removal: you can no longer buy additional shield charges for the suit
using the spellbook.
/🆑

---------

Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
2025-07-19 20:29:26 -04:00
30305feb24 Balance changes to the Wizard MOD and energy shields. (#91932)
## About The Pull Request

Wizard MOD is now bio,flash proof, and comes with the no slips module ,
and the Hilbert DNA lock module installed.

Energy shield charges on the battle shield module have been reduced from
15 to 5 but now regenerate over time.

energy shield charges are now only consumed if at least 3 damage is
dealt to the bubble.


## Why It's Good For The Game

atomization of this PR:
https://github.com/tgstation/tgstation/pull/91702 so I'm just gonna
copypaste the same reasoning.

**Wiz Modsuit changes**

Despite being the Mod given to arguably the highest possible threat a
station should face, this thing is insanely underwhelming.

It doesn't come packaged with even some basic immunities we would grant
to our common antagonists, the charges are limited and once they expire
this suit has nothing to offer besides basic space protection and some
decent armor.

The suit has been rebalanced to offer a wide array of protections and
have the Shield charges regenerate overtime to a maximum of 5, and it no
longer has any slowdown.

You might also want to reconsider using this as crew....

"That's a lot of stuff Jake, won't this make the suit overpowered?"

You can bet your spessman arse it will, Wizard is not supposed to be a
balanced antagonist in any way shape or form, but an absolute force of
chaos.

Given how everything else in the game has been powercept over the Years,
we left this poor dude behind, it's time to address that.

**Energy Shield MOD changes**

I don't think the Shield should expire if no damage (or a pitiful amount
of) hits the bubble, these have already been nerfed to only have 1
charge, it shouldn't require so little firepower (or none of) to
destroy.

## Changelog

🆑
balance: Wiz suit is now bio,flash proof, comes with the no slip and
Hilbert dna module installed, slowdown was removed.
balance: Energy shield charges on the battlemage module have been
reduced to 5 but now regenerate over time.
balance: energy shield charges now require a minimum of 3 total damage
to be consumed.
removal: you can no longer buy additional shield charges for the suit
using the spellbook.
/🆑

---------

Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>
2025-07-16 07:37:46 +10:00
SmArtKarandRoxy 856a5f89b9 Implements colored bloom for emissives (#91456)
## About The Pull Request

Emissive sprites now bloom out a bit (3 pixels, to be specific)


![dreamseeker_R8B30ELsSi](https://github.com/user-attachments/assets/77a9b955-b4ca-4f66-aadb-6ecbf0796244)

![dreamseeker_r6cnRUq7Hp](https://github.com/user-attachments/assets/0fcd0b09-bfe9-4fc8-9c8a-0fa8fbaff61e)

This is done by rendering emissives onto a plate, multiplying them by
unlit game rendering plate to color them, then blooming all non-black
pixels (1 offset, 2 size, so 100/66/33% brightness) on it and rendering
it onto the overlay lighting plane. We use overlay lighting because it
slightly detracts from the static lighting plane, so our emissives color
their surroundings a bit even in fully lit rooms.


![dreamseeker_i3RG3WjEfK](https://github.com/user-attachments/assets/d2a5d91c-b511-45e7-88f1-d25d3f4f3876)

You can make emissives not emit light by setting ``apply_bloom`` to
FALSE in ``emissive_appearance()``. This is done by storing bloom in the
red color channel and converting bloomless emissives to green, then
having both render targets have color matrixes which convert them back
to white.

## Why It's Good For The Game

Fancy visuals, goes hard.

## Changelog
🆑
add: Emissive objects now have a bit of a colored bloom around them.
/🆑
2025-06-15 15:52:32 -04:00
SmArtKarandGitHub e82f4c375c Implements colored bloom for emissives (#91456)
## About The Pull Request

Emissive sprites now bloom out a bit (3 pixels, to be specific)


![dreamseeker_R8B30ELsSi](https://github.com/user-attachments/assets/77a9b955-b4ca-4f66-aadb-6ecbf0796244)

![dreamseeker_r6cnRUq7Hp](https://github.com/user-attachments/assets/0fcd0b09-bfe9-4fc8-9c8a-0fa8fbaff61e)

This is done by rendering emissives onto a plate, multiplying them by
unlit game rendering plate to color them, then blooming all non-black
pixels (1 offset, 2 size, so 100/66/33% brightness) on it and rendering
it onto the overlay lighting plane. We use overlay lighting because it
slightly detracts from the static lighting plane, so our emissives color
their surroundings a bit even in fully lit rooms.


![dreamseeker_i3RG3WjEfK](https://github.com/user-attachments/assets/d2a5d91c-b511-45e7-88f1-d25d3f4f3876)

You can make emissives not emit light by setting ``apply_bloom`` to
FALSE in ``emissive_appearance()``. This is done by storing bloom in the
red color channel and converting bloomless emissives to green, then
having both render targets have color matrixes which convert them back
to white.

## Why It's Good For The Game

Fancy visuals, goes hard.

## Changelog
🆑
add: Emissive objects now have a bit of a colored bloom around them.
/🆑
2025-06-08 16:08:13 +00:00