3523 Commits
Author SHA1 Message Date
explosivekittyandGitHub 1024048095 Quad eyes and triple eyes for your characters (#5461)
## About The Pull Request
Adds triple eyeballs to markings/organs under the eyes tab. (They don't
show in the editor BUT they work in game)

Makes quad eyes work again! also fixes them because they had issue where
you could see your eyes under any headgear so they are layered correctly
now. Additionally you further customize how far away they are from your
real eyes
## Why It's Good For The Game
They aren't working, and before that they were working but the layering
was bugged. now you can have multiple eyeballs
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
<img width="356" height="89" alt="image"
src="https://github.com/user-attachments/assets/6f96b5a4-91e5-491a-b0a2-dcdf82d866ba"
/>
<img width="218" height="120" alt="image2"
src="https://github.com/user-attachments/assets/7ea0ad67-9214-440c-9c02-df4aab62153f"
/>
<img width="118" height="63" alt="trieyes"
src="https://github.com/user-attachments/assets/b2e26af2-8378-464d-8846-a0c711c02736"
/>

</details>

## Changelog
🆑
add: Slime triple eyes are now selectable in markings/organs under eyes
tab
add: Width customization for quad eyes
fix: fixes quad eyes to work
fix: quad eyes are now layered correctly
/🆑
2026-04-25 02:27:58 +02:00
MrGloopyandGitHub afb8768493 Preference toggle for eyes visibility (#5449)
## About The Pull Request
Ye Olde title. Adds a preference to modify the opacity of your
character's eyeballs. Mostly made this for my yet-unmerged port of
cybernetics from Eris, some of which are not intended to have eyes
visible and instead use the head sprite to represent them.

Thank you to Statykyr and Artur for helping a lot love you mwah
## Why It's Good For The Game

Not having two very obvious pixels blocking a cool animated robot head
is nice. Also Astrum wants it.
## Proof Of Testing

<img width="943" height="523" alt="image"
src="https://github.com/user-attachments/assets/f1099599-9841-4e44-9095-2badde842d0c"
/>
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
add: Preference toggle for eyes opacity. Have no eyes (visually) or
anywhere in between.
/🆑
2026-04-18 17:01:48 -04:00
RoxyandThe Sharkening 26d7f00a76 Roxy Comments 2026-04-11 08:57:59 -06:00
shayoki be0da4af11 probably 3 2026-03-10 11:55:19 -05:00
nevimer f16aa650fa fixes descending pt1 2026-03-03 23:54:23 -05:00
Alexis 5c5a636485 Merge branch 'master' into upstream-feb12-2026 2026-03-02 07:42:16 -05:00
DanielanceandGitHub eaf6ecbb77 fixes emissive eyes (#5264)
## About The Pull Request

This fixes emissive eyes not being emissive by re-adding some skyrat
code that went missing after the upstream.

<img width="354" height="356" alt="Screenshot_229"
src="https://github.com/user-attachments/assets/2ddf3dc2-8ed1-434d-8104-6b11d7976207"
/>


Note that there is a new(?) bug where the eyes are still emissive during
blinking.
If this is not an issue it could probably be merged anyway.

How blinking should look:
<img width="110" height="142" alt="Screenshot_231"
src="https://github.com/user-attachments/assets/be3c0ad8-751b-451c-8262-b635e309c502"
/>
How blinking currently looks:
<img width="141" height="136" alt="Screenshot_232"
src="https://github.com/user-attachments/assets/4d6a3c80-9d1f-41f9-a98a-124476b49e38"
/>
## Why It's Good For The Game

Bugfix good
Fixes #5247

## Proof Of Testing

Runs of my machine.
<details>
<summary>Screenshots/Videos</summary>

<img width="631" height="348" alt="image"
src="https://github.com/user-attachments/assets/4194d8a9-788a-446f-b658-895f1ba91328"
/>

</details>

## Changelog
🆑
fix: emissive eyes are now emissive again
/🆑
2026-02-28 10:45:42 -05: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
15c707de3b [Bounty] Ports and reworks the Cybernetic limb mounts quirk from Nova (#5136)
## About The Pull Request
Picking up the work from
https://github.com/Bubberstation/Bubberstation/pull/4672 that has since
gone stale and unadded to the game. PR description will be the same as
previously.

Partial Port of https://github.com/NovaSector/NovaSector/pull/465
reworked to use right clicking on self similar the ghouls rather than a
spell.

Coded as a bounty for Dinklemyr
## Why It's Good For The Game
Similar to Nova's explanation, suitable for a lot of character ideas
who's mechanical limbs can be popped off.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
Unfortunately I don't have the images from the initial PR, but I can
confirm this works as intended.
</details>

## Changelog
🆑SpaceCatSS13, YakiAttaki
add: The cybernetic limb mount quirk has been added, synths and people
with synthetic limbs can now take this quirk to remove their limbs at
their discretion.
/🆑

---------

Co-authored-by: Alexis <catmc8565@gmail.com>
2026-02-12 11:30:14 -05:00
3f00e8d37a Fixes delta damage calculation for organs (and brain getting traumas not from damage, but from mannitol healing) (#95103)
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2026-02-11 08:00:36 +01:00
SmArtKarandGitHub 74b00bac99 Husk visuals now inherit their mob's blood color (#95106)
## About The Pull Request

Makes lizard husks swampy green and ethereal husks bright neon green

<img width="187" height="99" alt="image"
src="https://github.com/user-attachments/assets/a9182969-8dc7-4fb5-a55b-8bf30acac730"
/>

Also futureproofed the blood-colored limb overlay element that skeleton
limbs use to work fine if the limb didn't get assigned blood dna (while
its still attached to the owner without being added by butchering)

## Why It's Good For The Game

Preserves visual consistency

## Changelog
🆑
image: Husk visuals now inherit their mob's blood color
/🆑
2026-02-08 18:47:28 -05:00
MrMelbertandGitHub e4f533111f Deafness is now solely tracked by trait (#95029)
## About The Pull Request

Deletes `can_hear`, replaces it with trait-checking deafness.

The only two non-trait sources of deafness (hardcrit and lacking ears)
were refactored into using the trait.

## Why It's Good For The Game

Many places inconsistently check for the deaf trait rather than use
can_hear which meant behavior was not consistent.
Some code would treat "do we lack ears?" as being deaf, some would not. 

This unifies all the behavior so being deaf means you're deaf
everywhere.

It also means we can now easily react to gaining and losing deafness via
signal, where before we could not react to it without hooking the trait,
organ remove, AND stat change. Which no one did, of course, because who
would ever think to do that?

## Changelog

🆑 Melbert
refactor: Refactored how deafness is tracked. Please report any weird
interactions with sounds, like messages or sfx being missing.
fix: Lacking ears and being in hard crit now consistently treats you as
"being deaf". This affects a few minor interactions like empath, the
jukebox, and sleeping.
/🆑
2026-02-05 20:19:56 -05:00
BurgerLUAandGitHub f8576f3669 Forcibly removes Asynchronous Blinking in a semi-modular way because I became a lizard pirate once. (#5197)
## About The Pull Request

Forcibly removes Asynchronous Blinking in a semi-modular way because I
became a lizard pirate once.

## Why It's Good For The Game

There is a weird byond, or /tg/ (I suspect byond) issue where if your
blinking is asynchronous, blinking breaks. This PR just forcibly
disabled the code that runs it so it's just hard disabled.

## Proof Of Testing

It just works.

## Changelog

🆑 BurgerBB
del: Forcibly removes Asynchronous Blinking in a semi-modular way
because I became a lizard pirate once.
/🆑
2026-02-04 01:10:39 -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
MrMelbertandGitHub eac6fe56a2 Blushing matches blood color (#95074)
## About The Pull Request

Blushing's color is generated from blood color, so lizards have green
blushing and whatnot.

<img width="102" height="90" alt="image"
src="https://github.com/user-attachments/assets/b206b29c-f8a8-4dc4-b091-8d7e8f080fc3"
/>

## Why It's Good For The Game

Blushing is when you get more blood in yo face so it wouldn't make sense
to be red(pink) for people without red blood.

## Changelog

🆑 Melbert
qol: Blushing matches blood color, so lizards blush greeeen.
/🆑
2026-02-03 22:16:42 -05:00
SmArtKarandGitHub 91a8c52903 Fixes lipoplasty being usable to dupe infinite meat (#95013)
## About The Pull Request

Closes #95010
A) Fatness was only updated in stomach's life cycle, which was not
called if the patient was stasis'd. It should also be called in
update_nutrition on carbons (can't be exclusive to there as it also
relies on ticking from stomachs)
B) Lipoplasty AND checked obesity and nutrition rather than OR checking
which could allow you to ***increase*** the target's nutrition if they
were obese but hungry (from not being hungry for long enough)
C) It also didn't check for NOHUNGER which also would prevent hunger
updates.
D) It also used old species system for picking the meat type rather than
spawning chest's meat type.

Also converted magic numbers in lipoplasty/butchering/gibbers to fetch
nutrition_factor from nutriments they fill the meat with.

## Changelog
🆑
fix: Lipoplasty can no longer be used to infinitely farm meat or
increase patient's nutrition level
fix: If your chest has somehow been swapped, you will drop the correct
type of meat when undergoing lipoplasty
code: Removed magic numbers in human meat related code
/🆑
2026-01-29 20:27:05 -05:00
MrMelbertandGitHub bd179b079a Secure prosthetic surgery ignores clothing (#95011) 2026-01-29 19:50:42 +01:00
GeoengiandGitHub 437e95142f Assorted X-ray Eyes/Goggles Changes + Penlight Message Fix (#94860)
## About The Pull Request

X-ray eyes now possess the FLASH_PROTECTION_SENSITIVE define, meaning
you need at least an equipped welding mask to protect from flashes.
Syndicate x-ray goggles get a relatively unused sprite (it also belongs
to material goggles, which are only mapped in twice in the entire
codebase), aligning with the color of the x-ray eyes. Moth thermal eyes
are raised a step up to being hyper-sensitive to flashes. Fixed a couple
of penlight messages that I noticed while browsing the _eyes.dm file, as
well, to display properly.

## Why It's Good For The Game

The decision to either choose thermal eyes or x-ray eyes, when
**unlocked by the same techweb node**, is heavily one-sided if you know
anything about either. Thermal eyes allow you to see only mobs through
walls and give you pseudo-night vision, while also making you sensitive
to flashes, in opposition to x-ray eyes that allow you to see everything
without any added flash sensitivity, albeit with no night vision. Even
the changeling ability makes you hyper-sensitive to flashes while X-ray
mode is active, which is something restricted to only them. With this
change, not only does which eye implant type you choose matter, but it
also gives more use to the thermal sight genetics mutation, as that does
not affect flash sensitivity at the cost of only having a temporary
duration per activation. Given flash vulnerability for their regular
eyes, thermal moth eyes are made hyper-sensitive to preserve this
consistency between both moths and the x-ray/thermal pairing. And for
the Syndicate goggles, it also brings consistency with the technology,
as the crew's eyes already establish a color for x-ray technology and
lack of night vision. The bug fixes are just good for the 0.01% of
doctors who would use the penlight.

## Changelog
🆑
balance: X-ray eyes now possess flash sensitivity, requiring additional
flash protection to negate bright lights.
balance: X-ray goggles also no longer have pseudo night vision, putting
them more in line with the eyes.
balance: Moth thermal eyes are hyper-sensitive to flashes, like their
x-ray brothers.
fix: Penlight messages for examining zombie and x-ray eyes work as they
should, with maintenance eyes losing a superfluous period.
image: X-ray goggles now have a relatively unique, blue tint and glasses
color to represent their capabilities.
/🆑
2026-01-28 20:29:06 +00:00
SmArtKarandGitHub 8e63bdd337 Moves disfiguration to be handled by the head instead of the mob itself (#94948)
## About The Pull Request
TRAIT_DISFIGURED and physical disfiguration are now handled by the head
bodypart rather than being on the mob itself. This is mostly for
internal purposes, but it does mean that:
- Players can now perform plastic surgery on torn off heads.
- Disfigured mobs' heads keep their face hidden, and when attached to a
different body won't magically get repaired and vice versa, attaching a
new head to a disfigured corpse no longer disfigures it.
- Robotic (and other non-huskable) heads no longer become disfigured
from husking
- Also in the rare case of grafting a head torn off from a husk onto
another body, they no longer permanently turn into an Unknown. (lol)

## Why It's Good For The Game

Saner code, we generally want limb-specific behaviors to be on limbs
themselves and not on the mob. Also yeah that one weird edge case.
~~Husks are next on the chopping block~~

## Changelog
🆑
qol: Plastic surgery can now be done on detached heads.
refactor: Refactored how disfiguration is handled to be stored on head's
side
fix: Robotic (and other non-huskable) heads no longer become disfigured
from husking
fix: Attaching a head from a husk to a different body no longer
permanently turns them into an Unknown.
/🆑
2026-01-28 20:25:25 +00:00
MrMelbertandGitHub a9bf8675ce Tend wound stats are reported through more means (#95003)
## About The Pull Request

In addition to holding an analyzer, the following will also show you
precise stats during tend wounds

- Operating computers
- Vitals readers
- The Health Analyzer MODsuit module

## Why It's Good For The Game

Health analyzer displaying stats during tend wounds is very helpful
But so is holding other surgical tools. 
So I figure why not allow the three other means of health scanning
people hands free work in place of an ol' analyzer?

## Changelog

🆑 Melbert
qol: Operating computers, Vitals readers, and the health analyzer
MODsuit module (when active) can be used in the place of a health
analyzer to display precise health stats during a Tend Wounds surgery
/🆑
2026-01-27 19:02:58 -05:00
Leland KembleandGitHub 92f1a3cd60 Corrects mispelled "sheering" pain in spine implant emp text (#95006)
## About The Pull Request

sheering -> shearing

## Why It's Good For The Game

I assume they meant shearing & not searing, cause it's the body being
smushed. They definitely didn't mean sheering.

## Changelog
🆑

spellcheck: spine implant emp damaging text spells "shearing" correctly

/🆑
2026-01-27 19:02:03 -05:00
DanielanceandGitHub d261477e21 podperson eye color fix (again (again)) (#5175)
## About The Pull Request

Fixes #5167 upstream bug.
Does the same thing that #3447 did to fix the bug.
## Why It's Good For The Game

Bug fix good!
## Proof Of Testing

Works on my machine.
<details>
<summary>Screenshots/Videos</summary>

<img width="646" height="438" alt="image"
src="https://github.com/user-attachments/assets/d15415e0-fea1-49e4-980b-381c3c068f90"
/>


</details>

## Changelog
🆑
fix: podperson eye color can be changed again
/🆑
2026-01-26 04:51:30 +01:00
John WillardandGitHub ff009b8c10 Snouts push masks out a bit (#94640)
## About The Pull Request

If you have a snout (and it isn't already handled elsewhere by your
species), masks will now be pushed 1 whole pixel up and away from you
when facing left or right.

Examples (TOP IS OLD, BOTTOM IS NEW)

(did you know the welding visor has the lizard's snout sticking out the
front)?

<img width="441" height="357" alt="image"
src="https://github.com/user-attachments/assets/5d703afc-2541-4789-956c-f27dc3fdcf31"
/>

I also tried moving it up one tile too, but it didn't look as nice. (To
be clear, these are not the ones being used, the above screenshot is)
(once again top row is old, bottom row is new)

<img width="1443" height="493" alt="image"
src="https://github.com/user-attachments/assets/c7193237-39fb-466b-9dcd-f5db2a646628"
/>
<img width="1138" height="490" alt="image"
src="https://github.com/user-attachments/assets/398154df-3e56-4f59-b350-24a9c9ea04a1"
/>


## Why It's Good For The Game

I think this makes masks fit snouted faces a little bit better?
Currently they sorta clip into the face which is a little bad imo.

## Changelog

🆑
add: Masks now fit snouted species a little bit better, maybe.
/🆑
2026-01-23 18:03:27 -05:00
JacquerelandGitHub dcc7b82fb9 Suiciding shouldn't usually delete your items (#94935)
## About The Pull Request

Fixes #94662
Makes the remaining suicides I could find that gib or dust preserve
items, as generally suicide should be a personal decision that people
aren't using to spitefully deny traitor objectives or whatever.

ALSO I changed tadpole suicide to just make a big hole in your chest
instead of gib you because, unlike a space carp, I don't think a tadpole
growing into a single regularly sized frog is going to cause your body
to burst into pieces.

The thing about "good first issues" is unfortunately we do also still
want them to get fixed at some point, and people were mentioning that
"suicide drill to delete items" had actually happened in real rounds.

## Changelog

:cl:se
balance: Killing yourself with a tadpole now only bursts your chest open
and not your entire body, and frankly even that is pretty impressive
work for a single frog to manage.
fix: Killing yourself in various other ways that gib or dust you will no
longer delete the items you were wearing, consistent with most of the
other ways of killing yourself that gib or dust you.
/🆑
2026-01-22 17:05:12 -05:00
5ed2539038 Advanced disease cures are symptom based (#94352)
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2026-01-20 09:52:46 +01:00
BloopandGitHub 3a1b6a7995 Adds some extra args to some surgery procs (#94904)
## About The Pull Request

Tin, we already have these available, might as well make them available
to the procs as well.

## Why It's Good For The Game

Code extensibility

## Changelog

Not player-facing
2026-01-19 12:21:50 -06:00
55279df884 voltaic cyberheart: stoppable overlay timer, losing overdrive on heart loss (#94817)
Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
2026-01-18 17:24:51 +11:00
MrMelbertandGitHub b3e15f3027 Singing cauteries (#94880)
## About The Pull Request

Corrects Singing -> Singeing

Also as this proc can be invoked with a suture, add a message for that
too

## Changelog

🆑 Melbert
spellcheck: Corrects the blind message for manual cauterization
/🆑
2026-01-16 17:10:51 -05:00
MrMelbertandGitHub 2a9faabcd7 Fix wound surgical state (#94858)
## About The Pull Request

Fixes #94855

Three things

1. We filter incompatible surgical states when removing the wound. I'm
not sure if this contributed to the problem, but it seemed wrong
regardless - At that point we don't really care about incompatible
states since we're removing everything regardless
2. `COMSIG_BODYPART_UPDATING_SURGERY_STATE` was registered before adding
the states, which would cause the act of adding the states to clear the
variable.
3. The signal handler was missing the source arg, so it was removing the
wrong values.

## Changelog

🆑 Melbert
fix: Surgical state applied by wounds no longer persist after fix
/🆑
2026-01-14 15:14:42 -07:00
SmArtKarandGitHub 84519a3b3f Fixes digitigrade limbs not being butcherable, adds digi bone limb variants (#94842)
## About The Pull Request

As limbs rely on ``limb_id`` to fetch their meat info, digi limbs would
fail to do so and be unbutcherable since they use a unique digi ID from
a separate spritesheet. I've separated biological limb effects into a
separate var (or rather made one that acts an override for ``limb_id``),
so now they should be butcherable.

Butchered limbs now respect bodytypes of the original, and have unique
sprites to match that (currently this only matters for digi legs, plus
monkey creampie face sprites)

<img width="85" height="122" alt="image"
src="https://github.com/user-attachments/assets/a8766a62-e3f5-4265-964f-c48164f1bf6c"
/>

While at it I've also made some non-species limbs have butcher results -
living meat now drops a chunk of synthmeat, while psyker heads drop
their owner's original species' meat.
2026-01-14 19:25:19 +00:00
nevimer a9a59ed3f9 Merge remote-tracking branch 'origin/upsteam-12-15-25-revert-unique-reskins'
# Conflicts:
#	_maps/bubber/automapper/templates/centcom/interlink_adminoffice.dmm
#	_maps/map_files/BoxStation/BoxStation.dmm
#	_maps/map_files/generic/CentCom_skyrat_z2.dmm
#	_maps/map_files/moonstation/moonstation.dmm
#	code/modules/holiday/holidays.dm
2026-01-12 22:09:10 -05:00
Tad HardestyandGitHub e5e06aff43 Fix corner-case runtimes for removed jobs, other minor fixes (#94822)
* Fix runtimes in `/datum/id_trim` and when equipping corpses if a map's
.json file fully removes a job
* Remove unused `/datum/powernet/var/number`
* Fix ctrl+clicking a telescreen to mute it also activating it normally
* Unmark `_liver.dm` as executable
2026-01-12 17:51:24 -05:00
san7890andGitHub 265ceb3eb2 Fixes Flakey Ashwalker Lung Unit Test Failures on gateway_test (#94821)
## About The Pull Request

Closes #94794

Both of these unit tests were using the outdated way of changing the gas
mix on a turf, probably because they were more than a few years old
apiece. The modern way is using the `/datum/gas_mixture` and
`parse_gas_string()` to either retrieve the gas mix from cache or
generate it on-demand. Neither of these tests were doing that, and they
worked well enough until they got mutated in #94771
(01c7ef7de1).

I am uncertain of the specifics that are behind either one
spontaneously/always failing but I do know that they weren't doing it
the "right way". I suspect the flakiness in the Breath Ashwalker Sanity
(that loads a full ashwalker carbon instead of just the lungs) is
because it was initiating a gas mix with no volume within it, and that
volume would get filled up as the other turfs in the loc would update it
somewhere in the atmos chain? We only checked for the "low oxygen"
status effect on the mob and that could easily have been filled up to
normal depending on how much happened. Regardless the best way to fix
this is to just have all the turfs in the unit test room get changed to
prevent any schenanigans with that.

Another explanation for the flakiness is that the ashwalker lungs
themselves use the same "old" way of getting the gas mix instead of the
modern way (such that the lung breath values can adapt to changes)... I
think...
## Why It's Good For The Game

Less developer frustration at spontaneously failing unit tests through
no fault of their own.
## Changelog
Irrelevant
2026-01-11 15:02:01 -05:00
NickandGitHub 834245ecdb creates more deticated folders for tools and weaponry and move dm files into them (#94804)
## About The Pull Request
Hello hello the evil folder mover goat is back, i will destroy years
worth of muscle memory.

Items is an folder alot of stuff that really didn't get a spefific
location.

Items/Weaponry Contains
Shields.dm

Items/Weaponry/Melee Contains (Most of the extra dm files come from me
splitting misc/weaponry.dm into its own categories killing offf
weaponry.dm in its whole)
baseball_bat.dm, baton.dm, chainofcommand.dm, chainsaw.dm, claymore.dm,
dualsaber.dm, energy.dm
fireaxe.dm, high_frequency_blade.dm, his_grace.dm, katana.dm, knives.dm,
misc.dm, powerfist.dm, sabre.dm
soulscythe.dm, spear.dm, supermatter_sword.dm.

Items/weaponry/ranged Contains
flamethrower.dm, pnuematic_cannon.dm, throwing_star.dm

items/tools Contains
control_wand.dm, extinguisher.dm, inducer.dm, spess_knife.dm,
theft_tools.dm

items/tools/engineering Contains
airlock_painter.dm, decal_painter.dm, paintable_decals.dm, crowbar.dm,
screwdriver.dm, weldingtool.dm
wirebbrush.dm, wirecutters.dm, wrench.dm

items/tools/janitorial Contains
broom.dm, janitor_key.dm

items/tools/medical Contains
bodybag.dm, cane.dm, defib.dm, reflex_hammer.dm

boxcutter.dm is merged into knives.dm
Kitchen.dm renamed into kitchen utensils and moved into food and drinks
module
surgery_tray.dm moved into surgery module
banhammer/extendo hand moved from weaponry into toys.dm
balloon mallet moved into clown_items.dm
ectoplasm moved from weaponry.dm into soulstone.dm (since thats the
resulting residue when a shade dies, and not really a weapon)


## Why It's Good For The Game

So things are way easier to navigate

## Changelog
2026-01-10 17:56:19 -05:00
d5102b2030 Void stamp integration - the stampening (#94359)
## About The Pull Request

Void stamp added to bureaucracy loot spawners, a new box that contains a
granted, denied, and void stamp found in the lawdrobe, hop locker,
bureaucracy crate, mod stamper module, and the paperwork implant gets a
stamp that can cycle between 3 different ones like the mod stamp.

## Why It's Good For The Game

Finally the void stamp is obtainable

## Changelog

🆑
add: The void stamp is now obtainable
add: The lawdrobe now sells a box of stamps
add: The head of personnel's locker now contains a box of stamps
fix: The mod stamper module is now visible
/🆑

---------

Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
2026-01-08 18:31:15 +00:00
FalloutFalconandGitHub dd2902914b Enforces organs calling on_life parent (#94749)
## About The Pull Request
on_life handled failing and healing, this makes it so ALL organs call
its parent proc for it.
Was originally spurred on by the fact this is not enforced causing
stomachs to not call it by mistake.
## Why It's Good For The Game
all organs now heal and fail as intended?
two that MIGHT be intentional are brains and glands. Let me know if so
## Changelog
🆑
fix: Brains, a few implants, glands, and all other organs now heal and
fail as intended
/🆑
2026-01-07 08:43:19 +01:00
SyncIt21andGitHub f35684b41e Fixes non functional code in emp brain (#94687)
## About The Pull Request
- Fixes #94554

## Changelog
🆑
fix: removing implant in cybernetic brain works again
/🆑
2026-01-07 00:16:39 -05:00
SyncIt21andGitHub 2618cffef3 Replaces micro dosing with volumetric dosing (#94621)
## About The Pull Request
To understand the PR we should first define what is micro dosing &
volumetric dosing

- **Micro dosing:** The reagent effects are **independent** of the
volume of reagent metabolized and are constant every tick, so the effect
you get from metabolizing 0.01u of a reagent is the same as metabolizing
1u of a reagent
- **Volumetric dosing:** The reagent effects are **dependent** on the
volume of reagent metabolized per tick, so the effect you get from
metabolizing 0.01u is much lower compared to metabolizing 1u of a
reagent which is much higher

This PR replaces **micro dosing** with **volumetric dosing** so if you
increase metabolization rates and absorb more reagents you get higher
effects from that reagent & vice versa for lower metabolization rates.

With that lets ask the core questions

**How does this affect present reagent values?**

_This PR scales all reagent effects such that even if it has a lower
metabolization rate the value is the same as before but will still scale
with reagent volumes & mob metabolization levels_

Under normal circumstances most reagents metabolize at 0.4u of reagent
per tick so as long as this value isn't changed by cybernetic body parts
or other reagents you will get the same values as before and won't
notice anything different in normal gameplay.

However, if you do get enhanced body parts like a cybernetic
liver/stomach or use reagents with metabolization rates different from
0.4u you will now get more/less affects depending on how much reagent is
consumed. Here is an example

Consider Syriniver this is how the formulae look like.

```dm
adjust_tox_loss(-1 * metabolization_ratio * seconds_per_tick, updating_health = FALSE, required_biotype = affected_biotype)
``` 

as long as 0.4u of it is metabolized every tick you get 2 tox loss
healing which is the same as before. However, this time if you
metabolize 0.01u of the reagent you get only 0.1 tox loss healing. If
you metabolize 1u reagent per tick, then you get 5 tox loss healing

**What about cigarettes?**
Unaffected. The amount of reagents injected into a mob per tick **does
not** affect the rate at which it is metabolized. Even if you have like
10u of cigarette reagents within you, if you are metabolizing just 0.4u
of it every tick then nothing changes

## Why It's Good For The Game
- Volumetric dosing is realistic. If you metabolize more reagent you
should be getting more benefits and lesser volumes should yield lesser
affects
- Microdosing is an exploit that should have been patched a long of time
ago because it encourages people to put in minimal effort to produce
just 0.01u of reagent to get maximum affects. This coupled with slower
metabolization rates leads to unbalanced higher reagent effects for
longer periods of time.
- This PR address the core issue in #93991 which is heal all patches.
Plumbing was gutted in an unnatural way by making the plumbing iv
drip/output gate/pill press behave essentially as mini reaction chambers
by filtering just 5 reagents. With this heal all patches are nerfed
based on the number & now volume of reagents you can put in a patch, so
its concern is addressed. If this does get merged, we can hopefully
revert it and make plumbing great and behave like large factories again
<img width="914" height="230" alt="Screenshot (532)"
src="https://github.com/user-attachments/assets/96467fad-b32f-409a-a1e8-2a92b8ff6565"
/>


## Changelog
🆑
fix: probability reagent affects scale correctly
balance: reagent affects now scale with the volume of reagent
metabolized meaning lower metabolization rates (from like cybernetic
organs) yield lower effects & higher rates yield higher effects
/🆑
2026-01-07 00:14:54 -05:00
SmArtKarandGitHub 89d2a16712 Sinew on bones from butchered limbs now inherits its owner's blood color (#94726)
## About The Pull Request

As title says, bones now get a colored overlay corresponding to their
limb's blood color instead of constantly having pink sinew.

<img width="76" height="77" alt="image"
src="https://github.com/user-attachments/assets/e6f8ffb8-fffa-49a8-93ed-77db618ff347"
/>

## Why It's Good For The Game

Doesn't make sense that lizards would still have pink sinew despite
their blood being green

## Changelog
🆑
image: Sinew on bones from butchered limbs now inherits its owner's
blood color
/🆑
2026-01-07 00:12:39 -05:00
MrMelbertandGitHub 156b8b0bae Adds an operation for treating a dislocation, also wound surgeries get wound scanner boost (#94727)
## About The Pull Request

- Adds `"reset dislocation"` operation, which effectively does
everything that manually treating a dislocation does, with the same
tools.

- All wound surgeries now get a speed boost for treating a scanned wound

## Why It's Good For The Game

- A doctor who attempts to reset a dislocated limb of a patient
undergoing surgery would fail due to attempting to "operate" on the
patient with the bonesetter (surgery takes priority over wound
treatment). I decided the best way to fix this was to add an operation
analog to the manual wound treatment. Effectively the same thing (same
steps, in fact), but doing the operation form is faster and doesn't
leave residual brute damage, to reward people who go through the effort.

- For consistency reasons this made sense to me - scanning a wound
improves manual treatment rates, so it should also apply to surgeries
which treat the wound.

## Changelog

🆑 Melbert
add: Adds "reset dislocation" operation, which is a surgical analog to
resetting a dislocated limb. Same tools, same steps, but if you go
through the effort of doing it surgically, it's faster and safer.
add: All wound surgeries now gain a speed bonus from being wound
scanned.
/🆑
2026-01-05 16:27:48 -07:00
JacquerelandGitHub 80367e9941 Fix two bugs with Shadow/Nightmares (#94739)
## About The Pull Request

Fixes #94117
The "I'm in shadow" indicator alert was dependent on a status effect
being reapplied by `Life()` every 2 seconds. Since we made status
effects tick faster, it now quite realiably ends before it is reapplied
such that players can see the alert animate out and back in.
I fixed this pretty trivially by just adding one status effect subsystem
tick worth of time to the duration so it shouldn't do that any more.

Additionally, there was some code there intended to not display the
indicator to Nightmares (they have their own similar one) but it
expected the Nightmare status effect to always be present first, which
didn't happen. I just made it check specifically for Species instead, as
the only item which applies the Nightmare status effect also changes
your species anyway.

Finally, while I was testing this I noticed that whenever Shadowpeople
or Nightmares examined themselves it would say "You feel like you're
about to pass out!"
This is because it was noticing that they had an unusually low amount of
blood (none), on account of how they don't have blood.
I changed the code so that bloodless mobs will no longer start getting
dizzy at the thought of how they don't have any blood.

## Changelog

🆑
fix: Species that aren't supposed to have blood will no longer report
feeling dizzy from bloodloss on account of how they have no blood.
fix: The "I am stood in the dark" indicator for Shadows and Nightmares
will no longer flicker on and off.
/🆑
2026-01-05 17:15:41 -05:00
MrMelbertandGitHub 5ef61fde05 Being drunk makes you a worse surgeon unless you land in the Balmer Peak (also Balmer Peak tweak) (#94674)
## About The Pull Request

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

## Why It's Good For The Game

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

## Changelog

🆑 Melbert
add: Scientists only say Balmer voicelines if they are whimsical
add: Surgery gets slower if the surgeon is drunk, UNLESS you land in the
Balmer Peak, then it's actually faster.
/🆑
2026-01-04 20:38:22 -07:00
MrMelbertandGitHub d8110cb820 Fix several surgery operations having priority (#94712)
## About The Pull Request

From the horses mouth, "copypasta" 

## Changelog

🆑 Melbert
fix: Fixes more surgeries being marked as a priority operation that
intended
/🆑
2026-01-03 21:35:34 -07:00
rgggandGitHub cf35256cc5 Let ethereals wear underwear, as god intended (#5078)
## About The Pull Request
Removing one line of code lets ethereals wear underwear. God bless!
## Why It's Good For The Game
This is intended. In the ethereal species module, NO_UNDERWEAR is
already commented out, but coders forgot to remove the same trait
assignment in the surgery module. Also, I need to put my ethereal in the
neko bikini.
## Proof Of Testing
Works locally, compiles and runs fine. Ethereals can wear underclothes.
<details>
<summary>Screenshots/Videos</summary>
<img width="212" height="324" alt="image"
src="https://github.com/user-attachments/assets/3189bb3d-5377-4885-bbc1-9eedaa32a8aa"
/>
</details>

## Changelog
🆑
fix: Lets ethereals wear underwear again.
/🆑
2026-01-02 01:40:56 +01:00
SmArtKarandGitHub a4f0dcb76f Adds flaying, human butchering and limb surgeries (#94612)
## About The Pull Request

Merry Christmas!

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

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

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

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

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

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

## Why It's Good For The Game

While rather gruesome, I feel like the freedom which these mechanics
provide fits us pretty well. We already have plenty of nasty stuff and
this doesn't really go that much further, and a chef serving their own
leg in their dish is pretty funny. (Also you can scrape plasma off
plasmamen bones)
2025-12-31 12:55:39 -06:00
MrMelbertandGitHub debc5754b2 Fix inverted moth wing repair check (#94616)
## About The Pull Request

The instructions state `if the limb has bones, they must be intact` 
But the code checked `if the limb has bones, they must be be sawed`

Also removed the organ flag requirement (it's redundant)
Also updated some wording

## Changelog

🆑 Melbert
fix: Moth wing repair surgery correctly checks that bones are intact
rather than bones are sawed
/🆑
2025-12-28 22:06:59 -05:00
53ed83bb9d Makes some more lists lazy (#94388)
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2025-12-28 19:57:42 +01:00
SyncIt21andGitHub 7c5ef1cfb8 Removes unused parameter times_fired from mob procs (#94590)
## About The Pull Request
What it says on the tin. `times_fired` is the most unused parameter in
all mob procs. I say most because there were just 2 cases where it was
used
- handling breathing
- handling heartbeat

Besides these 2 cases this parameter did nothing in every proc. Removing
it does 2 things
- Makes those procs more readable as it now has 1 less parameter that
was documented poorly and did nothing
- Makes those procs slightly faster as we are passing 1 less variable to
its parameter call stack

It can easily be substituted with `SSmobs.times_fired` which was its
original value anyways

## Changelog
🆑
code: removes an unused parameter `times_fired` from mob life procs.
Making them function slightly faster
/🆑
2025-12-26 09:51:33 -05: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
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