Commit Graph

3445 Commits

Author SHA1 Message Date
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
MrMelbert 6b631cb2c2 Roundstart nuke ops now spawn on an elevator to wait while the base loads in (#96178) 2026-06-02 20:59:42 +10:00
SmArtKar b952f0ac4d Fixes spilled flour not containing any flour (#96265) 2026-06-01 22:22:51 -04:00
soulware a85369b66a New foam reactions for water varients (#96095)
## About The Pull Request
Adds slipless foam + one slipless foam for each life time + adjusted
long foam's life time from 30 seconds to 24.
Adds new foam reactions, list of what they produce below.
salt water = lasts shorter + no slip
soda water = lasts shorter
ice = no slip
holy water = lasts longer + no slip
hollow water = lasts longer
## Why It's Good For The Game
Sometimes, you want to flood medbay with a colorful reagent grenade
WITHOUT it slipping everyone and blocking it for a stupid amount of
time.
## Changelog
🆑
add: New reactions for water variants that make foam
code: New foam types that either slip or last longer or shorter
/🆑

---------

Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
2026-05-24 11:07:09 +02:00
Time-Green 64f76f52a9 Interface Science | The Mariana Trench of Feature Content (#95857)
## Interface Science

You know what the problem is with our features? They're all too easy,
too optimized to use. Look at Genetics; we went from a confusing UI that
a 14 year old hardcoded with html into byond to a polished UI using
tgui, optimized for player comfort, and gameplay has suffered. Too long
we have coddled players with fun and easy content, no more I say!!!

To fix ss13, I have added a feature with the most awful, unusable UI
ever. It's just wires with random sequences that may or may not do
something. And yet, you will use it till your fingers bleed and your
eyes go white, and you will be grateful. "Thank you coder daddy", you
say as you sacrifice yourself to a display of unending, procedurally
generated dogshit.

<img width="563" height="294" alt="image"
src="https://github.com/user-attachments/assets/e56c947f-a40c-4df9-beed-672812357576"
/>

Or maybe you're a sick little deviant, and you don't respect me. Instead
of using my awful UI, you start optimizing. You've forced the secret
pulse code, and you're not going to pulse them again and again. You make
your own interface by connecting it with signallers, or integrated
circuits. Ahhh, you beat me! Damn it, and you're gonna get away with it
too.

## About the Pull Request

Adds new job content to science. Science spawns with a few "gizmo"
devices and can order more through cargo. These gizmo's have random
functionalities, like the strange objects you can find in maintenance.
These functionalities come with different settings to change how they
operate.

However, there are no buttons, just wires or a voice interface. You need
to solve, for example, a wire puzzle. You just pulse the wires, and if
you hear ping the sequence is good, if you hear buzz its bad. Just keep
going till you hear a creak sound.

If you do a sequence correctly, there are a bunch of randomly generated
ways this interacts with the functionality, mimicking real life settings
and interactions. Imagine a TV remote with randomized buttons, and you
have to map them out again.

Once you've mapped the sequences, you can make an interface. For simple
ones, you can just make some signaller assemblies. For the best control,
you could connect it with a bunch of integrated circuit signallers, and
program sequences into an integrated circuit machine.

Below is a short video of how the puzzle solving works. (I can't be
arsed to figure out how to record tgui, here's a video I made with my
phone. Also I had the sequences written down, which I STRONGLY recommend
you do.)


https://github.com/user-attachments/assets/93f79f0f-df14-4ff9-8096-f079ebae7e91

<details>
  <summary>Actual details</summary>
  
I have hidden the details to make exploring the feature itself more fun.
The whole thing was written to be convoluted, but intuitive. You should
be able to hit it with a multitool, and figure out everything from
there. It will take a bit to get the gist of it.

Nonetheless, for review purposes I have written down the details here.
If you're reading this for non-review purposes, you should know I have
embedded an internet curse that will at some point in 2026 teleport you
2 meters in a random direction. Continue reading at your own discretion.

The gizmo objects is usually generated with 1 or 2 'gizmodes'.
'Gizmodes' contains the fun-ctionality, and holds different operating
modes (so dubbed 'gizpulse'). You can't directly select a gizpulse, but
instead it generates a bunch of mode selections.

For example, a function that toggles lights has two gizpulses: toggle_on
and toggle_off. There are four different mode selects:
Cycle mode: Adds signal to cycle to the next gizpulse, and to activate
the current gizpulse
Select mode: Adds a signal for selecting every gizpulse, and a signal to
activate whatever the activate gizpulse is
Direct activate mode: Adds a signal for selecting every gizpulse, and
also immediately activates that gizpulse
Cycle-active mode: Cycles to the next mode, and activates it
(inconvenient but only has 1 signal to worry about)

So a light gizmode with the randomly selected 'select mode' has three
signals: select toggle_on, select toggle_off and trigger the currently
selected gizpulse.

Currently implemented gizmodes:
- Lights: toggle on, toggle off
- Move: start moving, stop moving 
- Food printer (its filled with the spongebob grey goop thing): print
food (donut or burger)
- Mood pulser (AOE): happy pulse, sad pulse, radiation pulse
- Mopper: select different reagent, dump onto tile (1/2/3 range), make
smoke cloud
- Teleporter (5 to 15 tiles, random dir): Teleport self, teleport mobs
in range 1, do both
- Electric: charge from nearest cell (looks into objects and stuff),
magically gain some charge, make lightning, make emp, charge nearby
object, defibrillate in an area
- Copier (makes fake copies of mobs and objects, visual copy only): scan
objects, print objects, erase all copies
- Sputter: dump oil and shake, throw self
- Bad: explode, explode, explode harder, explode with fire, stab you,
warning, make robot spider, breaks your bones, throws a grenade at you,
radiation pulses
- Some behind the scenes gizmodes (language toggle for voice interface,
for example)

The voice interface starts with wires, with signals to toggle the
language or dump the code words. After that, you can talk to it using
the code words similarly to the wire sequence to solve the rest of the
gizmodes.

</details>

I've added two to every map, somewhere in or near the experimentor room.
They may ocassionally spawn from a maintenance crate spawner
<img width="611" height="331" alt="image"
src="https://github.com/user-attachments/assets/3782700f-57d3-4591-9282-e0de590056e1"
/>


## Why It's Good For The Game

It's really difficult to have "experimentation" type features in the
game. It all has to fit into 1h rounds, and people get used to it real
quick. The experimentor and strange objects kinda try, but it's just one
button and praying a bear doesnt spawn you explodes you.

I don't claim to have solved this perfectly, but I think this is fun.
You truly have to start experimenting, be systematic and write things
down. If you figure out how something works, you can go to the next
stage of making it more convenient to use. I think it's really fun to
mess around with integrated circuits and USB's, and make, for example, a
BCI controlled bluespace launchpad.

So I lean into it! There's different settings to account for, and its up
to you to make it usable! If you like integrated circuits, you'll love
this (maybe).

The gizmo functions are aimed at benefiting the station as a whole in
some ways, to motivate people to make some fun systems for these to get
maximum benefit! A mood pulser near a busy area will make everyone
happier! (I do need to add more like these, I got distracted doing
stupid shit.)
2026-05-23 18:59:25 +00: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
Leland Kemble 5511bda793 Carnivorous Blood : A new DNA-targeting traitor chemical that eats away at your bloodstream (#95915)
## About The Pull Request

Adds a new chemical: Carnivorous Blood. This chemical is acquirable via
traitor uplinks, at the cost of 3 telecrystals for a 30 unit bottle.

This chemical's purpose is to eat blood. When it enters its victim's
bloodstream, it begins consuming their blood at a base rate of 2 units
per second, consuming itself at a rate of 0.3 units per second. This
means that a dose of 15 units of it will consume roughly 14% of its
victim's bloodstream over the course of roughly a minute. That isn't
anything to call home over, obviously. This is because you are supposed
to pair it first.
To pair it, you acquire a blood sample from your chosen victim, in any
form that retains their intact DNA. You mix this with the carnivorous
blood, and the blood is now three times as effective inside that
specific person(or anyone sharing their DNA). The paired version,
assuming a dose of a full 15 units that is allowed to fully metabolize,
will take the paired victim's blood down to roughly 55% over the course
of roughly a minute(assuming nothing is impairing or improving the
person's natural blood regeneration). This is just slightly less than is
required to knock out a victim from just blood loss, but is certainly
enough to significantly impair them.

(Up to three sets of DNA can be paired with a single set of carnivorous
blood. It cannot be de-paired in any useful way.)

Additionally, the chemical is twice as effective in the dead, allowing
one fifteen unit dose to fully drain a paired person of their blood.

The chemical can be duplicated using protein.

As a necessity in order to let the thing be used how I want it to be
used, this also makes it so that blood taken off the ground out of
bloodstains has DNA(unique enzymes) in with it. As it'd be absurd to
track how much of each specific DNA was in each specific bloodstain for
just this purpose, and because blood(the reagent) can only have one set
of DNA within it, it's been made such that the DNA you get from blood
taken from bloodstains is a random pick of the DNA present within the
bloodstain. If you don't get pure blood, you might not get what you
want.

## Why It's Good For The Game

A reasonably powerful traitor item that requires not just preparation on
your part, but INVOLVED preparation. The chemical itself is fairly
cheap(and could probably be cheaper but I'm being safe), but to get your
benefit you have to actually involve yourself with your target. Hurt
them a little bit, telegraphing yourself, or lurk around them until a
carp bites them and they leave their blood on the floor. Get them in a
rage cage, run a blood drive, whatever. There's a lot of ways to get
someone's blood, but all of them require active involvement, and I think
that that, on its own, will lead to interesting situations.


Also, side benefit that isn't really material but is worth mentioning
anyway, finding a body with no blood is currently absolute 100% no holds
barred completely airtight proof of bloodworms unless some psychopath
manually took a million years to slowly drain their blood manually. As
one dose completely drains a dead person, this provides an alternate
theory and reasonable means of faking.


Balance-wise, I say this every feature PR I make, but I don't think this
will be a problem. The chemical basically necessitates putting yourself
at risk in order to set it up, and is not a one-hit-kill. That is more
than can be said for several other crew-obtainable chemicals, BUT the
benefit of this chemical is that it takes a very long time to recover
from naturally. If someone succeeds the lexorin knowledge check and
survives, the oxygen damage goes away in a flash. Losing half your blood
takes an extremely long time to recover from naturally(and specific
items to recover from quickly), and leaves you quite vulnerable in the
meantime.

## Changelog
🆑

add: Added a new traitor item, Carnivorous Blood. It is purchasable in
uplinks. Carnivorous Blood is a reagent that eats away at a victim's
blood once in their bloodstream, doing so significantly faster if it has
been mixed with the victim's blood beforehand.

/🆑
2026-05-12 14:29:17 -04:00
SmArtKar 479ac46740 Reworks goliaths, slightly changes watchers/legions/brimdemons/lobstrocities (#96028)
## About The Pull Request

Goliaths no longer instantly stun the mobs they hit with their tentacle
for full 10 seconds, instead leashing them to the spot they were grabbed
at or dragging them towards themselves. The ranged tetris-piece attack
has been changed to a full cross which tethers the target preventing
them from moving away more than 1 tile, while the line and the ring
attacks tether the mob directly to the goliath itself and drag them in.



https://github.com/user-attachments/assets/0b566a12-17ae-4a8a-97ac-5734c89c83d4

The tentacles can be manually removed after standing for 6 seconds, or
by hitting them for 75 damage total (3 PKC swings, or 5 bayonet hits).
They also naturally retract after 10/15 (cross/line and ring) seconds
like before.
Goliaths themselves have received a massive speed boost, going from 3
second movement delay to 1.2 seconds (150% buff) and no longer can
friendly fire with their tentacles (and ancient goliaths have their
trophy drop guaranteed)

Brimdemons, lobstrocities, watchers and legions also received some
changes:
- Brimdemons no longer can wound with their beams (they were basically
guaranteed to land a nasty burn wound with the initial blast), but are
now affected by laser armor and their beam DOT (not the initial 25 burn
damage upon firing) has been increased from 5 to 7. Their blasts can now
be interrupted by hitting them from their side or from their back
- Lobstrocities have had their retreat distance decreased from 8 to 6,
making them much less likely to randomly lose aggro on the miner (their
aggro range is 9 tiles, meaning that even a single tile of movement on
miner's part will result in lobsters losing interest in them when on CD)
- Watchers now try to stick to 3-5 (previously 4-6) tiles of distance
between themselves and their target, and legions try to maintain 4-6
tiles of distance as opposed to running away completely. This should
make fighting both of them more interesting and engaging, and make
dealing with them during vents less cancerous.

Sprites for the tentacle item and mob overlay are by thgvr from
https://github.com/shiptest-ss13/Shiptest/pull/2432

## Why It's Good For The Game

Goliaths are extremely outdated in their attack design, 10 second
hardstuns are basically a guaranteed death if there are any other mobs
around and aren't very engaging to fight on their own as they are very
easy to evade with 3 second movement delays.
Change to lobstrocities should just make their AI less jank, and
watcher/legion range changes should make them less slippery when
fighting with PKC or zero range PKA, or during vent defense.

## Changelog
🆑 SmArtKar, thgvr
balance: Goliaths no longer hardstun, but instead bind and drag their
targets in with their tentacles. They are, however, much faster now.
balance: Brimdemon beams can no longer wound, but deal a bit more DOT
damage. Their beams can also be interrupted by hitting them from the
side or back in melee.
balance: Watchers and legions now try to maintain a few tiles of
distance from their targets instead of retreating.
fix: Lobstrocity AI should no longer sometimes flee out of their aggro
range when retreating.
/🆑
2026-05-12 19:16:02 +01:00
Aliceee2ch f13d479dcf scapel (#96004) 2026-05-08 18:25:23 -04:00
ArcaneMusic 0c91535120 Arcmining: Chemical Boosting (#95530) 2026-04-23 17:46:06 +02:00
FinancialGoose e98cb75c57 Refactor gasmix mole change into a proc (#95327)
## About The Pull Request
Refactor the majority of the current gasmix mole change use cases into a
proc called adjust_gas which simply adds the designated mole count of
the species into the gas mix while also handling asserting the gas and
garbage_collect()
I also added adjust_multiple_gases and convert_gas() for modifying
multiple gases and within a gasmix

## Why It's Good For The Game
Lemon wanted this to be done as part of the air group refactor 

## Changelog

🆑
refactor: refactored majority of gas_mix mole change into adjust_gas()
proc
/🆑
2026-04-21 13:43:47 -07:00
Yobrocharlie 30db9f8353 Changes the antag gear spawner (#95771)
## About The Pull Request

from the closed snowdin pr that was closed due to apathy.

everything on the table is up for discussion and subject to change

## Why It's Good For The Game

As of the itme of writing this for something called antag gear spawner
the best thing you can hope to get is a syndicate toolbox or 15 raw
diamonds, this changes that by adding instead just actual antag gear but
not real antag gear- more so just loot in general.

## Changelog

massive change just look at changed files

🆑
add: added more things to the antag gear spawner
/🆑
2026-04-20 21:05:30 +02:00
SmArtKar 2680aafa3f [MDB IGNORE] Lavaland Mineral Rework: Yapmining 2026 (#95682) 2026-04-20 10:52:59 -04:00
Tim 3460478296 Fix window spawners not being dense (#95773)
## About The Pull Request
This fixes a random spawner issue where objects could spawn outside
windows because the pathing determined that window spawners are not
considered dense.

See the code below:

```dm
/obj/effect/spawner/random/proc/has_unblocked_line(destination)
	for(var/turf/potential_blockage as anything in get_line(get_turf(src), destination))
		if(!potential_blockage.is_blocked_turf(exclude_mobs = TRUE))
			continue
		return FALSE
	return TRUE

/turf/proc/is_blocked_turf(exclude_mobs = FALSE, source_atom = null, list/ignore_atoms, type_list = FALSE)
	if(density)
		return TRUE

	for(var/atom/movable/movable_content as anything in contents)
		// We don't want to block ourselves
		if((movable_content == source_atom))
			continue
		// don't consider ignored atoms or their types
		if(length(ignore_atoms))
			if(!type_list && (movable_content in ignore_atoms))
				continue
			else if(type_list && is_type_in_list(movable_content, ignore_atoms))
				continue

		// If the thing is dense AND we're including mobs or the thing isn't a mob AND if there's a source atom and
		// it cannot pass through the thing on the turf,  we consider the turf blocked.
		if(movable_content.density && (!exclude_mobs || !ismob(movable_content)))
			if(source_atom && movable_content.CanPass(source_atom, get_dir(src, source_atom)))
				continue
			return TRUE
	return FALSE
```

## Why It's Good For The Game
Random spawners will now respect window boundaries. 

## Changelog
🆑
fix: Fix window spawners not being dense, which affected random spawners
LOS boundaries.
/🆑
2026-04-17 13:02:32 +02:00
Leland Kemble 38037021ef Smoke applies to people once per tick (#95579)
## About The Pull Request

Chem smoke no longer applies smoke during `spread()`, waiting for
`process()` instead.
Chem smoke no longer gives reagents to mobs during its override of
`process()`, letting its parent do it instead.
Smoke no longer calls both `trans_to()` & `expose()`, letting
`trans_to()` call `expose()` instead.
All in all, it triggers on mobs once per tick, instead of 3 or 5. Hooray
for eyes everywhere.

(Stuff like tear gas still goes kind of crazy with it, being
volume-agnostic, but it's one third as bad)

## Why It's Good For The Game

fixes #95539
2026-04-13 12:59:49 -05:00
SmArtKar 5979234e9e Removes butterflies from the plasma flower MOD core, reduces the amount of particles spawned (#95623)
## About The Pull Request

The plasma flower MOD core from the Garden of Eden ruin no longer spawns
butterflies as you run around, and the amount of pollen particles it
creates on the user has been quartered.

## Why It's Good For The Game

Butterflies are incredibly annoying to deal with and can block your own
swings in combat, and don't serve a purpose beyond creating a ton of
visual clutter. Same applies to the pollen particles, there's so many
you can barely see your own sprite underneath. Quartering them still
leaves plenty there to look nice.

## Changelog
🆑
del: Plasma flower MOD core no longer spawns butterflies around the user
qol: Plasma flower MOD core's pollen visual now spawns less particles
/🆑
2026-04-12 11:16:14 -04:00
The Sharkening 6dcb01eb7d Shark commits 2026-04-12 05:01:55 -06:00
ArcaneMusic a5ca784dd9 Fixes and improvements to weakpoints. (#95641)
## About The Pull Request

Weakpoints have a few things adjusted on them to result in more expected
behavior.

* They now have infinite move resistance to avoid being thrown by
explosions, as well as being thrown into space.
* The function for spawning and propagating a crack has been adjusted to
avoid propagating over space tiles.
* Weakpoints now animate their spawning in, in order to look more
natural when observed.
* Weakpoints now start on a lower layer to avoid being above cables,
pipes, etc.

## Why It's Good For The Game

It bugged me that weakpoints could spawn onto/be moved onto space tiles
and I made this as an attempt to prevent that from happening as much as
possible.

Also tweaks a few of the functional/visual aspects of the cracks to be
both more obvious as well as look more pleasing when you see one spawn
in.

## Changelog

🆑
fix: Weakpoints have more safeguards to prevent them from spawning onto
space.
image: Weakpoints now have an animation to spawn in with.
/🆑
2026-04-11 13:53:22 -04:00
MrMelbert aba5e2d9fb Roundstart xeno egg alert is included in the roundstart report (#95608)
## About The Pull Request

Roundstart xeno egg no longer sends a second report if it rolls, now
instead adding an addendum to the roundstart report

<img width="409" height="111" alt="image"
src="https://github.com/user-attachments/assets/14a62737-4d01-4240-8d3f-975e409d1fc2"
/>

## Why It's Good For The Game

I never really liked how meta-game-able the second alert is, the moment
you hear `Secure command report created` 2 minutes into the round you
know it's an egg round. Combining the roundstart alerts give the command
staff the option of trying to hide it which could be fun.

## Changelog

🆑 Melbert
qol: Roundstart xeno egg is now mentioned in the roundstart report as an
addendum, rather than as a second report (usually) following the
roundstart report.
/🆑
2026-04-09 17:53:39 -07:00
Tim 14c77736e7 Slot Machine DLC - Diversified Debt for Every Department (#95513)
## About The Pull Request
This PR takes the improvements from:
- #95313

And builds on it quite a bit. Slots now have:
- New symbol icons based on SS13 objects instead of Font Awesome icons
- Several new slot machine subtypes for every department
- New slot machine random spawner that is used to replace all slot
machines on all maps
- ~~Greyscaled the slot machine sprite and replaced it with GAGs (to
color them by department)~~
- New rare trap/hazard abilities depending on symbols (syndiebomb =
flashbang, handcuffs = cuff, singulo = shock, etc.)
- Syndie slot machine that comes preinstalled in all syndie
outposts/nuke bases
- Slot machines circuits can be configured with a screwdriver to change
the type and emagging results in the syndicate version
- Tweaked the pixel offset for the jackpot flashing icon so it is in the
correct position
- Improved the name generator with more adjectives and nouns for all
subtypes (ex. clown slot machine = "Lucky Giggles")
- IDs and Department budget cards can be linked as the owner of the slot
machine, however NT takes a 40% cut off the profits since jackpots/bonus
spins are paid out by NT

##### And yes... there is a clown and mime subtype... honk

## Why It's Good For The Game

<img width="1503" height="791" alt="dreamseeker_t8lLODECva"
src="https://github.com/user-attachments/assets/597355be-aee0-483a-82a4-7f8d6fa9ae90"
/>

Better slot machine icons and code.

## Changelog
🆑
add: To help cover budget expenses, NT has redesigned and installed new
slot machines that are themed by department. Slot machines can also be
linked to bank accounts via ID cards or department budget cards. NT
takes a 40% cut of profit to payout major jackpots and bonus spins.
Please gamble responsibly.
map: Replaced all slot machines with slot machine random spawners. Added
syndicate slot machines to Syndicate bases and nuke outposts.
/🆑

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
2026-04-03 15:25:31 +01:00
SyncIt21 47b889ec9b Fixes 2 instances of turf changing not affecting mounted objects correctly (#95534)
## About The Pull Request
- Fixes #95532

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

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

## Changelog
🆑
fix: Any effect that changes the theme of the environment no longer
break turf mounted objects
fix: destroying plating with lava/water etc will destroy any object
mounted to it
/🆑
2026-03-29 17:51:54 +02:00
ArcaneMusic 8a6649c8a9 Adds a cargo shuttle upgrade for plastic flaps and air refills. (#95393)
## About The Pull Request

We've all been there before. You send the cargo shuttle, you return it
only to find the blast doors were wide open, and air is now venting out
into space, and with the airlock cycling you are now trapped in a
freezing death trap of your own unwitting design.

This is funny and I want us to keep doing this.

But in an effort to continue to offer interesting things for cargo to
buy in a given shift, this PR offers the ability for cargo to buy an
upgrade to the cargo shuttle itself, that being 2 ~~tiny fans~~ Plastic
Flaps that are installed into the shuttle, as denoted by landmarks
mapped into the cargo shuttle.

Upon being picked up, also includes a certificate of installation. to go
onto the shuttle. Honestly, this is mostly so that I can be lazy and not
just spawn an empty crate but Ideally I open this up for future
categories of "cargo upgrades" that just spawn onto the station.

The other feature here is in shuttles having their air refilled on the
way to/from the station, as part of their subscription to air ™️

It's currently offered for the fairly steep price of 8,000 credits.

## Why It's Good For The Game

This is admittedly a luxury purchase, but, for players who are doing
well enough on credits, either through stocks, bounties, shuttle loans,
cargo events, whatever, this is something that players may want to
purchase for peace of mind, while being entirely optional in-game. The
cargo shuttle can be finicky in many ways and can tend towards easy
mistakes causing lots of pressure-related injuries in a round.

Again, this is intentionally offered at a high price point to avoid this
being an automatic purchase early into the round, but also something
that feels like an earned luxury if you have it, allowing you to focus
on your loop of buying and selling items, hustling if you will, without
caring if Larry over there is going to vent the shuttle for the
umpteenth time.

Like other tiny fans, these are not deconstruct-able and intentionally
should be locked to the cargo shuttle in practice.
2026-03-26 17:37:48 -05:00
SyncIt21 382b81ae5d Fixes posters rolling up when deleted (#95445)
## About The Pull Request
- Fixes #95444
2026-03-25 16:34:42 -05:00
LemonInTheDark 9d14e327b5 Begins Improving Sparks/Flares Somewhat, Adds Animatable Light Overlays (#95362)
## About The Pull Request

[Adds a visual tick helper, integrates it into SSmove and
such](https://github.com/tgstation/tgstation/commit/e97035f9f74fad5c67c5bf19d8d5d3bb4bd476b4)

Basically, if we do "stuff" during verb time then the next chance
clients have to actually see it is on the next visual tick (rather then
the normal "this tick"). This is cause clients get their next frame
during maptick, and maptick runs before verbs.

We want to be able to handle this properly because if you say, create an
object and then move it on the same VISUAL tick (NOT game tick), it will
just teleport instead of playing out the move. I don't want this for
stuff like sparks, so we need a way to work around it.

[Moves most users of the _FAST flag to
_INSTANT](https://github.com/tgstation/tgstation/commit/6f96daac00519c69adc7554f52114798a65f3ad5)

These are the kids that don't immediately spawn something and the move
it, and we want to allow them to move actually as soon as possible
(important for stuff like space)

[Improves basic effect systems, makes their products delete when they
stop
moving](https://github.com/tgstation/tgstation/commit/172cb25d80ed34e1ec523172a1677fb524239fba)

Moves some stuff out to getters or vars so children can better decide
how long effects should last/how fast they should move. Uses this to
clean up weird dupe code used by explosions.

Makes all these effects delete on contact with something that stops
them. I'm doing this because an effect just hanging in the air looks
really really odd. Does have consequences for sparks that are already
moving at a wall though, might need a better way to handle that.

Makes all these effects use _FAST loops so they don't just hang in the
air for a second on spawn

Adds a setter proc on sparks for their duration, gonna use this to
improve their effects some

[Refactors overlay lights, adds support for animating their
images](https://github.com/tgstation/tgstation/commit/3ad0083cf2b536df51a6d93dca40eac20c1d62d1)

Implements light_render_source and relevant setters, this allows us to
replace the components of an overlay light with basically whatever we
want

Refactors overlay lighting to handle its images more consistently,
allowing us to hook into an image being modified

Combining the two of these will allow us to consistently copy a light's
image, modify it in some way, and then relay that modification back
down. Allowing us to animate it or do more advanced effects painlessly

Also, fixes ranges of 1 or less not rendering at all on initial set
(thank you kapu)

[In which I get fed up and add a macro helper for UID
generation](https://github.com/tgstation/tgstation/commit/aab48b03d407104d4f9cf9acb034494237def911)

[adds vv hooking for all existing lighting
vars](https://github.com/tgstation/tgstation/commit/b81c6200a0d74c36b440aa3f4c1f22c422090a2d)

[Upgrade effect system's dir picking to avoid duplicates when
possible](https://github.com/tgstation/tgstation/commit/18b622586b509c6be4c4bca4e3e7c175ad75fe91)

[Uses the technique described above to animate spark's lights out as
they
move](https://github.com/tgstation/tgstation/commit/67ba177982213799984a70e89536c5efb3d17e14)

This is a decently nice effect imo, it allows us to bump their power
(read, alpha) since it'll get animated away. I try to sync the animation
to the actual icon state's flow (it's 0.7s long). I also sped them up
somewhat to hopefully have a nicer looking effect? we'll see.

[Abstracts away intercepting overlay lights into a holder
datum](https://github.com/tgstation/tgstation/pull/95362/commits/b3f1fe74f2c3bab1d8912ab8a666bd05677ad032)

This should make it far easier to reuse this pattern!

[Fixes overlay lights flashing to double intensity when picked up off
the
ground](https://github.com/tgstation/tgstation/pull/95362/commits/1d83f2031fa2b33312b2aea4359c0c37c9d04ac7)

We needed to clear out their underlays BEFORE the animation

[Adds a flickering effect to flares and their
children](https://github.com/tgstation/tgstation/pull/95362/commits/b7a858e04a607c58b6c7fbe1476ffe2239e63bde)

I'm still not 100% happy with this, I was trying to avoid it feeling
like a heartbeat with random noise and I.. THINK it worked? it's
honestly quite hard to tell

[Adds the same flickering to lighters, welding tools and life
candles](https://github.com/tgstation/tgstation/pull/95362/commits/3ec44027e17835ae96702cec5f0b12d1f4deb32b)

Also, updated light candles to mirror the appearance of normal candles
and use overlay lighting

EDIT:
I realized while working on flares that I accidentally double applied
color, so if you saw the sparks animations before now it was different
(less vibrant). IDK if I like this better or worse but it is RIGHT and
that's what matters.

## Why It's Good For The Game

I got mad about how bad these looked, and this is a start at improving
them.
Also, adds a framework for more dynamic effects applied to overlay
lights (you could use this to apply a sort of "emergency rotating"
effect, or flicker/buzz for example).

<details>
 <summary>Before</summary>


https://github.com/user-attachments/assets/66437f27-ee3c-4f14-a7ee-4a1c3e68533a


https://github.com/user-attachments/assets/ed14fff8-a7eb-47fe-bab5-9a490ac96629

</details>

<details>
 <summary>After</summary>


https://github.com/user-attachments/assets/fb24ff2e-c745-42a5-8e11-c8a1eeef35a5


https://github.com/user-attachments/assets/fd8c2116-cb92-4fe6-ad3e-786a6538e52a

</details>

## Changelog
🆑
add: Reworks how sparks render. They're now a bit brighter, will fade
out as they move/if they hit something, will stack with each other less
and also won't start hang in the air on spawn.
add: Added a flickering effect to lighters, welding tools, flares,
torches and candles (since they're flames).
fix: Overlay based lights (think flashlights) will no longer flash to
double intensity while being picked up.
refactor: Reworked how some effects (explosion particles, sparks, some
reagent stuff) function, report any bugs!
/🆑
2026-03-20 14:48:57 +13:00
MrMelbert 7403600454 Lavaland relics from boulders now have more appropriate effects (#95261)
## About The Pull Request

### Main changes

Lavaland relics from boulders have a (mostly) unique suite of random
effects, differentiating them from normal station relics

<Details>

<Summary>Spoiler Effect list</Summary>

- Dimensional shift (same as normal)
- Summon monsters (Summon animals, but Lavaland/Cult creatures, has a
high chance of deleting itself.)
- Explode (same as normal)
- Low potency shield (When holding the relic, you get a shield that
blocks three normal attacks.)
- High potency shield (When holding the relic, you get a shield that
blocks one normal or overpowering attack.)
- Random teleport (same as normal)
- Random AOE teleport (Cult themed version of normal teleport that
affects all nearby objects/mobs. Blocked by antimagic, has a low chance
of deleting itself)
- Recharge (same as normal)
- Rockfall (Places rock turfs over nearby open turfs. These are weak, ie
they can be hand-mined. Stuns anyone caught in it, has a chance of
deleting itself)
- Blood spray (Consumes a chunk of the user's blood and sprays blood
around. Has a chance of swapping to Blood suck)
- Blood suck (Consumes a chuck of all nearby mob's blood and transfers
it to the user. Blocked by antimagic. Has a chance of swapping to Blood
spray)
- Cleaning foam (same as normal)
- Acid cleaning foam (spawn an ez-clean grenade, has a high chance of
deleting itself.)

</Details>

### Other changes

Relics spawned from gifts (ie Christmas) auto-reveal themselves

Blood sprays won't merge with each other

Better documentation, and relics now uses `deconstruct` when terminating
itself

## Why It's Good For The Game

- The flavor behind these cursed and cultish relics doing the same thing
as the cobbled together electronics found in maint is kinda weak. 90% of
the time I see them abandoned in a pile in mining. More flavorful and
potent effects may make people decide to investigate them more.

- The gift thing was just a fun random idea I had. Allows people to play
with their new toy immediately.

## Changelog

🆑 Melbert
add: Relics found from cracking boulders now have a (mostly) unique set
of mining and cultish related effects.
add: Relics found in gift boxes no longer need to be discovered first in
science.
/🆑
2026-03-20 00:22:24 +00:00
levels0 43e1aae5c9 Fix Webbing Production gene webs (#95425)
## About The Pull Request
#95197 made gene-produced webs drain the stamina of their makers, this
is a fix for that
## Why It's Good For The Game
## Changelog
🆑
fix: webbing production webs no longer harm their maker
/🆑

---------

Co-authored-by: l0 <-->
2026-03-19 20:03:55 -04:00
Cody Brittain 965c4a40a9 Add an equivalent to balloon_alert_to_viewers, but for hearing (#95376) 2026-03-17 17:28:27 -04:00
Tim 4f50fab294 Change spiderwebs to drain stamina when mobs enter (#95197)
## About The Pull Request
This changes spiderwebs to drain stamina from mobs whenever they enter a
turf filled with spiderwebs.

## Why It's Good For The Game
The old movement code was very janky and buggy. Because it used the
`CanAllowThrough` proc, a mob could spam several dozens of movement
attempts per second, resulting in a massive amount of shaking and `stuck
in the web` messages. This had the effect of not really slowing or
stopping movement, since the RNG was being rolled so fast that it was a
minor inconvenience.

I feel like the stamina drain effect makes more sense and feels more
natural.

## Changelog
🆑
balance: Sticky spider webs now drain stamina when mobs enter the turf
/🆑
2026-03-15 09:57:11 +01:00
ArcaneMusic b997f27bf2 Mushroom people's cap organ now causes them to emit spores upon death, growing mushroom patches. (#95314)
## About The Pull Request

Mushroom people's cap organ, when it's owner dies, will cause the body
to start emitting spore particles. After 45 seconds of death, the spores
will bloom into a brownshroom patch, similar to what the glowshroom
family of mushrooms grow.

<img width="341" height="213" alt="image"
src="https://github.com/user-attachments/assets/c410fbde-bc53-456d-bedb-89bcff62de78"
/>

These don't have a parent seed, and use reishi mushrooms as a genetic
parent for stats. This also means that they do not possess the glowing
gene either.

<img width="419" height="327" alt="image"
src="https://github.com/user-attachments/assets/cbae490a-17fd-44ff-a845-fc06020b7a14"
/>

## Why It's Good For The Game
I spitballed this idea while chatting, that a mushroom person molding
over and releasing spores upon the host body perishing seemed rather
in-flavor, not to mention that in the exceptionally rare situation that
a mushroom person were to get onto the station and die, that there's a
chance that they could be found and revived, OR, at the very least
harvested to pass on their cool mushroom cap head.

## Changelog

🆑
add: mushpeople now emit harmless spores upon death, which will grow
into mushrooms on the floor and walls for a time.
/🆑
2026-03-11 22:45:06 +01:00
MrMelbert 0ec110a053 Update mob fire vfx a bit (#95199)
## About The Pull Request

1. Removes the particle effects from mob fire. 

2. Fire lighting now scales with how "on fire" you are. 

3. Adds an emissive effect to mob fire. 

4. Slightly increased the number of firestacks needed for the more
intense effect (by 10%) (3->5)

5. Fixes the singular broken frame in monkey fire sprite. 

6. Xenomorphs now use the generic fire sprite, adjusting the offset for
larger xenos. Closes #12605 .

## Why It's Good For The Game

1. The effect just doesn't look good as mobs move and rotate
unfortunately. We could probably revisit it in the future when particle
frameworks are more developed, but in the meanwhile watching all of a
mob's embers just twist 90 degrees as they flop to the ground looks
jarring.

2. Produces a neat effect of the light dying out as you get closer to
extinguishing a fire.

3. Adds some bloom to fire, and keeps fire visible as the light dies out
(as the firestacks decrease). I think it looks neat, though I'm not sure
how... realistic? It is in practice?

4. You scarcely see the "low stack" fire vfx due to the low threshold it
was set to. This change is intended to make it slightly more common.

5. Bugfix. It was not offset correctly.

6. Bugfix. I didn't sprite anything unique for them - I just made them
use the generic fire overlay.

<img width="336" height="142" alt="image"
src="https://github.com/user-attachments/assets/ceeac35d-912c-4ad1-9d3b-4384ffdb905b"
/>

## Changelog

🆑 Melbert
del: Removed ember particle effects from mob fire 
add: Mob fire brightness now scales with how "on fire" it is - the more
fire, the brighter the light
add: Mob fire now has a bloom effect and glows a bit
add: The threshold that human fire sprites update from "small" to "big"
has been increased (by 10%)
fix: Fixed broken frame in monkey fire animation
fix: All Xenomorphs now use the generic fire sprite
fix: All Xenomorphs no longer lose their fire sprites when resting
fix: Large Xenomorphs now offset their fire overlay to the middle of
their sprite
/🆑
2026-03-05 19:16:45 +01:00
Alexis 5c5a636485 Merge branch 'master' into upstream-feb12-2026 2026-03-02 07:42:16 -05:00
SmArtKar b42ebeb4c2 Adjusts all get_temperature() accesses to compare it to a value (#95236)
## About The Pull Request

``get_temperature()`` returns a value in kelvins, not a boolean. Trying
to treat it as such will result in ***any*** item with a thermal value,
like condensers, being treated as a lighter.

## Why It's Good For The Game

Consistency, allows us to have actually functioning cooling items that
don't act like lighters all the time.

## Changelog
🆑
fix: Condensers can no longer be used to ignite things
/🆑
2026-02-24 21:05:44 -05:00
SmArtKar a3498fdcd7 Material Science 1: A bunch of math (#95090) 2026-02-22 16:53:51 +11:00
axietheaxolotl 51ad6527c7 stabs blusec in the jugular and takes their wallet (virosec - security resprite and reset) (#5159)
## About The Pull Request

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

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

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

stuff left to do

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

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

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

## Why It's Good For The Game

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

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

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

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


</details>

## Changelog
🆑 axietheaxolotl / viro
del: blusec
add: redsec
/🆑
2026-02-18 16:38:21 +01:00
Y0SH1M4S73R bff56bf388 Jury-Rigged Anomaly Tech: Adds effects to pulsed anomaly cores (#95049)
## About The Pull Request

Each type of anomaly core has an effect when pulsed by an assembly,
button, or wire. Most of these effects are a weaker version of their
respective reactive armor's unique effect (except for pyro and vortex
anomalies, which make stealth armor solely because there isn't specific
reactive armor for them).

In particular:
- Pyro anomalies make a 3x3 area of hotspots around themselves.
- Gravity anomalies gently pull most unanchored objects in a 2 tile
radius.
- Flux anomalies make a short range 10 kJ tesla zap that usually doesn't
propagate more than a single time.
- Bluespace anomalies teleport the object they are connected to up to 4
tiles away. They will teleport out of storage, and they will teleport
out of your hands or equipment slots unless they have NODROP. This has a
15 second cooldown, which is longer than reactive teleport armor.
- Vortex anomalies do a weaker version of the the vortex thing, but
limited to a 1 tile radius around the core. This has a 5 second
cooldown, and can potentially destroy the core or what it's attached to.
- Bioscrambler anomalies perform a bioscramble pulse in a 1 tile range.
This has a 10 second cooldown.
- Hallucination anomalies perform a hallucination pulse in a 1 tile
range, adding 20 seconds of hallucinations, up to a maximum of 1 minute.
This has a 10 second cooldown, so hallucinations from a single pulsed
core can stack if you stay in range.
- Dimensional anomalies perform a dimensional shift in the same range as
the science relic. This has a fixed 15 second cooldown.
- Ectoplasmic anomalies haunt a few objects in a 5x5 area around the
core for 30 seconds. This has a 60 second cooldown.
- Weather anomalies cause a single lightning bolt to strike a random
open turf in a 5x5 area around the core. This bolt deals less damage
than the reactive weather armor's bolts, and does not have an AOE.

## Why It's Good For The Game

Gives both the station and antagonists additional uses for anomaly
cores, beyond the ones that are specific items printed by science. As
some examples:
- A bundle of wired flux anomalies surrounded by tesla coils can provide
a decent drip-feed of free power to the station - only on the level of
several pacmans, but better than nothing.
- Bluespace anomalies give you a manual version of the reactive teleport
armor's teleport, but you'll need to get creative in order to actually
teleport yourself and not just what you attached the core to.
- People who really want to play the bioscrambler lottery can keep doing
it after the original anomaly is neutralized.

## Changelog

🆑
add: Anomaly cores now have effects when pulsed by an assembly, button,
or wire. These effects are generally weaker versions of the effects of
the source anomalies, or of their respective reactive armors, and many
have a 50% longer cooldown than said armors.
/🆑
2026-02-15 17:43:45 -08:00
MrMelbert ef28e00690 [MDB Ignore] Refactors gauze, adds Tourniquets (#95041)
## About The Pull Request

1. Refactors gauze

Removes gauze var from `/stack`, adds a shared parent between tape and
gauze.
Behavior of "sticking thing on limb" is now a bit more generic, with
there being a component to facilitate it and a framework on `/bodypart`

Closes #92990

2. Adds Tourniquets

A first aid item, when attached to a limb it reduces blood loss from
that limb by 90%.
However while attached you walk slower (if on a leg), interact slower
(if on a arm), and yes, you rapidly die if you put it on your head

Paramedic belts have their starting equipment changed again for the
500th time.
Surgical tape -> Tourniquet
Bone gel -> Bonesetter

<img width="604" height="224" alt="image"
src="https://github.com/user-attachments/assets/443dd5c0-44a3-4ccb-9f6a-c561bbf2fba9"
/>

## Why It's Good For The Game

Adds some more variety for field treatment of bleeding wounds, and in
the future we can add things like "improvised tourniquets" or
"improvised splints" with wooden planks.

## Changelog

🆑 Melbert
add: Adds Tourniquets. While attached to a limb, reduces blood loss from
that limb by 90%, but makes you walk / interact slower. (Or if you put
it on your head, you die.)
add: You can purchase Tourniquets from the premium section of the
medical vendor
add: Paramedic belt setup has changed yet again: Surgical tape replaced
with Tourniquet, Bone gel replaced with Bonesetter.
add: You can use all forms of tape as splint - like Gauze. Will secure a
fracture but won't stop your blood from exiting.
refactor: Refactored gauze entirely, report any strangeness with it (or
tape, or tourniquets)
/🆑
2026-02-15 08:30:57 +01:00
Bloop a097a96447 Fixes an oversight with the effect system refactor reusable effects logic (#95146)
## About The Pull Request

`decrement_total_effects()` should run whenever an effect happens,
otherwise reusable effects will be capped at 20 total (not 20 concurrent
as it's meant to be). Meaning, reusable effects stop working once
`total_effects` is 21.

Fixes that.

## Why It's Good For The Game

Fixes a bug/oversight.

## Changelog

🆑
fix: fixes certain particle effects not triggering under certain
conditions
/🆑
2026-02-13 20:06:45 -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
ArcaneMusic 44f6846306 Adds structural weakpoints that can spawn on station (#94839)
## About The Pull Request

This PR was originally described to me by @AnturK and I implemented a
few elements of it to the best of my ability, then I promptly forgot
about it for the last 2 months.

This PR adds in randomly spawning structural weakpoints, using much of
the same mechanics of spawning in hidden satchels. If identified using a
T-ray scanner, they can be fixed using a welder by crew. More
excitingly, if a weakpoint is subject to an explosion, it will propagate
a crack, using a random line of turfs, then calling `ex_act()` on each
one with a small callback chain. Finally, cracks will form additional
weakpoints if caused this way, though are almost certainly going to be
noticeable, unlike before where they can spawn undertile.

With this addition, I've added a negative station trait, that will
increase the number of structural weakpoints that will spawn in a given
round. In a normal round, 3 weakpoints will spawn on the station, where
with the station trait, 4-8 weakpoints will spawn across the map.

Weakpoints come in 1 flavor practically, with a larger subtype being
spawnable by admins. The vars for weakpoints also happen to be fully
var-edit-able for admin purposes, including the explosion intensity that
can cause the weakpoint to trigger, the number of sub-cracks, if
additional weakpoints can spawn, etc.

You may also seal weakpoints using sticky tape.

## Why It's Good For The Game

Weakpoints feel like an interesting modifier to a map, where if caught
early can prevent a bad situation becoming worse. Otherwise, weakpoints
could very quickly cause chaos on the map, but despite their
description, aren't capable of causing **too** much destruction that
they can cause a shuttle call unless they're being manipulated by
traitors or antagonists. Though low odds, the idea of a player
welder-bombing a door or an IED going off related to the current
situation in a round, being exacerbated by pure chance due to being near
an IED seems really, REALLY funny.

## Changelog

🆑
add: Stations can now spawn with Structural weakpoints. If they're
subject to an explosion, they'll crack open a tear in the station's
turfs. If you spot one, make sure to weld it or seal it with sticky tape
to fix one. Or not!
add: Adds a negative station trait that greatly increases the number of
weakpoints that can spawn on station.
/🆑

---------

Co-authored-by: san7890 <the@san7890.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
2026-02-06 16:12:31 -05:00
SmArtKar 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
RikuTheKiller 3e504a77ae Refactor girders and wall construction (#94364)
## About The Pull Request

This PR refactors wall construction on girders, wooden barricades and
metal foam to use a centralized element, which listens to item
interaction signals and attempts to make any available wall recipe.

This change is an atomized prerequisite to my blueprinting system, since
that system requires a sane way to dynamically change the speed at which
walls are built.

This PR will later be expanded to refactor girder construction steps in
general.

I also added `proc/valid_typesof(base_type)` as a side effect of my
previous attempts at refactoring this stuff. There's now what amounts to
a code comment easter egg in the same file, because DM is wacko and
you're going to get cursed now too. :)
## Why It's Good For The Game

The old system had ~20 bespoke yet highly similar wall construction
steps. Some of the wall recipes were also concatenated from a string on
the used stack type. To put it bluntly, the code was fucking horrible.

Same thing goes for the rest of the girder construction steps, they were
all bespoke.
## Changelog
🆑
refactor: Refactored girders and wall construction. Report any bugs.
tweak: Some niche wall types might have their wall delay changed by like
2 seconds. This doesn't affect normal walls, reinforced walls,
falsewalls or any other important wall types.
/🆑
2026-01-26 11:36:16 -05:00
Leland Kemble 057cb60a96 Finishes up the remnants of surprise barricades (#94894)
## About The Pull Request

Some full barricades still managed to crop up in places they shouldn't
due to unnoticed barricade spawners, these have now been replaced by new
crude barricade spawners(so it keeps 20% chance to not be there) where
relevant and the maplint has been updated to keep them out of where they
don't belong

## Why It's Good For The Game

If a door is barricaded it should be visible

## Changelog
🆑

map: The last full wooden barricades on top of dense objects have been
excised

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

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

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

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

## Why It's Good For The Game

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

## Changelog
🆑
add: Multiple new reagents such as napalm, sorium, TATP,
smoke/sonic/flash powders and other explosives can now be used to rig
cells or tools.
add: Plasma and gunpowder rigged items can now have controlled current
requirement/delay by adding some stabilizing agent alongside the main
reagent.
balance: Creating chemical smoke inside of a mob now makes them
violently cough it up, damaging their lungs a bit.
fix: Chemically-rigged lightbulbs now once again explode.
refactor: Refactored how power cells, welding tools, lightbulbs,
cigarettes (and now, lighters) handle being rigged with chemicals.
/🆑
2026-01-21 19:21:06 +00:00
MrMelbert f41870b416 Hangover depends on personality traits (#94848) 2026-01-17 09:27:48 +01:00
SmArtKar 71a232f03b Makes lizard skin and lizardskin items inherit their "donor's" skin color (#94751)
## About The Pull Request

As title says, skin butchered from humans (currently only applies to
lizardskin) now inherits their owner's skin color, and so do items
(lizardskin boots and hats) made from it.

Also this PR gagsifies lizardskin hats and boots for this very reason.

## Why It's Good For The Game

Consistency, when you butcher a purple lizard you should get purple
lizard boots.

## Changelog
🆑
add: Made lizard skin and lizardskin items inherit their "donor's" skin
color
/🆑
2026-01-12 00:29:35 +00:00
Fghj240 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
SyncIt21 c27e434dcc Objects mounted in shuttle areas drop again & relocates some shuttle objects (#94611)
## About The Pull Request
- Fixes #94119

> This will require a different solution which someone smarter than me
has to figure out in the foreseeable future

Today me is now smarter than yesterday me. We basically just unmount
when the object is about to shuttle moved and remount after it has been
shuttle moved

This also map edits some objects that could not be mounted in shuttles
previously

## Changelog
🆑
fix: objects mounted in shuttle areas deconstruct when their support
structure is destroyed
fix: fixes runtime in arrivals shuttle when its request console is
destroyed
map: moved around some objects in shuttles so they can be mounted on its
walls again
/🆑
2026-01-07 00:17:44 -05:00
Jacquerel d71fd7bfb1 Fix some Guardian bugs (#94715)
## About The Pull Request

Fixes #94699
This resolves two long-standing bugs where Support holoparasites could
heal their hosts while recalled, and Dextrous holoparasites could use
items on their hosts while recalled.
However because these bugs have been present _at least_ since the basic
mob refactor (I suspect I accidentally introduced them, although they
may even predate that) I've marked this as a balance update. What do I
care about GBP anyway.

In addition I've fixed two more visual bugs;
Gaseous Holoparasites now use a particle holder instead of setting
`particles` on the mob directly, which fixes a visual issue where the
particles would persist if you cancelled them via recalling and might
trick you into thinking you were still emitting gas after manifesting
again.
I also forced the health hud to update upon spawn, because as-is until
your host took any damage or healing it would just look like an empty
box hovering on your UI.

## Why It's Good For The Game

Support Guardian healing you could argue is a feature, but personally I
don't think that being constantly healed by your buddy in a way that
nobody can possibly prevent could have been intended, and if we _want_
to canonise it then it should be done in a way that it's a passive
effect of being recalled and not an effect of spamming right click.

Dextrous Guardians being able to use items while recalled was much more
clearly a bug; Dextrous Guardians drop all items when they recall and it
was an oversight that they could just put an item on their belt and get
it out while recalled, then freely use it on their host (but nothing
else, from inside the host that's the only thing in their range). The
reasoning that this is bad is pretty much the same as for the Support
guardian, except more so because it can use the instant full heal staff
or any other similar item.

## Changelog

🆑
balance: Support Guardians cannot heal their owner while recalled.
balance: Dextrous Guardians cannot use their hands while recalled.
fix: Gaseous Guardian particles will correctly dismiss when you recall.
fix: Guardian health hud will display the correct value when you are
first summoned.
/🆑
2026-01-04 11:43:23 -07:00
mcbalaam 3799968eb3 feat: new floppy disk sprites; most disks are now under the /item/disk type; adds disk stacking, uqinue styling and wrapping (#94112)
## About The Pull Request

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

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

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

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


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

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

## Why It's Good For The Game

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

## Changelog

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

---------

Co-authored-by: The-Tyrant <tyrantofgaming@gmail.com>
2026-01-04 08:52:18 +13:00
SyncIt21 2aea95a970 Dimensional anomaly transformed airlocks save their cycling id (#94652)
## About The Pull Request
- Fixes #94061

## Changelog
🆑
fix: dimensional anomaly transformed airlocks save their cycling id
/🆑
2025-12-31 11:48:24 -05:00