1880 Commits

Author SHA1 Message Date
Arturlang bde2f58c72 pref for seethrough limbs (#5805)
## About The Pull Request
adds a pref for making limbs partially-seethrough, i kept options for
head and body as disabled prefs because why not
## Why It's Good For The Game
some people want this aspect of customization, could be extra useful for
slimepeople too, or holographic aspects, since it can be partial invis,
does not prevent their hitboxes from working since it's alpha changes
though
## Proof Of Testing
<img width="107" height="92" alt="image"
src="https://github.com/user-attachments/assets/a481771d-a632-469a-946b-602b6b03b93b"
/>

<img width="98" height="99" alt="image"
src="https://github.com/user-attachments/assets/c58f7329-a366-461d-a815-7cb687691e11"
/>

<img width="1100" height="790" alt="qfpaTFo0Bh"
src="https://github.com/user-attachments/assets/710ccb2b-fae4-4a8b-951e-d2bae4f141f1"
/>


## Changelog
🆑
add: pref for limb transparency
/🆑
2026-06-20 01:25:46 +02:00
nikothedude c3c54bf66c Heretic rework & reintroduction - less prog, less murder, more cultsim LARP (#5445)
# Before TMing this please contact me on discord, I'd like to observe
the TM

## About The Pull Request

### There is a shimmer in the air, again. Familiar. The nighttime walk
of dreams yet again takes the uncomfortable form of an icey woodfield,
moths and owls swooping overhead. An uneasy shiver runs down the spine
of the world. The gaze of the Light focuses on our lowly region of space
- will you knock?

Design doc V1 (Tentative, may change based on feedback):
https://hackmd.io/@NikoTheGuyDUde/B1XEAAv3Zg

Reverts https://github.com/Bubberstation/Bubberstation/pull/5268 by
reworking heretic into a far less scaling, less dangerous, and less
murdery antagonist. Read the design doc for more.

### DISCLAIMER
I was not a mainline heretic player, nor someone who had constant
contact with ehretics. Therefore, I am not the best judge of heretic's
balance. A lot of this is **prone to change**.

### Changes
Heretic is now named **acolyte.**

#### Base kit
1. Heretics can no longer blade break. This is because jesus christ
blade breaking was annoying but also as a way to remove some of
heretic's crazy mobility.
2. Cloak of shadows and warren king's welcome are now 0.5 cost shop
items.
3. Passives are purchased now, with cost based off the path itself.
4. The same is true for blades and the mansus grasp mark, being 2 cost
nodes.
5. The heretic aura is now completely disabled, until I find some way to
use it.
6. The living heart ritual now requires plasma. You cannot get a heart
in perma, good riddance.
7. You can no longer shovestun after a grasp. Still a very useful tool,
though.
9. _**ASCENSION IS GONE.**_ Your only progression is with your
objectives. Find a gimmick to do if you want. Opening ways will be hard
enough.
10. Rituals & Mansus grasp are disabled if you have no heart. Its now
complete neutering.

#### Countermeasures
1. No heart = No rituals and no mansus grasp for anything but runes.
2. Added antimagic collars to security and cargo that act the same as
having no living heart, but is less invasive and can be more easily
removed.
3. Most heretic items have examine hints to non-heretics now.

#### Progression
1. Heretics now only progress via their intrinsic objectives, and only
up to a point. Ex. 0.5 points per influence, 2 points per way.
4. Passive generation is also substantially slower.
5. Heretics now have access to **fifteen knowledge points** on spawn,
and **their entire research tree+draft shop**. No more draft freebees
exist, either. (This is prone to change)
#### Objectives
1. Drain Influences - Influences now passively drain sanity aroudn them,
cause hallucinations, and have a rare onetime chance to spawn a heretic
mob. The heretic must drain **six-seven** influences to gain **two**
knowledge points.
2. Open Ways - Ways are a new type of heretic influence that spawn
exclusively in high-importance or high-traffic areas. A heretic must
perform a ritual with four randomly generated items on the way to open
it. Once open, the way has a variety of effects, the majority of which
are **beneficial, but in a bad way.** Ex. spawning 5000 mols of a
valuable gas. The heretic must drain **three** ways to gain **four**
knowledge points.
3. Wildcard - There are currently five wildcard objectives any heretic
can roll. **One:** Steal 1000-1250 credits from crewmembers using the
Claw of the Capitalist ritual. **Three:** Have 9-10 crewmembers consume
potions from the Mawed Crucible. **Four:** Perform a ritual in the SM
chamber to neuter its output for 10 minutes. **Five:** Perform a ritual
in the AI upload to upload 3 ion laws to the AI.
#### New spells
1. Cloak of shadows & Warren king's welcome are now 0.5 cost knowledge -
This gives me a reason to give heretics just a bit more starting
knowledge.
2. The Owl's Secrets - Sacrifice a radio, a pair of ears, and a
bluespace crystal to cast a curse on the telecomms processors. For five
minutes, any outgoing message will be corrupted into heretic-speak, and
will damge the sanity and brain of anyone who hears them. If you start
seeing hypnophrase in the chat, take off your headset or turn off the
processors. 2 uses, as this has the potential to be really annoying. 1
cost.
3. Paranoia's eye - A silent, focusless spell that curses nearby people
to see everyone around them as heretics and disables their ability to
examine them for one minute. 1 cost.
6. Claw of the Capitalist - Allows you to transmute someone's blood into
money by stealing it from their account. Each 1u of blood of 5% drained.
If the blood is from a phylactery, it wont steal any that will reduce
the target's account below 300 credits. The target is notified when this
happens. 1 cost.
7. Voice of the mansus - Single use, but re-researchable, ritual that
allows you to do a fake announcement. 1 ears, 1 radio. 0.5 cost.
12. Trickster's pen - Transmute a pen, a sheet of plasma, and a pair of
eyes into a pen that can be used to change the name, age, job, and trim
of a card, and clicked to turn you momentarily near-invisible. 1 cost.
13. Trickster's mask - Transmute a bandana and a spraycan into a
chameleon mask. Thats it. Best with the pen. 0.5 cost.
14. Trickster's Promise - prestidigitation. You can make an item glow,
clean a atom (cleans forensics), shoot confetti, or my personal
favorite, increase the food quality of an edible by 2 and add 5u of a
weak synth-healing omnizine to it. Perfect for chef heretics. 1 cost.
15. Unwrap Minds - EARLY PULL FROM
https://github.com/tgstation/tgstation/pull/95796/. Scalpal, glass
shard, paper, victim. Hypnotizes the victim with whatever is on the
paper. 2 cost.
16. The Blacksmith's Hammer - One diamond, one set of wirecutters,
upgrades your mansus grasp to emag whatever you hit on right click. One
time use - has to be reinvoked every time. 1 cost.
17. Watching Eye - One set of eyes, a sheet of plasmaglass, and a
blindfold creates a one-time small item that can be viewed as if it was
a long-rnged x-ray camera. Has 10% opacity, for sneakiness. While
uncontained in anything, the heretic can whisper a phrase - such as
sleep, blind - to create a short-term, localized negative effect on
non-heretics that the eye is viewing (but only if theyd be viewable
without x-ray). 2 cost, only one can be made - high risk, high reward.
Sprite by Burger, from path of exile.
#### Spell rebalance
1. Ether of the newborn now doesnt heal normal damage. Get a medkit for
that. Additionally, implants remain. Get a _doctor_ for those, or use
any of the other methods to break them.
2. Mawed crucible potions can now be consumed by non-heretics, albiet
disgusting. The potion shop gimmick is real. Additionally, crucible soul
now lasts for 20 seconds and leaves a trail towards the location you
jaunted from when you return. This is because I've heard quite a few
people complain about this thing in the olden days. This doesnt make it
useless, but it does make it more difficult to use.
4. Space phase now has a 2 second do after before phasing out,
uninterruptable. This is mainly for tramstation and icebox when holy
fucking shit it is ridiculous.
5. Wave of desparation now costs 3 points.
8. Armor is now four points.
9. Rust kit and paintings are gone.
10. Codex morbus is gone. Sorry, I dont want to deal with rebalancing it
right now.
11. Phylactery now needs LOS, and has a 3 second do after.
12. Void cloak now disguises itself instead of going invisible.

### Changed paths

#### Void
In the interest of making void a little less murderkill, I opted to add
some flavor and alternate use to void's abilities.

**Void chill** can now put you to sleep if you click its status. This
sleep will heal you via cryoxadone. Being hit will wake you up, as will
void chill going away.
* This is intended to add a alternate, medical use to void, as well as
to nerf void chill a little bit. It does nothing to help you in active
1v1 combat, but if the void heretic disengages, you can heal yourself.
Its alsl nice and flavorful.
Void chill is also now nearly 100% countered by leporazine. Coffee and
tea help with the slowdown, but dont help with cold at 5 stacks.

**Void pull** is gone. **Cloak of darkness** replaces it, with perfect
invisibility taht prevents the use of any tools or abilities while its
active. Being hit instantly banishes it. The cloak slowly cools the air
around you, so if people are aware of your status of a void heretic,
they might be able to guess the chill in a previously warm room might be
you.

**Void conduit** no longer griefs windows and doors. It now chills the
air around it, while putting people to sleep - using the same eldritch
sleep that void chill does. You can use coffee to counteract this, or
simply fire at the conduit from a distance.

**Void cage** now heals the target for 2 of each damgae type a second.
Can now be self-cast. _Still useful for its intended roles._

**Void phase** now has a 40 second cooldown instead of 20. 20 is
ridiculously low for a jaunt with guaranteed EVA power, and 40 should
prevent its abuse.

_Void will probably receive further changes._ On the docket is a void
phase nerf and a void conduit nerf.

#### Moon

**Ringleader** no longer stuns you if you kill a clone, only knocks
down.
**Lunar parade** now lasts for 45 tiles, down from 60.
The passive's healing is reduced by 25%.
The blades upgraded brain damage is now 20, and the sanity threshold for
insanity is now disturbed.
The armor now translates slughtly more health, meaning its less
protective.

_I understand moon the least of all the paths, but I love its flavor, so
I decided to focus on it. Im balancing based off what Roxy suggested
were the issues._

## TODO

- [x] Void path rework
- [x] Investigate if we need to nerf moon more, maybe reflavor it as
well
- [x] Implement the third objective
- [x] Rigorous bug testing
- [x] Rewrite UI
- [x] Remove irrelevant tarting spells (sacrifice, notably)
- [x] Add more non-combat spells

### Implemented paths

- [x] Void
- [ ] Moon
- [x] Lock
- [x] Flesh
The paths beneath this line will be focused on after the initial TM is a
success.
- [ ] Blade
- [ ] Ash
- [x] Cosmic
- [ ] Rust
## Why It's Good For The Game

Heretic is one of the most flavorful internal antagonists in the entire
game, flavorful enough people were making characters around heretic,
people had entire storylines based on heretic, and I feel a lot of value
was lost with heretic. Simulatniously, uh, _**heretic was one of the
worst designed antags in the game?**_ Too powerful, too scalable, and
generally just has a "I HAVE A ANTI-EVERYTHING SHIELD" vibe.

This PR brings it back as a static, traitor-style antag with limited
progression. Variety is always good.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>
TODO
</details>

## Changelog
🆑
add: Heretic - Now reworked as a far less oppressive and far less
scaling antagonist
/🆑

---------

Co-authored-by: Roxy <94389951+SapphoQueer@users.noreply.github.com>
2026-06-18 20:37:25 +02:00
nevimer aa0dc869bc misc master fixes, re-pulls (#5774)
fixing master issues after upstream merge

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: mcbalaam <104003807+mcbalaam@users.noreply.github.com>
2026-06-16 01:14:05 -04:00
gavla cb602798d5 📷📸📷 2026-06-11 15:36:38 -04:00
gavla 1262a99963 📷 2026-06-11 15:36:38 -04:00
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
MrMelbert 65c41f0cb6 Cutting an airlock's ID wire prevents ID usage again (#96195) 2026-06-01 23:20:53 -04:00
SmArtKar 8eed335b94 Refactors inventory UI to be completely datum and vis_contents-based (#95998)
## About The Pull Request

Completely removes individual inventory UI handling from mob and HUD
code and moves it to slot datums.
``/datum/inventory_slot`` now is responsible for displaying items on the
player UI and does so through vis_contests as opposed to screen_loc -
which ensures that wide items will display properly rather than be
offset to the right.
Centralized, slot_id based handling allows us to significantly simplify
inventory and HUD code (see how many lines were removed) as you no
longer need to individually track all items for both the HUD owner and
the observer, and makes it easier for us to fully datumize inventory
handling in the future.

Also fixes a bug where observers would see players' storage UI and have
the items linger on-screen after its closed.

## Why It's Good For The Game

Makes working with inventories and HUDs easier, fixes visual issues with
wide items, I need this for human rendering refactors.

## Changelog
🆑
refactor: Refactors inventory UI to be completely datum and
vis_contents-based
fix: Observers should no longer see doubled up inventory UIs
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-05-31 14:27:23 -07:00
John Willard 751bfc08bb Removes the IC tab (#95893)
## About The Pull Request

Removes the IC tab in its entirety

- Some mobs (Blob Minion & Lightgeist) had manually removed the "pull"
verb, this replaces it with taking away their pull force.
- Lightgeist had their "Me" verb manually removed, this is replaced by
giving them Emotemute trait (the same that mime's bane gives)
- Floor Changer: You can now RMB the arrow buttons to look in a
direction w/o moving. Added a tip to help with this.
- Exit Hivemind: Already an action button and was removed without
further edits

### Removed entirely

Rest
Resist
Look Up/Down
Move Upwards/Down
Activate Held Object
Open Language Menu
Memories
View Skills

### Moved to command bar (secret verb ooh) because I am biased

Sleep
Navigate

### Martial Arts

Martial Arts had a button to see your current skills & the ability to
cycle between artstyles. This was replaced with 1 action button that
does both of these.

<img width="317" height="148" alt="image"
src="https://github.com/user-attachments/assets/afed910f-b6b6-441d-86cb-dade0e253044"
/>


Name auto-updates as you swap artstyle to whatever help verb the current
style uses. Mention of RMB in the name is only there if you have more
than 1 martial art, but the desc will remain just so players can see it
even if they only have one, for future reference.

## Why It's Good For The Game

Brings greater visibility to Martial Art stuff, and especially since the
stat panel is being made optional we should not be hiding ANYTHING in
there.

This also helps me with my project listed in
https://hackmd.io/443_dE5lRWeEAp9bjGcKYw?view

And also fixes some sorta-removed features due to removing verbs not
matching people's actual powers due to new features like "Custom Me" and
"Ctrl Clicking".

## Changelog

🆑 SirNightKnight (sprites), JohnFulpWillard
del: Deleted the "IC" tab of the stat panel.
fix: Lightgeists can't emote or pull as intended.
fix: Blob minions can't pull again.
qol: Martial Art users now have an action button for their
artstyle-related businesses, rather than it being in the stat panel.
qol: You can now right-click the move up/down UI buttons to look in the
direction without moving.
/🆑
2026-05-26 16:27:09 -07:00
nikothedude be4c58986c Allows cursekin to load a preference slot instead of simply changing species. (#5568)
## About The Pull Request

Title.

Adds a new preference option that allows you to designate a character
slot as your lycan transformation. Does not transfer quirks and does not
change the name.

Additionally, allows peopel to use the lycan species as a prefs-only
species for customization.

### Note

This will likely transfer languages and a few other things, but nothing
gamechanging. If the SAD does it (excluding quirks), this probably also
does it.
## Why It's Good For The Game

Adds for customization of the lycan form. Hair, Augments (NOT IMPLANTS).
Even taur mode.
## Proof Of Testing
<details>
<summary>Screenshots/Videos</summary>

<img width="923" height="643" alt="image"
src="https://github.com/user-attachments/assets/92586859-0bc3-49f5-be8a-f39ac798b730"
/>

</details>

## Changelog
🆑
add: Cursekin can select a character slot to transform into rather than
just siwtching species.
/🆑
2026-05-17 20:40:01 +02:00
Alexis 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

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

---------

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

There's a few of these that conflict, mostly relating to timing. This
conflicting won't actually break anything but it does muddy "what is
this doing" somewhat and it's good to be clear so here we go

## Why It's Good For The Game

Makes the MC very slightly harder to confuse yourself with
2026-05-11 11:20:24 -04:00
MrMelbert 3450f8ba1e Lizard frills are hidden by HIDEHAIR rather than HIDEEARS / Lizard frills are masked like hair by hats (#95986) 2026-05-09 13:23:48 +02:00
SmArtKar 940d91bb62 [MDB IGNORE] Adds new features and tiles for lavaland biomes (#95955)
## About The Pull Request

Adds new floor types and natural decor to both Siderite and Shale
biomes, as well as makes flora and fauna spawns differ between said
biomes.

<img width="1216" height="997" alt="dreamseeker_uIv1OgVkpD"
src="https://github.com/user-attachments/assets/327d9caa-a58c-4d70-acbe-477da69b4d71"
/>

---

Basalt biome now spawns more legions and goliaths, but less watchers and
no brimdemons. You can rarely find new volcanic pore rocks which will
spew out lava when destroyed.

<img width="505" height="361" alt="dreamseeker_TA9rXzOgad"
src="https://github.com/user-attachments/assets/fb19a60a-c927-441b-abad-161ce5022a60"
/>


Siderite biome has a lot of rock formations and may sometimes spawn new
stalagmites. You can expect to see a ton of bileworms, raptors and
watchers there.


<img width="747" height="613" alt="dreamseeker_uZgRX8qqh3"
src="https://github.com/user-attachments/assets/d356f1c6-371a-4b8b-899b-470edb0d2790"
/>


Shale is full of lobstrocities, goldgrubs and brimdemons, and home to a
new glowgrowth "plant" - colony of bioluminescent fungi growing on
natural air vents.

<img width="274" height="220" alt="dreamseeker_EtxiS4X9M7"
src="https://github.com/user-attachments/assets/cbefba67-b618-4a65-ad12-9ee5182b650c"
/>


While it cannot be planted by itself, it contains luminescent fluid
inside which will grant whoever eats it minor night vision as long as it
is inside their bloodstream (as well as cyan-glowing eyes)

---

Ruins now properly respect their biome's rock (and now floor as well)
type, since it was broken for some of them previously.

<details>
<summary>More images under the dropdown</summary>

<img width="1216" height="997" alt="dreamseeker_fpXXV0Rt3D"
src="https://github.com/user-attachments/assets/fa790ca1-7045-490e-bcb2-c1f9da9f277c"
/>
<img width="414" height="303" alt="dreamseeker_l6E8S2fzCe"
src="https://github.com/user-attachments/assets/8b10dcca-c546-41ce-9363-a12b0f225881"
/>
<img width="784" height="587" alt="dreamseeker_RUWQo0unNp"
src="https://github.com/user-attachments/assets/d7364abc-ec68-4daf-b3cb-a03b8ba7e5de"
/>
<img width="1216" height="997" alt="dreamseeker_zoltABvkBw"
src="https://github.com/user-attachments/assets/324f50f8-83c9-4451-8eff-33ebf81c1d0d"
/>
<img width="1125" height="571" alt="dreamseeker_ky5qvl2XtC"
src="https://github.com/user-attachments/assets/ff08d22f-fc15-4961-b76e-7c10d7814096"
/>

</details>

Credit for original versions of new flora/feature sprites to
SentryPrimis on the /tg/station discord

## Why It's Good For The Game

Makes biomes more distinct and interesting, as well as gives them unique
atmosphere, since right now they only differ in rock type and mineral
distribution.

## Changelog
🆑 SmArtKar, SentryPrimis
add: Siderite and Shale lavaland biomes now have unique floors, as well
as flora, features and fauna!
fix: Fixed some ruins generating with default basalt walls instead of
their biome's walls
/🆑
2026-05-07 10:20:43 +01:00
MrMelbert 0d8e223e90 Adds some tier zero (penguin, plant) and a tier one (stoat) gene infusion (#95923) 2026-05-05 10:35:12 -04:00
MrMelbert cee225fecb Moves hair and eyes into standing overlays (#95781) 2026-05-04 22:50:36 +02:00
Y0SH1M4S73R 9e92c0aa3d Reverts "Merges ghosts into spirits & a rework", but removes ghosts from Pride's mirror. (#95779) 2026-05-04 16:37:11 -04:00
necromanceranne 7aa5fb5d06 Void cloaks do not block surgery while invisibile (#95804)
## About The Pull Request

fixes https://github.com/tgstation/tgstation/issues/95803

The void cloak and its hood do not obstruct body parts for things such
as surgery. I guess it also lets you shave a heretic while their hood is
on but that seems kind of funny.

## Why It's Good For The Game

A) This is going to result in a lot of complications due to the strip
menu obscuring that the void cloak has.

B) It also gets rid of some meta tells that you have the cloak. 

Honestly, I wonder if it would be better if this was a neck item and the
'hood' is just an abstraction, but that's kind of exiting the realm of a
fix at that point.

## Changelog
🆑
fix: Void cloaks no longer obstruct surgery while invisible.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
2026-05-01 21:38:01 -04:00
Ben10Omintrix 7763db34a1 Basic beepskies and some ED209 additions (#95783)
## About The Pull Request
this PR refactors beepskies and ED209s into basic mobs. ive also added a
few features for the ed209 because i cant keep my hands to myself:

ED bots can now wear hats! a few hats give them some new unique
dialogue. Putting a cowboy's hat on an ED will have it acting like a
town Sherrif

EDs are now rideable when emagged. theyll still be shooting people while
ridden. youll also have the ability to charge at people full throttle
running them over

ive also added a new Nukie variant, purchasable from the uplink. These
versions come fitted with an LMG and will patrol the station and shoot
all walks of life. If emagged, theyll blow up people with (weaker)
rockets (im still working on balancing this). they are rideable but i
highly suggest against it; youll be caught in the crossfire. (i
understand if ud prefer i atomize this feature)

## Why It's Good For The Game
gives some personality to EDs, as well as updating all these bots to the
cool new ai system

## Changelog
🆑
refactor: beepskies, and ed209s have been refactored. please report any
bugs
add: ed209s can now wear hats! some hats give them new dialogue
add: emagged ed209s are now rideable! 
add: added evil versions of the ed209s to the syndie uplink
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
2026-04-25 00:25:28 +00:00
Lucy 9b6e752f3e Makes lighting objects objects again (#95332)
## About The Pull Request

Continuation of https://github.com/tgstation/tgstation/pull/78857

FOR TOOO LONG WE HAVE SUFF-
Ok yeah so like, we made them overlays to save on maptick, but with
threaded maptick that is potentially not an issue anymore.
I'm opening this pr so I can tm it and see. If it works, it'll save
about 50% of lighting object update costs, which is pretty damn good.

I'm also removing the fullbright light icon state, since it is barely
ever used (it was added as a clientside op, but we don't hit fullbright
very much at all so it does nothing but eat my cpu time)

Also also changing how SSlighting does its resolution. Rather then
waiting for all sources to process, then working on corners and objects,
instead we will do all the sources we had at the start, then all the
sources after, and so on.
The goal is to avoid churn causing the system to constantly choke. it is
better to potentially double operate then it is for things to feel
horrifically slow.

## Why It's Good For The Game

Faster. Also you won't be able to see lights through walls anymore, so
mesons will be less dumb. Can maybe bump their nightvision a bit idk
we'll see.

## Current Issues

to be found

## Changelog
🆑 Absolucy, LemonInTheDark
fix: You can no longer see lights through walls when using mesons or
when ventcrawling.
/🆑

---------

Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-04-23 08:55:26 +12:00
LemonInTheDark 1889ac275f Fixes double transforms for emissives, improves related unit test (#95710)
## About The Pull Request

[Adds an intermediary render plate for overlay
lighting](https://github.com/tgstation/tgstation/commit/34cc054702140677aae94727a54ae83619cae3d7)

The emissive plate isn't allowed to draw directly onto an input plane
(really almost nothing should be drawing onto input planes). This fixes
that.

[Improves plane_double_transform unit
test](https://github.com/tgstation/tgstation/commit/56f812da2e24bdb82966f1af1adb4e1b648b895d)

It was formerly just checking to see if any inputs were directly drawing
onto other inputs. Now, we floodfill

## Why It's Good For The Game

Somewhat nebulous, I hate double transforms double transforms are evil
2026-04-23 08:48:49 +12:00
MrMelbert bade006302 DNR'd / playerless bodies risen as zombies are ghost controllable (though mindless bodies are weaker) (#95544)
## About The Pull Request

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

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

## Why It's Good For The Game

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

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

## Changelog

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

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

Other Holoparasite HUD changes:

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

Gives Soulscythes a Combat mode indicator

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

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

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


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

## Why It's Good For The Game

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

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

## Changelog

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

It's all in the title

## Why It's Good For The Game

Forgotten in #92909

## Changelog

no player facing changes
2026-04-13 17:20:12 -04:00
xPokee 37d18f10cc Screenshot tests 2026-04-12 16:32:35 -04:00
Phantastic-Swan e7a01b6b27 fixes the digitigrade sprites unit test (#5366)
## About The Pull Request

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

## Why It's Good For The Game

Fixes a unit test.

## Proof Of Testing

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

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

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

This screenshot shows the status of the `typepaths_to_check` list after
my changes:
<img width="1600" height="548" alt="image"
src="https://github.com/user-attachments/assets/f0bf1fed-193d-41c0-950e-3c4285a6db3f"
/>
as you can see, it has 599 entries, all of which were defined or
overwritten in `modular_zubbers` or `modular_skyrat` files.
2026-04-11 08:53:31 -06:00
SyncIt21 de1f01fe76 General maintenance for hand held camera (#95295)
## About The Pull Request
- Merged a lot of procs into procs `attempt_picture()` and
`interact_with_atom()` reducing proc overhead
- Taking pictures will now always use the cameras internal
`picture_size_x` & `picture_size_y`. It no longer accepts variable sizes
as parameters
- All camera operations are asynchronous and respects checks on if the
target can be captured on camera or not.
- A bunch of other code rearrangement that makes readability easier
- Fixes the following camera bugs. They fall under the same category
  - Fixes #95286
  - Fixes #95256

## Changelog
🆑
fix: camera devices work again, camera flash turns on in most instances
refactor: camera code has been refactored. Report bugs on github
/🆑

---------

Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
2026-04-04 12:41:39 -04:00
SmArtKar 16aef3a2fd Completely refactors HUD element management and datumizes inventory HUDs (#95119)
## About The Pull Request

This is a port/revival of Kapu's
https://github.com/DaedalusDock/daedalusdock/pull/883
By god, please TM this for a while, as HUDs are rather volatile and I
might've missed something (also the original PR had harddel issues, so
we should probably be on the lookout for those)

Instead of being stored in a metric ton of separate variables, all HUD
elements are now kept in a ``key -> element`` assoc list, and separate
category lists have been turned into a single ``group_key -> list of
elements`` assoc list for easier management.
This massively simplifies HUD creation and management, and allows us to
sanely dynamically modify HUDs without having to keep track of our
elements ourselves (harddel fuel)

I've also noticed that plasma vessels had... interesting, to say the
least, way of managing their HUD and in humans were unable to display
it, which I've changed (the element itself is displayed below stamina in
non-aliens, as latter occupies the spot where you'd normally see it)
Also fixes a bunch of minor unlikely to occur issues with HUD not
updating when it should've sometimes.

## Why It's Good For The Game

The two most important results of this is that A) we can fix the issue
with items larger than 32x32 not displaying properly in inventories (in
a separate PR) and B) this paves the way for datumized inventory slots,
although that is a separate nightmare
Some of this code is also actually over a decade old, and is an absolute
nightmare to work with.

## Changelog
🆑
qol: Non-aliens with an implanted plasma vessel now see their plasma
level in their HUD instead of just the stat panel
refactor: Refactored the entirety of HUD management code, report if
anything breaks!
/🆑

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2026-04-02 15:20:55 -04:00
LemonInTheDark f2360d64fd Gives subsystem controllers a bitfield def to make vv easier, renames their flags var (#95439) 2026-03-22 19:06:30 -04:00
MrMelbert da64374423 Reverts "Add prosthetic limb" surgery to involve targeting limbs, rather than targeting chest. (Adds stumps) (#95252)
## About The Pull Request

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

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

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

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

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

Surprisingly little had to change to make this work. 

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

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

## Why It's Good For The Game

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

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

## Changelog

🆑 Melbert
del: "Add prosthetic limb" surgical operation has been reverted to be a
bit closer to how it used to work - you operate on the missing limb /
limb stump, rather than on the chest.
refactor: Missing limbs are now represented as limb stumps. In practice
this should change nothing (for now), as no features were rewritten to
make use of these besides surgery. Please report any oddities with
missing limbs, however.
/🆑
2026-03-20 14:32:41 +13:00
MrMelbert 760941feef Pun Pun does not randomize name in testing (#95430)
## About The Pull Request

Pun Pun's name shouldn't randomize when we're testing Pun Pun's name
Closes #95424
Closes #95437 
Closes #95438
2026-03-18 17:38:16 -04:00
nevimer b1448e2bf5 fix a linter 2026-03-18 14:16:22 -04:00
Roxy 43054c7e64 Add TEST_REPEAT unit test macro (#95384)
## About The Pull Request

Adds a macro to run a unit test a given number of times in a row, can be
combined with `TEST_FOCUS`.

## Why It's Good For The Game

Trying to debug a flaky unit test failure without the ability to easily
repeat a test over and over until you catch a fail is very annoying

## Changelog
🆑
code: added a unit test macro for running the same test multiple times
/🆑
2026-03-17 18:10:09 -04:00
MrMelbert f7d7c6f00e Fix Pun Pun's name (#95420)
## About The Pull Request

Moving Pun Pun's name handling in #94463 broke their name assignment as
it used `var/name_to_use = name`

Prior, it would save `var/name_to_use = "Pun Pun"`. But after moving it,
it would use `var/name_to_use = "monkey (842)"`, as name is randomized
in human init.

I will note that I think `use_random_name` var is broken... that may
require future investigation.

## Changelog

🆑 Melbert
fix: Pun Pun is Pun Pun again
/🆑
2026-03-16 08:36:10 +13:00
nevimer 85d2594bd0 Merge remote-tracking branch 'origin/master' into upstream-feb12-2026
# Conflicts:
#	_maps/map_files/moonstation/moonstation.dmm
#	tgstation.dme
2026-03-10 17:10:57 -04:00
Bloop 38a086093e create_and_destroy will no longer spawn abstract types (#95071)
## About The Pull Request

What it says on the tin-- with having a nice abstract types system now,
we can utilize that in create_and_destroy.

## Why It's Good For The Game

Removes a lot of the need for snowflake item exclusions, and makes this
test likely a lot more stable (and a little faster even).

## Changelog

Not player-facing
2026-03-08 00:34:47 -08:00
MrGloopy dfa292188f Makes moth eyes colourable and fixes HUD implants on moths visually because I was eyeless to it once. (#5307)
## About The Pull Request

Literally title. Tested with multitool on robotic moth eyes too, works.
Also closes https://github.com/Bubberstation/Bubberstation/issues/5229/.
## Why It's Good For The Game

Customisation good. Bugfix good. Both combined is good.
## Proof Of Testing

<img width="191" height="131" alt="image"
src="https://github.com/user-attachments/assets/3993d1db-0047-42d5-a623-34f5240ce27b"
/>


<img width="764" height="654" alt="image"
src="https://github.com/user-attachments/assets/27872b7f-45d7-478c-89a1-e022eb1090c8"
/>
<details>
<summary>Screenshots/Videos</summary>

</details>

## Changelog
🆑
add: Recolouring for moth eyes. You will have to set new colours in
character preferences.
fix: HUD implants not displaying on moth eyes
fix: De-spookified moths that have had their eyes replaced. (Fixed moth
eyes disappearing when replaced with anything else, rendering your
sprite eyeless until your original eyes were put back in).
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2026-03-07 13:54:48 +01:00
SyncIt21 56212d2712 Cleans up chemical reaction & reagent look up code (#95281)
## About The Pull Request
- Removed global list `fake_reagent_blacklist` in favour of
`abstract_type`. Saved memory
- Removed proc `get_chemical_reaction()` in favor of
`GLOB.chemical_reaction_list`. No proc overhead and faster access
- Remove unused proc `remove_chemical_reaction()`
- Removed proc `find_reagent()` in favour of
`GLOB.chemical_reagents_list`. No proc overhead and faster access
- Directly access name of reagents via `::` operator from typepaths
instead of looking up the datum in global chemical reagents list for
some operations. Faster variable access
- Removed unit test `reagent_id_typos`. The typepaths will error at
compile time because they aren't strings so there's no need for this
test

## Changelog
🆑
code: cleaned up code pertaining to reagent & reaction lookup
/🆑
2026-03-07 10:39:20 +01:00
itsmeow 57144e0243 IconForge: Antag and species icons, greyscale previews optimization (#94954)
## About The Pull Request

Converts species and antagonist icon generation to the batched
spritesheet system using IconForge, thanks to the new
`get_flat_uni_icon` implementation. Unfortunately the cost of *building*
the sprite is still expensive (GFI is always expensive, even a fancy
list-based one), but the generation is SIGNIFICANTLY faster. We will see
evidence of parity in the screenshot tests. but here:

<img width="892" height="634" alt="image"
src="https://github.com/user-attachments/assets/2a17f2e3-c024-41f6-9d1e-c2cb70642a81"
/>

The main advantage is that species and antag icons can now take
advantage of the development-time smart cache which invalidates
automatically. On the server this PR does very little except make antag
icon generation a little bit more likely to find and announce errors
(BYOND has a habit of silently eating weird icon proc calls).

Also optimizes the greyscale preview generator from #90940 (~2x speedup)
using `rustg_iconforge_generate_headless` instead of `Insert()` to build
the resulting sheets. This can be further optimized in the future by
implementing a smart cache, like batched spritesheets, and storing it in
the repo, but for now it's not important/slow enough to be worth the
effort. Also fixes a silent compilation error that would always happen
outside unit tests, but for some reason doesn't appear on local? Notice
how `map_icon_key` is not a defined variable anywhere. That's because
`USE_RUSTG_ICONFORGE_GAGS` is *never* defined at this point, so it was
always using the 'slow' generation.

I also took the liberty of cleaning up the cultist and heretic icon
generation randomly initializing a blade object when it could just use a
static access.

## Why It's Good For The Game

The subsystem timing may not be much faster, but the interactivity
benefits during spritesheet realization are undeniable. Opening the
preferences menu during init on local is orders of magnitude faster.

**Old**
Early Assets: 5.02 seconds
Greyscale Previews: 1.38 seconds

**Fresh (No Cache)**
Early Assets: 4.21 seconds
Greyscale Previews: 0.5 seconds

**Cache Invalidated**
Early Assets: 4.27 seconds

**Cache Hit**
Early Assets: 4.05~4.2 seconds

**Preferences lag:**
~6 sec to open to ~2 sec to open due to caching in dev

## Changelog

🆑
code: Optimized species and antagonist icon loading in the preferences
menu on local, speeding up time to open in development.
fix: GAGS map preview generation no longer silently errors outside of
unit tests due to a compilation error.
/🆑
2026-03-02 17:25:16 -05:00
Alexis 5c5a636485 Merge branch 'master' into upstream-feb12-2026 2026-03-02 07:42:16 -05:00
Alexis e458eaee4a GAS: Giant Armored Serpentids (Snake Bugs) (#5139)
## About The Pull Request
**The majority of the work was done by Ozzo in #1471.**

GAS are snake bugs hailing from Baystation 12. 

- They hate the heat, but are durable against low-pressure environments
and the cold.
- They cannot wear suits and most clothes, but have built in armor (it's
in their name).
- It is harder to grab GAS.
- They are taller than the average spaceman.


https://github.com/user-attachments/assets/f9ac1078-0d41-4a26-850f-26a2cd7bbf01

They currently have no lore or species description, but plans are in the
works for both to be made.
## Why It's Good For The Game
It's a new species that was well-recieved when it was tested the first
time around, before being lost due to a lack of work on it. I am here to
continue work on it and add new features to it if they are requested by
the person that wanted them.
## Proof Of Testing
It compiled and ran, hence me being able to take the video. There were
no runtimes. I attached an image of a stylish GAS as further proof of
testing.
<details>
<summary>Screenshots/Videos</summary>
<img width="137" height="111" alt="image"
src="https://github.com/user-attachments/assets/4b2ddd78-9312-4f0e-bbac-37bd51290490"
/>
</details>

## Changelog
🆑
add: Added a new species: Giant Armored Serpentids (GAS)!
/🆑
2026-02-26 17:31:43 +01:00
MrMelbert 3c527a6dce Fixes changlings transformed into a Felinid losing decap immunity thanks to their newly shrunken brain (#95205)
## About The Pull Request

Fixes #95203

Changling "decoy brain" status was a behavior attached to the brain. 
However it never re-applied the "decoy brain" status at any point. Even
if your brain changed.

This was fine for the most part because all of our roundstart species
used the same base brain type.
Which meant your brain didn't change and there was no reason to re-apply
the behavior.

But now Felinids (*and Lizardpeople*) have a different brain typepath.
Changing into these species would give you an entirely new brain and
wipe the "decoy brain" mechanic entirely without re-applying it.

This PR fixes the issue by re-applying "decoy brain" status the ling has
a new brain added.

## Changelog

🆑 Melbert
fix: Fixes Changlings transformed into a Felinid losing decap immunity
thanks to their newly shrunken brain
/🆑

---------

Co-authored-by: Jordan Dominion <jordanhcbrown+github@gmail.com>
Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com>
2026-02-23 02:24:24 +00:00
Alexis b5f6e40ea4 Digitigrade Clothes Unit Test (#5225)
## About The Pull Request
Adds a new unit test for determining whether digitigrade variants exist
for a given clothing item, and fails if they do not.
## Why It's Good For The Game
This will help us with making sure we have digi sprites for all our
modular clothes in the future.
## Proof Of Testing
It worked when I tested it ages ago.
## Changelog
N/A
2026-02-22 14:59:15 -05:00
SmArtKar a3498fdcd7 Material Science 1: A bunch of math (#95090) 2026-02-22 16:53:51 +11:00
SyncIt21 2eb4b5e0cb Adds the framework for stacked metabolization effects (#95123)
## About The Pull Request
- You can now add effects when multiple reagents are metabolized per
tick by creating a new subtype of
`/datum/stacked_metabolization_effect`. So lets say you have 3 reagents
A & B & C and you want to implement some unique effect when all 3
reagents are present at the same time. Instead of implementing those
effect inside each of those reagents like such

```dm
/datum/reagentA/on_mob_life()
    if(holder.hasReagent(/datum/reagentB) && holder.hasReagent(/datum/reagentC))
        //do stuff

/datum/reagentB/on_mob_life()
    if(holder.hasReagent(/datum/reagentC) && holder.hasReagent(/datum/reagentA))
        //do stuff

/datum/reagentC/on_mob_life()
    if(holder.hasReagent(/datum/reagentA) && holder.hasReagent(/datum/reagentB))
        //do stuff
``` 

You can now implement that effect by creating a subtype of stack reagent
effect as such

```dm
/datum/stacked_metabolization_effect/unique_effect
	requirements = list(/datum/reagent/A = 1, /datum/reagent/B = 1, /datum/reagent/C = 1)

/datum/stacked_metabolization_effect/unique_effect/apply(list/reagents_metabolized, mob/living/carbon/owner, seconds_per_tick)
	var/metabolization_ratio = average(reagents_metabolized)
       //do stuff with the ratio
``` 

The effect is applied per tick and you can check for subtypes as well
like such

```dm
/datum/stacked_metabolization_effect/unique_effect
	requirements = list(/datum/reagent/A = 3)
``` 

## Why it's good for the game
The framework of stacked reagent effects allows contributors to
implement unique effects for metabolizing multiple reagents at once. The
benefits are obvious.
Right now it's a framework that is unused but should hopefully see some
use in the future

## Changelog
🆑
code: adds a framework for implementing effects when multiple reagents
are metabolized per tick
/🆑

---------

Co-authored-by: Jordan Dominion <jordanhcbrown+github@gmail.com>
2026-02-19 15:22:57 +01:00
Alexis 5b8d5b8626 [Nova Port] Seperates Teshari hair from their ears and gives them three new emotes (#5232)
## About The Pull Request
This is a port of https://github.com/NovaSector/NovaSector/pull/6659.
The PR does as the title suggests, it adds three new emotes:

- tchirp (teshari chirp)
- tsqueak (teshari sqeak)
- ttrill (teshari trill)

It also separates the mohawks from the ears, allowing for more
customization and less clipping on teshari body types.
## Why It's Good For The Game
It allows for more customization and future additions to teshari, and
more emotes for teshari are always nice.
## Proof Of Testing
See the attached video below.
<details>
<summary>Screenshots/Videos</summary>


https://github.com/user-attachments/assets/4e5bd73f-16ef-4acb-b105-f84e7474b232

</details>

## Changelog
🆑 intense-skies, xPokee
add: Added new three new teshari emotes: ttrill, tsqueak, and tchirp.
These emotes are also in the emote panel.
add: Added two new mohawk hair selections for teshari.
del: Removed one of the old mohawk ears options from teshari, as it is
now deprecated.
/🆑
2026-02-17 18:46:31 +01:00
Alexis 88d7efe291 Fleshmind - Attempt 3 (#4914)
## About This Pull Request
Brought back based off of
https://github.com/Bubberstation/Bubberstation/pull/2007, made
functional again by myself.
Original Code: https://github.com/Skyrat-SS13/Skyrat-tg/pull/14023

Fleshmind is a PVE event that incorporates some PVP elements in the
later stages of its growth. You defeat it by destroying all its
processors. It has six stages of growth with each stage expanding on its
abilities and the structures and mobs it can deploy. It will announce to
the entire station each time it gains a level or loses a level. Each
level means it has a new processor.

- **Level 1:** The start when it spawns in. It will spawn some basic
structures.
- **Level 2:** It will begin to spawn screamers and whisperers
- **Level 3:** The wireweed is much more situated, and this is the point
where it spawns a very dangerous mech. This is the point where it
becomes very critical. It also starts to spawn Babblers (structures that
spew propaganda into comms) and Modulators. (Gives you hallucinations)
- **Level 4** No new special abilities.
- **Level 5** No new special abilities
- **Level 6** It automatically calls the emergency shuttle to hijack and
spawns a deathsquad on Centcomm. This ends the round.

**Counters:**
- Fight in groups. Carry a melee weapon. (You can still melee the
mechivers and try to kill them before they convert you)
- Wirecutters cut wireweed.
- Ion Weaponry is extremely useful. It also stuns all the mobs.
- Target the processors. If you can pick them off in space, it has
practically zero EVA abilities.
- If someone gets assimilated, should get them to medical if you kill
them.

To run it requires 35 active players and a minimum of an hour to have
passed.
## Why It's Good For The Game
With mold being disabled, there is a missing PVE element in the game,
this fills that niche while also playing around with the idea of
temporary conversion antags in a way that I think works really well.

Wireweed/fleshmind also distracts the crew and security enough to
provide clever antagonists with an opening to commit crimes and get away
with them while the crew has their hands full.

## Proof of Testing
It's been test merged for two months now, it works.
## Changelog
🆑 xPokee, StrangeWeirdKitten, Gandalf2k15
add: New midround event: Fleshmind
/🆑

---------

Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Artur Lang <24881678+Arturlang@users.noreply.github.com>
Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2026-02-17 15:38:34 +01:00
nevimer 00ccf0c6b5 Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts:
#	.github/CODEOWNERS
#	.github/workflows/compile_changelogs.yml
#	.github/workflows/stale.yml
#	SQL/database_changelog.md
#	_maps/map_files/CatwalkStation/CatwalkStation_2023.dmm
#	code/__DEFINES/atom_hud.dm
#	code/__DEFINES/inventory.dm
#	code/__DEFINES/mobs.dm
#	code/__DEFINES/species_clothing_paths.dm
#	code/__DEFINES/subsystems.dm
#	code/__DEFINES/surgery.dm
#	code/__HELPERS/global_lists.dm
#	code/_globalvars/lists/maintenance_loot.dm
#	code/_globalvars/traits/_traits.dm
#	code/controllers/subsystem/minor_mapping.dm
#	code/controllers/subsystem/processing/quirks.dm
#	code/controllers/subsystem/shuttle.dm
#	code/datums/components/palette.dm
#	code/datums/components/surgery_initiator.dm
#	code/datums/diseases/advance/advance.dm
#	code/datums/hud.dm
#	code/datums/mood.dm
#	code/datums/mutations/chameleon.dm
#	code/datums/quirks/negative_quirks/nyctophobia.dm
#	code/datums/status_effects/debuffs/debuffs.dm
#	code/datums/status_effects/debuffs/drunk.dm
#	code/datums/status_effects/debuffs/slime/slime_leech.dm
#	code/datums/weather/weather.dm
#	code/game/data_huds.dm
#	code/game/objects/items.dm
#	code/game/objects/items/devices/scanners/health_analyzer.dm
#	code/game/objects/items/frog_statue.dm
#	code/game/objects/items/rcd/RLD.dm
#	code/game/objects/items/robot/items/hypo.dm
#	code/game/objects/items/stacks/medical.dm
#	code/game/objects/items/stacks/wrap.dm
#	code/game/objects/items/storage/garment.dm
#	code/game/objects/items/tools/medical/defib.dm
#	code/game/objects/items/weaponry.dm
#	code/game/objects/items/weaponry/melee/misc.dm
#	code/game/objects/structures/crates_lockers/closets/secure/security.dm
#	code/game/objects/structures/curtains.dm
#	code/game/objects/structures/dresser.dm
#	code/game/objects/structures/girders.dm
#	code/game/objects/structures/maintenance.dm
#	code/game/objects/structures/mirror.dm
#	code/modules/admin/greyscale_modify_menu.dm
#	code/modules/admin/verbs/light_debug.dm
#	code/modules/antagonists/ashwalker/ashwalker.dm
#	code/modules/antagonists/heretic/knowledge/starting_lore.dm
#	code/modules/antagonists/ninja/ninjaDrainAct.dm
#	code/modules/art/paintings.dm
#	code/modules/client/preferences.dm
#	code/modules/client/verbs/ooc.dm
#	code/modules/clothing/head/wig.dm
#	code/modules/events/disease_outbreak.dm
#	code/modules/holodeck/holo_effect.dm
#	code/modules/jobs/job_types/head_of_security.dm
#	code/modules/jobs/job_types/security_officer.dm
#	code/modules/library/skill_learning/generic_skillchips/point.dm
#	code/modules/mining/lavaland/ash_flora.dm
#	code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm
#	code/modules/mob/dead/new_player/new_player.dm
#	code/modules/mob/living/basic/guardian/guardian.dm
#	code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm
#	code/modules/mob/living/carbon/carbon.dm
#	code/modules/mob/living/carbon/human/human.dm
#	code/modules/mob/living/carbon/human/human_defines.dm
#	code/modules/mob/living/carbon/life.dm
#	code/modules/mob/living/living.dm
#	code/modules/mob/living/living_defines.dm
#	code/modules/mob/mob.dm
#	code/modules/mob_spawn/ghost_roles/mining_roles.dm
#	code/modules/mod/mod_control.dm
#	code/modules/mod/modules/modules_general.dm
#	code/modules/modular_computers/computers/item/computer_ui.dm
#	code/modules/paperwork/paper.dm
#	code/modules/paperwork/paperbin.dm
#	code/modules/power/lighting/light.dm
#	code/modules/projectiles/guns/energy/kinetic_accelerator.dm
#	code/modules/projectiles/projectile.dm
#	code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm
#	code/modules/reagents/chemistry/reagents/food_reagents.dm
#	code/modules/reagents/chemistry/reagents/other_reagents.dm
#	code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm
#	code/modules/research/xenobiology/crossbreeding/_clothing.dm
#	code/modules/research/xenobiology/crossbreeding/prismatic.dm
#	code/modules/surgery/advanced/brainwashing.dm
#	code/modules/surgery/advanced/lobotomy.dm
#	code/modules/surgery/amputation.dm
#	code/modules/surgery/blood_filter.dm
#	code/modules/surgery/bodyparts/_bodyparts.dm
#	code/modules/surgery/brain_surgery.dm
#	code/modules/surgery/cavity_implant.dm
#	code/modules/surgery/coronary_bypass.dm
#	code/modules/surgery/gastrectomy.dm
#	code/modules/surgery/healing.dm
#	code/modules/surgery/limb_augmentation.dm
#	code/modules/surgery/organ_manipulation.dm
#	code/modules/surgery/revival.dm
#	code/modules/surgery/sleeper_protocol.dm
#	code/modules/surgery/surgery_helpers.dm
#	code/modules/surgery/surgery_step.dm
#	code/modules/unit_tests/_unit_tests.dm
#	code/modules/unit_tests/designs.dm
#	code/modules/unit_tests/icon_state_worn.dm
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body.png
#	code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png
#	icons/map_icons/clothing/head/_head.dmi
#	icons/map_icons/clothing/shoes.dmi
#	icons/map_icons/items/_item.dmi
#	icons/mob/huds/hud.dmi
#	icons/mob/inhands/64x64_lefthand.dmi
#	icons/mob/inhands/64x64_righthand.dmi
#	icons/obj/machines/computer.dmi
#	tgui/packages/tgui/interfaces/OperatingComputer.jsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx
#	tgui/packages/tgui/interfaces/PreferencesMenu/types.ts
#	tgui/packages/tgui/interfaces/SurgeryInitiator.tsx
#	tools/icon_cutter/check.py
2026-02-12 23:50:09 -05:00
FalloutFalcon 8042c69b4f Gives missing icon unit tests a shared parent (#95122)
## About The Pull Request
Gives the 3 main missing icon tests a shared parent for behavior. Made
the list of icon states not static because of this but that shouldn't
really matter.
Additional icon locations is made a list for evil down streams that are
grandchildren of TG rather then just children, or repos with multiple
spots for icons, `modular_downstream/master_files/icons` and
`modular_downstream/modules` can both have icons in alot of them

Was considering also making them filter out abstract_types but maybe
should be a diff pr.
## Why It's Good For The Game
All 3 present unit tests copy paste ALOT of their behavior, but very low
hanging fruit is the compiling of folders, which while claiming have
modularity support its a bit silly to require 3 separate additions just
to make sure all tests are properly working.
## Changelog
N/A

---------

Co-authored-by: Jordan Dominion <dominion@tgstation13.org>
2026-02-11 18:50:14 -05:00
SmArtKar 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