1093 Commits
Author SHA1 Message Date
Alexis 88e84645b1 Merge commit '6b52b564a50e4f3091470529c683587e5de15d49' into upstream-sync-7-22-2026 2026-07-22 13:39:09 -04:00
san7890andGitHub cb535cdfa6 Refactor var/can_be_held to an element (#96917)
## About The Pull Request

We were doing a lot of mental gymnastics in a bunch of other places, so
let's change this wonky var to a streamlined element that will rely on
the same signals that a lot of stuff was already using/accounting for in
its own signal handling pathways, instead of being a weird coverage gap.
This patch should also make the whole "checking if someone is attempting
to pick a mob up" thing make a lot more sense and use a unified proc
instead of spot-checking whatever random things it wants to spot-check.
## Why It's Good For The Game

I didn't know this was a thing until I looked at #96873 and it made me
sad because literally everything else involving mob drag-and-drop is
already signal-based except this weird stinker that relied on proc
overrides. Never mind that now, let's use nice traits to avoid
typecasting and elements to avoid duplicating code. It should also be
much cleaner to add holdability to a mob isntead of having to do
`can_be_held = FALSE` as a weird behavior (at least one instance had
this non-necessarily). All this really is is just middleware on the
extant /mob/living code but still making it in proper lockstep with the
other signalling procs.

I did port over raptor code faithfully but I'm not 100% sure if it was
meant to be like this? Regardless, that's how it is.
## Changelog
🆑
refactor: Picking up mobs has been altered a bit, please report any bugs
or glitches.
/🆑
2026-07-13 16:57:47 +02:00
JacquerelandGitHub 2cf56ab1e1 Allows gorillas to kill themselves with items (#96736)
## About The Pull Request

This PR moves most of the code for using an item to commit suicide from
`human` to `living`, so that anything with hands can use what it is
holding to commit suicide.
This was surprisingly painless, as most `suicide_act` procs were already
written without the assumption that the person killing themselves was a
human even though they couldn't be anything else.

This might occasionally mean that in some cases (like drones) it may
reference anatomy that they don't have (like necks) but I think that's
not a big deal and don't worry about it.

## Why It's Good For The Game

It's funny.

## Changelog

🆑
balance: Anything with hands can now use the things it is holding to
commit suicide
/🆑
2026-07-09 16:55:53 +02:00
PapaMichaelandGitHub 776e4d7009 Saves the AI's previous cam when tracking (#96846)
## About The Pull Request

The AI currently saves `cam_prev` whenever you jump to a cam with a
hotkey, so you can press 0 to instantly jump back to where you were
looking before.
This PR also sets `cam_prev` when tracking a mob.

## Why It's Good For The Game

Huge QOL for the role. Whenever a human asks you to open a door, you can
click their name, open their stupid door, press 0 and be right back
looking at what you were before.

## Changelog


🆑 PapaMichael
qol: AIs save their "previous camera" (accessed by pressing the '0' key)
when tracking a mob.
/🆑
2026-07-09 16:35:47 +02:00
MrMelbertandGitHub a6500ba33e Fix BSRPED potentially bricking reagent containers (#96870)
## About The Pull Request

Fixes #96867
Reverts part of #88909

The PR removed the signal in favor of flipping off reagent flags on
insert, and restoring flags on removal
This caused the linked issue: We didn't check if the thing we were
restoring was a cell, so we'd just flip off a bunch of flags, leaving
the cell's reagent container with `NONE` flags set

However in fixing this, I noticed a pretty core issue with the idea of
flipping off flags, and that's "well what happens if something else
messes with the reagent container's flags"? Sure enough, if you lid and
unlid a beaker in an RPED, you completely bypass the exploit check and
can bomb like days of old

So I reverted the flipping of flags back to a signal. It was the easiest
way to handle the "flags" conflict without adding a bunch of traits or
whatever.

## Changelog

🆑 Melbert
fix: Fix the BSRPED potentially bricking reagent containers on removal
fix: Fix a potential exploit with BSRPED and reagent containers
/🆑
2026-07-09 16:34:26 +02:00
GhomandGitHub cad5a920a0 Implements foodtypes being inherited to cooked and processed food items as well (#96551) 2026-07-02 20:26:04 +10:00
MrMelbertandGitHub c06d6eac81 Rework to cursed/omen effects (#96529)
## About The Pull Request

- Cursed/omen: Vending machines will have a chance to tip over onto you
when you purchase something, rather than passively as you walk around
them.

- Cursed/omen: Airlocks will now have a chance to crush you if you stand
on them when they try to close, rather than passively as you walk
through them.

- Cursed/omen: Light fixtures will now have a chance to shock you if
they break or are turned on/off, rather than passively as you walk
around them.

- Cursed/omen: Mirror reaction will only trigger if you step up to a
mirror, rather than if you step within two tiles of a mirror.

- Cursed/omen: Several chat descriptions of events have been rewritten
to be more "final destination", less "you're being haunted".

- Bad luck smite set to infinite can no longer be blessed to be removed.

- Fixes and refactors for Omen

## Why It's Good For The Game

Cursed is a very fun idea for a quirk but it is quite miserable to play.
Just navigating around results in you being hardstunned every minute as
you break literally every light fixture in your department.

I wanted to lessen this misery a bit while still keeping the theme of
the quirk/component. I figure it'd be more appropriate/fair if these
unlucky interactions happen as a consequence of something you (probably)
did rather than just existing.

## Changelog

🆑 Melbert
balance: Cursed: Vending machines will have a chance to tip over onto
you when you purchase something, rather than passively as you walk
around them.
balance: Cursed: Airlocks will now have a chance to crush you if you
stand on them when they try to close, rather than passively as you walk
through them.
balance: Cursed: Nearby light fixtures will now have a chance to shock
you if they break or are turned on/off, rather than passively as you
walk around them.
balance: Cursed: Mirror reaction will only trigger if you step up to a
mirror, rather than if you step within two tiles of a mirror.
spellcheck: Cursed: Several chat feedback messages have been rewritten
to be less "overt" about their nature. (More "final destination", less
"a demon is haunting you".)
admin: Bad luck smite set to "permanent" can no longer be removed by
chaplains.
admin: Bad luck smite set to "permanent" won't gib the guy on death if
they've experienced one bad luck event.
refactor: Cursed/omen/bad luck has been refactored, report any oddities
with it.
/🆑
2026-07-02 09:33:30 +02:00
7f4171fd4d Adds bodyshape arg to a lot of missing spots, generalizes 'wear_digi_version', adds female gender shaping to digi sprites (#96633)
## About The Pull Request

Adds female gender shaping to digi species (such as lizards), for the
top half only.

<details><summary>Shown here</summary>

<img width="337" height="464" alt="dreamseeker_HhKjfrmJ1f"
src="https://github.com/user-attachments/assets/a5a57580-6798-40e4-925c-b3a63e0e540e"
/>

</details>

Also just adds a bunch of bodyshape args now that we are passing that to
the clothing rendering. This will help with anything where you want
unique digi handling for any specific items. Also fixes some missing
args and even improper args in some of these proc overrides.

## Why It's Good For The Game

Makes things more convenient for coders. Adds some more customization
options for feminine lizardfolk.

## Changelog

🆑
code: bodyshape is now accessible in build_worn_overlays() and similar
procs.
image: lizards now have support female gender shaping for their suits
/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2026-06-30 20:02:53 +00:00
ArcaneMusicandGitHub b14f1aaa4b Adds Jet Boots, a very expensive new toy for cargo. (#96299)
## About The Pull Request
This PR adds Jet Boots, a new pair of footwear that can be purchased
from cargo as an import item.
Jet boots share behavior with their parent, the rocket boots, featuring
the long range jet dash that already comes with rocket boots, though
this differs from the jump boot's dash due to being a shorter distance
as well as being far less safe as a result.

The main draw for this item is that it has a toggle action to enable
sustained jet flight. That sustained flight behaves the same as a flight
potions, offering the ability to fly over tables, as well as a passive
movement when applied. One issue with these boots, matching flight with
wings, is that you need to be in suitable atmosphere in order to be able
to propel yourself. An additional restriction is that due to your
propulsion being based on your shoes, being leg-cuffed (such as from
bolas or bear-traps) will prevent you from being able to fly.

One pair of Jet Boots requires **40,000 credits**.

### Minor things
In adding this, most of the code was applied from the existing logic
already used for mob flight and the flight organs. Considering this is
like, the 3rd thing that has consistent flight behavior(?) I'm tempted
to try and refactor it into a component, but in the interest of being
somewhat lazy I held off for this moment. I could be easily convinced to
do so, however.

These boots arrive via a gold crate. They sell for the same amount, but
the only way to let us do that was to tweak the gold crate code so that
they're not hardcoded to always arrive with gold bars and the champion's
belt. As such, there's an update map's script attached to this PR to
move existing gold crate subtypes to a "stocked" variant.

<img width="336" height="224" alt="image"
src="https://github.com/user-attachments/assets/1209e6d8-0ccb-411f-b5f6-56a808709911"
/>

## Why It's Good For The Game

The last few weeks I've kinda challenged myself with the following
question and began working backwards: "What should cargo be able to buy
for 40,000 credits?". I mulled over a few ideas, including being able to
drop in map templates onto the station, additional cargo shuttle
upgrades (In the vein of the atmos refill upgrade from my last PR), etc.
I decided on trying and making something that is inherently a selfish
purchase. Not quite to the level of buying a cargo shuttle that kills
the entire crew, but the kind that makes you think "Oh my god, cargo
just blew their entire budget on a pair of shoes".

That said, offering players flight is a rare, and expensive upgrade,
based on the fact that flight potions and the like are similarly a rare
upgrade. The alternative, training and breeding a raptor capable of
flight, is also already in cargo's domain, but typically reserved for
shaft mining use. The main give here is that in exchange for flight,
it's still bound to an item. Someone can still murder you for your
shoes, or stun you and take them off your body, especially with the
increased stun multiplier while in propelled flight.

## Changelog

🆑
add: Cargo may now purchase jet boots, boots that enable sustained
flight, for 40,000 credits via the imports section.
/🆑
2026-06-30 21:51:15 +02:00
MrMelbertandGitHub 6ab4d7766a The power of love: Obsessed are slightly stronger about their obsession (+ modernization) (#96421)
## About The Pull Request

Notable changes:

- Obsessed get a slight strength buff related to their obsession
- When grabbing any of your targets (your obsession included), your grab
is harder to escape from, and cause (slightly) more stamina damage from
failed escapes

- Obsessed also get a slight strength buff while standing near their
obsession (for at least 20 seconds). This effect is applied instantly if
the obsession is incapacitated.
- The grab strength bonus applies to all mobs, rather than just your
targets
   - You get a 25% reduction to incoming stamina damage 

- Psicodine or Alcohol will prevent Obsession stammering / emote tells,
but also prevents these beneficial effects from activating

- Witnessing the death of your obsession grants you a permanent positive
moodlet (until they are revived)

- Obsessed tells have been reworked a bit, being less obvious in general
and having their chance to trigger reduced the longer you stand around
your obsession (resetting after leaving their view)

- Obsessed stammer was also reworked a bit, now being closet to Social
Anxiety's stammer, also reducing in severity the longer you stand around
your obsession (resetting after leaving their view)

- Obsessed antag status is now lost when transferring out of the
affected brain and gained when transferring into the affected brain,
making it play nicer with slime clones or mindswap

Other changes:

- Modernized a bunch of obsession code
- Replaced hardcoded checks for grab resistance with a signal

## Why It's Good For The Game

I wanted to give Obsession just a *little* something to help enable
them. I figure grab strength and pain resistance is a pretty fitting /
flavorful place to start.

The grab strength is intended to give them more ability to detain their
targets (by means of wrestling). Even a passive grab isn't a guaranteed
escape.
The stamina damage resistance is intended to give them a slight chance
to resist being detained by security. Not a significant one, just a
slight one.

## Changelog

🆑 Melbert
balance: Obsessions get moderately stronger grabs against their
objective targets (this includes their obsession and any other
kill/theft targets they may have).
balance: While standing near their obsession (for 20 seconds or if they
are incapacitated), Obsessions get slightly stronger grabs against
anyone, rather than just their objective targets.
balance: While standing near their obsession (for 20 seconds or if they
are incapacitated), Obsessions get slight stamina damage resistance.
balance: Obsession stammering has been reduced in severity a bit, and
also becomes less likely the longer you stand around your obsession.
balance: Obsession emotes have been made a bit less obvious, and also
become less likely the longer you stand around your obsession.
balance: Taking Psicodine or drinking alcohol will prevent Obsessions
from stammering or emoting around their obsession, but also disables
their stamina resistance and stronger grabs.
balance: Obsessions get a "permanent" mood bonus for killing their
obsession (until they are revived).
refactor: Obsessed has been refactored significantly. It will now play a
lot nicer with mindswaps. Report any oddities.
refactor: Grab strength has been refactored a bit, primarily affects
martial arts and drunken brawling. Report any oddities.
/🆑
2026-06-26 12:38:13 +02:00
Roxy de4c3b255d Merge branch 'master' of github.com:tgstation/tgstation into upstream-2026-06-23 2026-06-23 15:51:55 -04:00
SmArtKarandGitHub 61dddb6d80 Buffs goliaths and goldgrubs as mounts (#96540)
## About The Pull Request

Goliaths now continuously accelerate as long as you keep moving in the
same direction while riding, up to 4 times their normal speed. Changing
directions or stopping movement resets the speed boost, but slow turns
(such as north -> northeast) only drop your speed by half, which lets
you preserve your momentum by "drifting"


https://github.com/user-attachments/assets/19cd3081-8afb-404c-b4ed-f083286d0aa8

Goldgrubs are already pretty decent mounts, but still could use a bit of
a buff to compete with green raptors, so I've changed them to reset
their movement cooldown when mining, which should slightly boost their
speed when mining soft rocks.

## Why It's Good For The Game

Goliaths are atrocious as mounts and haven't been relevant since raptors
were introduced, and this adds a fun little gimmick to them. The
goldgrub buff should let them be slightly more useful as dedicated
digging mobs.

## Changelog
🆑
balance: Saddled goliaths now accelerate if you keep moving in the same
direction
balance: Goldgrubs now can move instantly after digging a rock
/🆑
2026-06-22 23:22:41 +02:00
TimandGitHub 2034800f3a Refactor VIM vehicles into mech (#96571)
## About The Pull Request
- Fixes https://github.com/tgstation/tgstation/issues/96553

This refactors the VIM vehicles used for pets and critters into a
functional mech. It also fixes the vehicle missing a sealed air
compartment, which meant they weren't initially spaceproof despite using
spacesuits for their crafting recipe and apart of their sprite.

The VIM mech features:
- No arms and thus cannot be equipped with any weapons
- Room for 1 armor module
- Room for 3 utility modules (jetpack, radio, etc.)
- Cannot be used by silicons, AI, carbon mobs, or large mob types. (only
small-sized simple/basic mobs)
- Can pass underneath mobs and tables since it is tiny
- Can only be crafted via the crafting recipe (cannot be made from
robotics fab or researched)

## Why It's Good For The Game
<img width="1920" height="1080" alt="WIyLe0jcll"
src="https://github.com/user-attachments/assets/b642ba87-d09d-488b-92eb-dc0d3df41122"
/>

The cat NTOS theme is so cute. 

## Changelog
🆑
fix: Fix VIM not being spaceproof
refactor: Refactor VIM vehicles into mech
/🆑
2026-06-21 19:39:10 +00:00
7180a1cc9d Completely refactors MKUltra + MKUltra changes (#5729)
## About The Pull Request

This PR is going to cover a lot, but the biggest thing is the complete
rewrite of MKUltra. Instead of a super, extremely annoying logic chain,
each command will be its own ``/datum/mkultra_command`` that is capable
of registering new regex and features. MKUltra becomes far more modular
(so any downstreams can easily add further commands)

- [x] The fundamentals. Chemical logic. Status effect logic. The
framework for new commands.
- [x] Our existing commands.
- [x] Re-add the skill chip. It will bypass mindshields.
- [x] Right click on the action button will give a list of every
command, its trigger words, and descriptions. MKUltra has none of these

## Why It's Good For The Game

Spaghetti if else chains are really bad and this is some of the most
unreadable code in our codebase. It is really tough to expand on
anything.

Side note, I'm doing this because I refuse to debug that absolute mess
to see why it's not working. I've been staring at it and I still barely
understand how it works.
## Proof Of Testing

<img width="852" height="591" alt="image"
src="https://github.com/user-attachments/assets/71f6c7f9-888a-4adc-8776-df247aa2147e"
/>

## Changelog

🆑
refactor: MKUltra has been completely rewritten. (this also fixes it)
add: Many behaviors of MKUltra has changed.
qol: MKUltra now uses last fingerprints on the reagent container to
assign a master. (You can make it as a synth now!)
qol: Velvet chords will automatically be given to you if someone (other
then you) drinks the MKUltra you've made.
qol: Borg friends can use MKUltra.
qol: MKUltra is now a proper status effect icon, that you can click to
resist.
qol: Right click on the Velvet Chords action button to see a list of all
commands.
del: Removed low purity MKUltra effects.
del: Removed useless commands.
balance: Lows MKUltra optimal temperature to 810 from 820. There's
slightly more tolerance in overheat temperature.
balance: MKUltra overdose set to 50u. It causes brain damage.
balance: MKUltra recipe: bluespace crystal reagent replaced with silver
reagent
/🆑

---------

Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com>
2026-06-20 21:56:18 -04:00
IajretandGitHub fa56a10149 FaxBond app for bonding with your fax (fax message subscription app) (#96467)
## About The Pull Request
Adds an up that allows you to subscribe to any fax. Heads start with one
by default and they are subscribed to their office fax upon joining.
Later part involved creation of fax subtype specific to a head. So i
decided to also make those as a required map item for the purposes of
CI.

<details>
<summary>UI</summary>
<img width="435" height="552" alt="изображение"
src="https://github.com/user-attachments/assets/73b814d5-3009-4c76-a829-c01f021aecf4"
/>

</details>

its pretty simplistic, but i am not a UI designer, sorry
## Why It's Good For The Game

It really sucks when you wait for someones message but they never
respond to it because apparently they never visit their office and never
saw a paper over their fax if even if they responded, by the time you
get an answer you already forgot about it anyway. In general, it makes
paperwork experience relating to faxes more enjoyable (probably)
## Changelog
🆑
add: added a FaxBond app. Everyone can download it and use it on a fax
of their choice to be notified when it receives a message. Heads of
staff come with it preinstalled and automatically subscribed to a fax
inside their office.
/🆑
2026-06-19 15:52:44 -06:00
SmArtKarandGitHub c9edd15f2c Makes fire overlay properly mask when using mining sphere MODule (#96578)
## About The Pull Request

Currently the overlay doesn't get masked as it is KEEP_APART and you end
up with a janky fire blender visual

<img width="141" height="129" alt="dreamseeker_NyvaUAPHnw"
src="https://github.com/user-attachments/assets/d50a7e57-9236-4c71-a186-6b34b3deb126"
/>

(Overlay update delay has been fixed after recording)
Not cached because its a single mob and the cost of updating said
overlay is minimal

## Changelog
🆑
fix: Made fire overlay properly mask when using mining sphere MODule
/🆑
2026-06-19 19:44:04 +02:00
33824ac7c1 TTS 3.0: Blips Rework, Radio TTS, Unknown Languages are Blips now (#95369)
## About The Pull Request

Re-did blips to be significantly nicer sounding and way better. Alien
speech you don't understand now comes through as Blips. If you have TTS
entirely disabled, you won't hear blips. Blips also now include more
customization options, and a dedicated Blips preview button by clicking
the leaf icon.

<img width="1749" height="354" alt="ApplicationFrameHost_5nKJEvaNV1"
src="https://github.com/user-attachments/assets/ef6c6b61-7c22-4a87-94c9-be50e89c65bb"
/>


https://github.com/user-attachments/assets/8cab7e55-6370-4e4e-99ba-ea2475569453

Radio TTS has been implemented. By default, you will hear all TTS over
the radio, but will not hear yourself over the radio. You can configure
this in Game Settings.


https://github.com/user-attachments/assets/94a44d84-17a9-4e6e-ac5c-3b800b11c159

<img width="743" height="193" alt="chrome_MOIcXaC2gh"
src="https://github.com/user-attachments/assets/907379b7-0689-486c-b29c-9be0a2259b05"
/>

The new TTS stack is located at
https://github.com/Iamgoofball/tgtts-qwen3 and is AGPLv3 licensed. The
new blips design was inspired by
https://github.com/joshxviii/animalese-typing.

The configuration to disable TTS on whispering has been removed, as it
is no longer needed and also interferes with radio TTS functioning
properly.

The Tram now utilizes TTS, and has had a general audio tune-up.


https://github.com/user-attachments/assets/f532d002-939c-43a1-95d0-0f0c43048997

TTS audio is now 3D and in space, see attached.


https://github.com/user-attachments/assets/b00df49a-9d1d-4b27-a8a0-d103099f5c7e

## Why It's Good For The Game

Quality of life improvements to the TTS system, long overdue. Also, TGMC
can migrate to this new method of doing radio audio so they aren't
sending double the TTS requests anymore.

## Changelog

🆑
add: Added support for Radio TTS. You will now hear players over the
radio via the TTS system.
add: Configure this in Game Options under the Sound tab.
sound: Re-did blips to be significantly nicer sounding and way better. 
sound: Alien speech you don't understand now comes through as Blips. If
you have TTS entirely disabled, you won't hear blips.
sound: The Tram and Computers now utilize the TTS system. Configs have
been added to set a consistent voice.
sound: TTS audio now utilizes 3D audio; you can now walk away from
people saying stupid shit and it gets quieter.
sound: Blips also now include more customization options, and a
dedicated Blips preview button by clicking the leaf icon.
del: The configuration to disable TTS on whispering has been removed, as
it is no longer needed and also interferes with radio TTS functioning
properly.
/🆑

---------

Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: Aleksej Komarov <stylemistake@gmail.com>
2026-06-15 18:54:24 -04:00
SyncIt21andGitHub b003f8fd97 [NO GBP]DeIntegrates welder from omnitool & radial menu won't show already selected tool (#96443)
## About The Pull Request
- See #96481 &
https://github.com/tgstation/tgstation/pull/96214#issuecomment-4697205835.
It's not worth the hastle but the revert was done in a bad way that
removes code & qol stuff so i did it better here.
- Radial menu won't show you the selected tool again thus reducing
clutter

## Changelog
🆑
del: removes the welder from the engiborg omnitool. They are now
separate entities again
qol: The omnitool radial menu won't show the same selected tool again
reducing clutter
/🆑
2026-06-13 17:29:20 +01:00
Ben10OmintrixandGitHub 64baa1979d Basic mulebots. last basic bot refactor (#95899)
my watch has ended

<img width="401" height="256" alt="ffffff"
src="https://github.com/user-attachments/assets/a539203c-020b-4ad8-b034-f69ec0eafa78"
/>



## Changelog
🆑 Profakos (originally pulled from their branch, did massive chunk of
this), Ben10omintrix
refactor: mulebots have been refactored. please report any bugs
/🆑
2026-06-11 23:58:13 -07:00
GhomandGitHub 3c485aa614 Santa Claus can now hear prayers that mention him or christmas. (#96406)
## About The Pull Request
Santa Claus can hear prayers that contain the words "santa", "claus",
"christmas" or "xmas". Prayers containing the word "satan" have a 40%
probability to being "erroneously" relayed to Santa instead. Talk about
a terrible typo. I'm toooootally sure nobody will do it on purpose
(totally forced joke ik ik).
Santa cannot know who the person praying is if not told inside the
prayer itself, however he can tell if the person is naughty (either
antag or has the evil trait) or not, so be mindful of that. If tired or
harassed by unwanted prayers, Santa can also click an action button at
any time to silence them. The prayers will still be sent to admins, they
just won't be heard by Mr. Claus.

This PR comes with a new component and a mild refactor of prayers. For
admins, the message from the pray verb is now wrapped in boxed message
spans. This will make prayers a bit easier to notice, since the lack of
message box coupled with lack of sound (for now, unless it's the
chaplain praying) makes them easy to miss.

Also tinfoil hats prevent you from hearing prayers, Santa (redundant
with the action button, this is just a little touch).

## Why It's Good For The Game
Early Christmas PR ! Yeah, I know, headsets exist and Santa Claus is
very capable of wearing one, but he's the same guy who rides a flying
sleight, climb down chimneys (notwithstanding his corpulent body). The
prayer thing makes a bit sense if you think of the more religious roots
of the character, though our Santa Claus is a bit more secular ya know,
and this is more of an excuse to give him something extra.

Oh, yeah, if people will abuse the feature, I guess I could add an
incapacitated check for the praying mob so that Santa won't hear prayers
from people dying or restrained, or remove the tidbit that says if the
person who sent the prayer is naughty or not.

## Changelog

🆑
admin: Prayers from players are now boxed (like examine messages and
some health readouts for example), making them easier to tell apart from
the constant stream of text in your chat tabs.
add: Santa Claus can now hear prayers that mention him or Christmas. He
won't know who's praying unless told, though he can tell if they're
naughty.
/🆑
2026-06-12 06:44:04 +03:00
TimandGitHub 5c16d8d75e Walking Aid Component (#96294)
## About The Pull Request
So I saw someone was adding a limping quirk in
https://github.com/tgstation/tgstation/pull/96200 and I had tried to do
the same back in https://github.com/tgstation/tgstation/pull/71470 a few
years ago. The codebase has evolved enough to support this behavior that
was not present initially during my first attempt. One of the big
features of my old PR was to add cane-like behavior to a bunch of other
pole objects.

This PR introduces a new modular `/datum/component/walking_aid`
component, moving canes/crutches away from hardcoded object behavior.
This component is now attached to the following items:
- Brooms
- Mops
- Staves
- Scythes
- Spears
- Canes
- Crutches

There are also some notable changes I made to how things work, detailed
below:
- Walking aid objects must be held on the same side as the affected leg
(if your right leg is missing, you need to be holding crutches on your
right arm)
- Objects lose their ability as a walking aid while being wielded with
two hands (ex. spears)
- Limping/Limbless are now both affected by a walking aid, where before
only crutches helped assist limbless mobs
- "Walking Aid" examine tag when the walking aid object is examined

All walking aids (except crutches) reduce limbless slowdown by 40%, and
completely ignore any limping penalties. Crutches reduce the limbless
slowdown by 60% and are much faster.

## Why It's Good For The Game
1. Mah Immersion
2. More modular code
3. Examine tags are peak
4. Assistants can now justify carrying spears as medical equipment
5. Cane/Poles should help with limblessness, but not as helpful as
crutches

While I wanted pole items to offer mobility support, they needed to
remain less effective than dedicated medical crutches. During testing, I
found that a 40% reduction is the point where the benefit becomes
noticeable.

## Changelog
🆑
add: Pole objects like mops, brooms, staves, scythes, and spears can now
be held in a hand to act as walking aids, mitigating limping from
fractures and reducing missing-leg slowdowns.
balance: Walking aids must be held in the hand on the same side as the
injured or missing leg to provide support, and lose their effectiveness
if actively wielded with two hands.
balance: Objects with the walking aid reduce limbless slowdown by 40%,
while dedicated medical crutches reduce it by 60%.
refactor: Refactor cane and crutch code logic into a modular walking aid
component
/🆑
2026-06-08 16:13:05 +02:00
The SharkeningandGitHub fb627a3410 COMSIG_BLOCK_RESIST added to COMSIG_LIVING_RESIST (#96343)
## About The Pull Request

Adds COMSIG_BLOCK_RESIST. 

## Why It's Good For The Game

This functionality would be nice.

## Changelog

Not player facing.
2026-06-06 18:25:37 +02:00
Leland KembleandGitHub 32fe49e63c Fixes pinpointers when AI shunts (#96351)
## About The Pull Request

Checking `occupier` right after `occupier` is nulled

Also, entirely unused signal, deleted.

## Why It's Good For The Game

Runtime Error

## Changelog
🆑

fix: Pinpointers stop tracking a shunted ai when that ai is no longer
shunted

/🆑
2026-06-06 18:08:46 +02:00
5a68cb5ff3 Implements "Sound Tokens", a way to have spatial audio. And implements it on looping sounds. (And also some tweaks to fall-off) (#96018)
## About The Pull Request

This pull request implements sound tokens, based on the implementation
by Kapu at https://github.com/DaedalusDock/daedalusdock/pull/1379

I've taken that implementation and extended it to looping_sounds,
allowing us to have spatial audio that updates much more nicely when
players walk closer. This system also lets players that walk into range
after the sound has started playing to also hear the sound, before if
you missed the sound, you would never hear it. This is particularly
noticeable with long sounds (Which is lame!)

**VIDEOS**:
griddle:
https://streamable.com/v7ayqm

engineering / SM:
https://streamable.com/5lr1oj


The system essentially sends the sound to every client, and changes the
volume based on distance to the sound. There are some performance
concerns here, so we will need to testmerge this and see how impactful
it is. It is in a subsystem though, so there is some limit to the amount
of cpu it will use. Do keep this in mind when watching the videos; it
will probably not be AS responsive as in there.

I've also changed how intense our fall-off is, making sounds lose their
volume slower. Before taking one step away from a 50 volume sound would
make it 18 volume, this is way too big of a drop and it became
particularly jarring with the changes in this PR.

Some sounds might be too long range now, but I think we should just
reduce the max range of those sounds as we were basically playing them
at <5 volume after 10 tiles, at which point we should maybe just reduce
the range a bit since at those volumes theyre really not audible.

**OLD FALLOFF;** note the MASSIVE drop from 1 tile to 2 tiles
<img width="1416" height="897" alt="image"
src="https://github.com/user-attachments/assets/805b270e-6aa5-4e84-868e-39585966f0a4"
/>

**NEW FALLOFF:**
<img width="1418" height="905" alt="image"
src="https://github.com/user-attachments/assets/eabbd592-ae9c-4690-8945-fbd0b4f6614f"
/>

Also tweaked a few looping sounds (deep-fryer in particular got some
clean-up, as its mid-length was way too short for the sounds and it had
a double-definition)


## Why It's Good For The Game

This system allows us to have a richer audio experience, I really don't
like how choppy our looping sounds are, especially in some areas where
you hear them a lot (kitchen and engineering)



## Changelog

🆑 CabinetOnFire, Kapu
sound: Changed our falloff to be less intense, as it was punching volume
down way too fast.
refactor: Implements a system for spatial audio to improve our looping
sounds
/🆑

---------

Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com>
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
2026-06-05 16:24:25 -07:00
shayoki f601a6ddaf Merge remote-tracking branch 'tgstation/master' into upstream-6-2-2026 2026-06-03 01:23:54 -05:00
SmArtKarandGitHub f3283799e7 Reworks lavaland tendrils into minibosses (#96186) 2026-06-02 21:00:15 +10:00
e68c1edad1 Streamlines Life() a little (#96215)
## About The Pull Request

Main changes

- `handle_mutations` is gone, DNA Injectors are now managed via a status
effect
- `handle_diseases` is gone, disease stages are just handled via life
signal
- `handle_bodyparts` is gone, it was unused and in the future any
implementations should use a life signal
- `spec_life` is gone, the main content of it is now in `human/Life`,
most children implementations now use life signal, zombie tongues now
handle zombie groans
- Life signal was split in two (pre and active)

Other changes

- DNA injector code was cleaned up considerably
- HARS now alerts admins when you inject someone else with it like
Monkey
- `COPY_DNA_SE` is no longer mistakenly unused (meaning stuff like
transformation sting no longer copies "active mutations")

## Why It's Good For The Game

Across the course of a full round we spend the same amount of time doing
literally nothing in life as we spend on handling human breathing.

Now in the context of a full round this is 8 seconds. Which in the grand
scheme of things, not a whole lot, but if we can get a tiny performance
gain from... not doing literally nothing (especially when we can do
these things cleaner with signals) that's a win in my book

## Changelog

🆑 Melbert
refactor: Refactored dna injectors (both the ones that change appearance
and activate mutations), report any oddities with them like failing to
revert your appearance or mutations not applying correctly
code: Ever so slightly changed how diseases tick, report any oddities
code: Ever so slightly changed how some species mechanics tick, like
golems and slimes, report any oddities
code: The code behind printing appearance modifying dna injectors from
genetics has changed, report any oddities
code: Some backend transformation sting code changed slightly, report
any oddities
code: Zombie "idle" groaning is now tied to the tongue rather than the
species itself
admin: Force-injecting someone with HARS give an admin alert, the same
as force-injecting someone with Monkey
fix: Several methods of copying DNA (including transformation sting)
mistakenly copied "active mutations", this has been fixed
/🆑

---------

Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
2026-05-29 22:48:16 -06:00
Leland KembleandGitHub d49c825f8e Bitrunning glitches take much longer to escape their simulation if there are remaining active bitrunners (#95934)
## About The Pull Request

For every living, connected bit avatar remaining in the simulation, the
`do_after()` for leaving the simulation as a bitrunning glitch ghost
role is multiplied by 5. The base timer remains at it was, two seconds.

Additionally, there is an exception in place for the "Island Brawl"
domain, which is the FFA with infinite respawns. It still multiplies by
5 for each active bitrunner, but that multiplier is reduced by 1 for
each death, so you likely only have to kill one wave of bitrunners for
normal escape time.

Additionally, because of necessity for the exception and also basic good
sense, bitrunning points are no longer component-based on specific turfs
in the domain, and are held in the server. It never should have been a
component, it had no reason to be one. This, as a consenquence, also
fixes that you could completely softlock any domain using points by
simply crowbarring the turf that the crate was yet to spawn on.

## Why It's Good For The Game

Yesterday, I saw one of the lamest things I've ever seen in the game. A
bitrunning glitch spawns in, walks literally right by two bitrunners as
they ask who he is, and leaves the simulation to go on a killing spree
unburdened. There was extenuating circumstances in that situation, but
it still was a miserable breakdown of what I think the intended gameplay
of a bitrunning glitch is, and shows how ridiculously easy it is to
simply not engage with the intended hurdle in your path. The
primary(and, really, only) job of a glitch is to kill bit avatars, and
this PR makes it significantly more difficult to just... walk by them to
go on your killing spree on station. Work, then play.

## Changelog
🆑

balance: For every living, connected bitrunner remaining in a domain,
bitrunning glitches will take five times longer to escape.
fix: You can no longer softlock any virtual domain that uses points by
crowbarring the reward turf before the crate spawns.

/🆑
2026-05-29 19:35:45 +02:00
7cf1670987 Mirrors can trap dormant revenants (#95942)
## About The Pull Request
If glimmering residue (revenant ectoplasm) is scattered in the vicinity
of a mirror, the revenant will be trapped inside it instead.
-When mirrors are cursed in this way, the reflections are shifty and
distorted, like the revenant's reflection when it's alive.
-In this state, the revenant may only communicate via telepathy with
people reflected in the mirror (it's more like "standing close to it",
but that's probably ok).
-If the mirror is broken, the revenant will reform. If it's catatonic, a
new candidate will be pulled, much like with ectoplasm reforming.
-If the mirror is destroyed in another way, the revenant will be
destroyed as well.
-There is a 1/500 chance that a mirror will be haunted roundstart
## Why It's Good For The Game
You can now torment the revenant by eternally trapping it if it really
pissed you off

## Changelog
🆑
add: you can now trap dormant revenants in mirrors
add: haunted mirrors may very rarely appear roundstart
/🆑

---------

Co-authored-by: l0 <-->
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
2026-05-24 12:10:35 +02:00
SyncIt21andGitHub e861304e67 Omnitool fix & Engi Omnitool qol (#95752)
## About The Pull Request
- Large tank welding tool is now merged with engi omnitool. The welding
tank is shared across both omnitools so no extra fuel or such. Gives you
greater versatility in switching between tools without requiring you to
return the welding tool back to storage or bringing another omnitool
into an extra module slot and frees up a storage slot in storage. Plus
it just makes sense, completes the full set of tools an engi omnitool
should be having.
- Examining an omnitool also displays the examine of the internal tool
it is using. So examining the engi-omnitool with the multitool selected
will reveal what's in its buffer & examining it with the welding tool
will display how much welding fuel is left etc

## Changelog
🆑
qol: merged large welding tool tank with engi omnitool for engiborg
fix: examining the omnitool will reveal details about its internal tool
such as multitool buffer, welding fuel left etc
/🆑
2026-05-24 11:44:24 +02:00
MrMelbertandGitHub 8c45d65c4a State based digi and snout bodyshape (#96030)
## About The Pull Request

Digi and snout bodyshape are added and removed if digi or snout is
hidden
There now also exists a digitigrade bodytype which is not removed if the
bodyshape his

Bodyshape is solely used for determining how the body is shaped for
rendering
Bodytype is used for checking stuff like "can digis wear shoes" 

This lets us clean up rendering code a bit, allowing us to pass around
bodyshape rather than needing to check our wearer for digi and whatnot

Digi itself is now a component for legs that tracks - on item equip or
unequip - if said items squish the legs.

## Why It's Good For The Game

Right now we do some super jank stuff like updating body every time we
update our jumpsuit which is obviously a bit wasteful
This should make things easier to manage and work with (and maybe more
performant?)

## Changelog
🆑 Melbert
refactor: Refactored how digitigrade and snouts render, report any
oddities with that
/🆑
2026-05-23 19:28:07 +02:00
SmArtKarandGitHub f9da025c38 Fixes custom pizzas having broken sprites and not preserving their ingredients when sliced (#96106)
## About The Pull Request

- Closes #95030
- Closes #96081
Removed raw pizza subtype as it is unused and does not function properly
anyways

Also makes pizzas preserve their fillings when sliced

## Changelog
🆑
fix: Fixed custom pizzas having broken sprites and not preserving their
ingredients when sliced
/🆑
2026-05-23 17:16:33 +02:00
MrMelbertandGitHub ea0859d5fe Bane refactor (now uses damage multipliers) (#96003) 2026-05-16 11:41:29 +10:00
+37 21b4095dfd [MDB IGNORE] [IDB IGNORE] Upstream Sync - 04/17/2026 (#5453)
Upstream 04/17/2026

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

---------

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

This Pull Request adds a new logging system that uses a timeline to
track and visualize important events for specific datums.

This is done via a new window in which you can select a datum for
tracking, which adds it to the timeline. If this datum implements the
EVLOGGING macros, it can track important events onto this timeline. As
an example, we can log whenever an AI is deciding to make a new path, if
it decides to generate a new decisionmaking plan, it finishes an action,
or it decides to target someone/something.

We can select these events to see more information, and optionally get a
snapshot of important variables at the time this event was logged (like
the blackboard and current plan for AI controllers).

You can also filter out specific events / track info, which is done via
categories. Each event / piece of track info is given a category and if
you disable a category all events / track info in that category is
hidden. This lets you filter out things you might not care about.

<img width="2346" height="1209" alt="image"
src="https://github.com/user-attachments/assets/0763077c-e349-4c7c-b017-23d29e1d089b"
/>

_whoever thinks we didnt need advanced cleanbot logging is a noob_


In the video below I showcase how this works;
https://file.house/7nsOiqdvmSTxlsk3fs-e8g==.mp4
A cleanbot is roaming the halls, I turn on the event logger, click the
"pick target" button and click on the datum I'd like to track (the
cleanbot). This results in the cleanbot now tracking its events. I spawn
some dirt and the cleanbot decides to clean it, and I go through the
events; You can see theres different events being listed, such as when
the cleanbot starts targetting the dirt, when it cleans plan, when it
makes it JPS path and every time it moves over it.


The macros I've currently implemented are as follows:

**EVLOG_TEXT(DATUM, CATEGORY, INFO)**
Only adds text to the event logger window, no world-visuals

EVLOG_LOCATION(DATUM, CATEGORY, INFO, TURF) 
Adds text to the event logger and adds an image to where that turf is.

EVLOG_TURFS(DATUM, CATEGORY, INFO, TURFS)
Adds text to the event logger and adds an image to each turf in the
TURFS list

EVLOG_LINES(DATUM, CATEGORY, INFO, TURF_A, TURF_B)
Adds text to the event logger and adds a line from turf_a to turf_B

EVLOG_PATH(DATUM, CATEGORY, INFO, TURFS)
Adds text to the event logger and visualizes a path from A to B (same
way as the pathfinding debugger, of which I moved the visualization
before to SSPathfinder)

In terms of performance, the logger is a singleton, and events are ONLY
logged if
1. The logger is running
2. The datum has the DF_EVLOGGING flag.

This means most of the time, logging an event is a single var lookup
(Since the runner is off by default). The DF_EVLOGGING flag is off by
default as well and has to be enabled by the event logger, or set
temporarily by a dev in code.

This system can easily be extended with more event types / visualization
types as well. (I'm thinking of datumizing the ones I have now)

The TGUI is still a bit of a mess, I would love some pointers because
I'm not really good at react so I just kind of hit it with a hammer
until it did what I wanted 😎

Also, all of this is based on VisLogging from Unreal Engine, so it will
have some likeness https://unreal-garden.com/tutorials/visual-logger/

## Why It's Good For The Game

This system allows us to debug more complex systems (like basic AI) in
an understandable and clear way. While the implementation cases are not
super common right now, extending this system could make debugging these
systems much more comprehensible, and hopefully lets more developers
help us with improving these systems. (plus, we LOVE timelines)

## Changelog

🆑 CabinetOnFire
refactor: Implements "Event Logging" an improved way for programmers to
debug specific datums.
/🆑

---------

Co-authored-by: Lucy <lucy@absolucy.moe>
2026-05-13 12:37:56 +00:00
SmArtKarandGitHub 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
MrMelbertandGitHub e8d87d2578 Block two people cuffing to one item (#96050)
## About The Pull Request

Fixes #96042
Fixes #96041

Simply stops two people from cuffing to the same item
We could add support for this behavior later, but we'd need to sort out
how that behavior should work

## Changelog

🆑 Melbert
fix: Blocks two people cuffing to one item
/🆑
2026-05-12 08:28:36 +02:00
MrMelbertandGitHub 18947edfac Cuffing items to you now chains you to the item rather than give you nodrop (shields can be cuffed again) (#95991) 2026-05-09 20:54:17 +02:00
BloopandGitHub b3770614c1 Makes invisimins actually invisible to regular ghosts, plus qol improvements (#95856) 2026-05-05 10:00:22 -04:00
MrMelbertandGitHub cee225fecb Moves hair and eyes into standing overlays (#95781) 2026-05-04 22:50:36 +02:00
JacquerelandGitHub 79db8d75de Update hierophant club sprite (#95924) 2026-04-30 00:35:58 -04:00
tmyqlfpirandGitHub 901a1d4450 Add USB ports to emitters/temperature pumps/temperature machines (#95497)
## About The Pull Request

This PR adds USB functionality to temperature pumps, emitters and
temperature control unit machines.

<img width="1082" height="340" alt="working"
src="https://github.com/user-attachments/assets/25e40c17-33ab-4159-b431-b3ccbe83626d"
/>

### New USB Components

<img width="139" height="101" alt="emitter"
src="https://github.com/user-attachments/assets/66580351-6cca-4dfe-9de4-3813cf62678c"
/>

* Emitter
New exposed controls allow you to manually fire a single beam, and get
signals whenever it is toggled on/off/fired.
It doesn't allow a player to toggle it on/off (must be done physically).
ID locking the emitter will also lock out the ability to fire the
emitter via USB.

<img width="303" height="226" alt="temp pump"
src="https://github.com/user-attachments/assets/4d0e6758-d653-4ac1-a080-d8e31d64408d"
/>

* Temperature Pump
This works exactly the same as the other USB controlled pumps, with the
addition of setting the heat rate.

<img width="267" height="151" alt="temperature control"
src="https://github.com/user-attachments/assets/6fff5148-bd70-4a1c-9899-10c997279669"
/>

* Temperature Control Unit
The USB interface now allows this to be remotely turned off and on like
the other USB pump interfaces.

## Why It's Good For The Game

These three parts are crucial to engineering/atmos projects, and gives
experienced players more depth to toy with circuits.

## Changelog

🆑
add: Added USB interface to emitters, temperature pumps and temperature
control unit machines
/🆑
2026-04-29 16:52:55 +02:00
MrMelbertandGitHub aae24b1ab2 Sect of the Dream God (#95643)
## About The Pull Request

Adds a new chaplain sect, the sect of the Dream God

This sect gains favor from dreaming and blessing dreamers. 

Their blessing only works on sleeping mobs - hitting a sleeping mob with
your bible will cause it to start dreaming, and if it's already
dreaming, grant favor. Either way, the mob is healed.

For 0 favor, you can **Banish Nightmare** - offering a Nightmare's
corpse rewards favor for banishing bad dreams. If the Nightmare has a
heart, you are rewarded with a special **Sacred Heart** which heals you
while dreaming and sleeping. You can also offer a Nightmare's heart on
its own without the body attached.

For 0 favor, you can **Deaconize Dreamers** - you can deaconize up to 3
dreamers.

For 50 favor, you can have a **Dream Portent** - This rite immediately
makes you fall asleep, and grants you a dream related to something going
on in the round. It may provide insight into something you otherwise
don't know about. If you take damage, the effect ends early.

<img width="374" height="126" alt="image"
src="https://github.com/user-attachments/assets/7c4e12fe-8456-411c-9d39-691e4ac2312d"
/>

For 100 favor, you can **Dream Projection** - this rite allows you to
pick one of your deacons, and forces you to become an imaginary friend
of that deacon. For the duration of the effect you are asleep. If you
are woken up or take damage, the effect ends. If the deacon dies, the
effect ends early.

<img width="492" height="294" alt="image"
src="https://github.com/user-attachments/assets/4e2f6810-15cd-41af-a69f-daa6ddca671a"
/>

For 200 favor, you can give you and your followers **Dream Protection**
- While sleeping and dreaming all damage taken is reduced.

For 200 favor, you can start a **Slumber Party** - All nearby mobs (who
can't block magic and some other asterisks) fall asleep and share a
dream. This form of sleep heals the mob rapidly (also heals holy people
even more).

## Why It's Good For The Game

A new sect for chaplains to sink their teeth into. This one brings a
unique niche, focused around sleeping and fortune telling.

## Changelog

🆑 Melbert
add: Adds the Sect of the Dream God, a new option for chaplains.
/🆑
2026-04-29 00:01:56 +01:00
MrMelbertandGitHub c9bcef2197 Spacers get pos mood for achieving nograv on planets (#95818)
## About The Pull Request

Spacers who manage to get nograv on a planet are given a positive
moodlet, and are considered in space for their buffs/debuffs

## Why It's Good For The Game

I don't remember if I was opposed to this in the past or why I didn't
make it work this way in the first place.
It's sensible that, if you manage to disable your own gravity, all of
the negative effects (which are tied to you feeling heavy gravity) would
be lifted.

## Changelog

🆑 Melbert
add: Spacers who manage to get nograv while on a planet are given a
positive moodlet, and are considered in space for the purpose of their
buffs/debuffs
/🆑
2026-04-22 13:08:44 +02:00
SmArtKarandGitHub d68efbbf45 Fixes transforming items getting their force incorrectly modified when metalgenned multiple times (#95739)
## About The Pull Request

Transforming weapons could change their sharpness which would break
material force modification as materials modify the force differently
based on item sharpness. Also the force was hard reset every time you
switched it on or off, which would also break the math.
I've rewritten the transforming component to preserve force and
sharpness, and account for different sharpness of the item when switched
on/off. Additionally, I've updated the two-handed component to use the
new system to make it easier to work with/less prone to breaking.

## Why It's Good For The Game

<img width="557" height="218" alt="image"
src="https://github.com/user-attachments/assets/59cfb21a-e97e-4843-9c11-c87ed32384a9"
/>

## Changelog
🆑
fix: Transforming items like eswords should no longer get absurd stats
when metalgenned multiple times in a row
/🆑
2026-04-19 22:58:37 +01:00
JacquerelandGitHub 039a0a8180 Wizard Wand blind box & wand bandolier (#95563)
## About The Pull Request


![dreamseeker_vQmIqvqtUo](https://github.com/user-attachments/assets/462d95f8-7447-45e2-90a8-9111fa07fe11)

This PR adds 16 more wands to the game, try and guess what they all do!
I finished coding this PR 6 weeks ago but it turns out I had to sprite
16 wands after that before I could PR it.

<details>

**Wand of Animation**- It's like the Staff of Animation but doesn't
recharge itself, obviously.
**Rod of Babel**- Grants victims a new random spoken language and then
removes all of their other languages.
**Shearing Rod**- It renders you bald. If you are covering your hair
with a helmet, it pops the helmet off (possibly its most useful effect).
If you're already bald, your bald head will shine brightly and blind
nearby people.
**Party Wand**- Fires projectiles that are incredibly alcoholic. Two of
them will destroy the livers of most targets and kill them (although it
gives them a good leadup time to get that fixed before dying of alcohol
toxicity), so try one at a time if you're just there to have fun.
**Wand of Ice**- Freezes people temporarily, making them really cold and
unable to move. It also spawns slippery ice on impacted tiles.
**Wand of Chaos**- Forces targets to hallucinate from a curated list of
hallucinations. It looks and is named sort of like the Staff of Chaos
just in the hopes that people are more likely to believe that the wizard
did actually just instantly kill them, set them on fire, or turn them
into a demon. Even if it doesn't, a lot of these cause you to stop
moving or be temporarily knocked down or in some other way disoriented.
**Lifting Rod**- Removes gravity from a target for two minutes, which
funcionally immobilises them if they're in the middle of a room or you
can use on yourself to cross big pits.
**Rod of Compassion**- Heals you and your target a little bit, and also
gives you both Pacifism for 30 seconds. This gives you time to talk out
your problems, or deliver a monologue.
**Wand of Snacking**- Turns things into pizza. If fired at a mob, will
put some pizza in their hands and force them to start eating it.
Unlikely to be deadly, but it might spawn mouldy pizza, a food they are
allergic to, ethereal battery acid pizza, or pizza which dismembers you.
**Pestilent Wand**- Confers a transmissible plague which causes you to
periodically cough out vermin of various degrees of danger and hostility
depending on disease level, treated via traditional methods of exorcism.
**Wand of Pratfalls**- Slips and pies the target as well as creating
small amounts of lube foam.
**Wand of Rebellion**- Removes a limb from the target, then animates
that limb. Stop hitting yourself.
**Rod of Repulsion**- Throws things you shoot away from you.
**Switching Rod**- Swap places with the hit atom, as with the spell
Swap.
**Restraining Rod**- Summons a tentacle from the ground to grasp the
target, immobilising them for 20 seconds or until someone helps them.
**Wand of Zapping**- Briefly locks up the target's nerves with lightning
(it's secretly a classic ss13 taser).

</details>

They are available to wizards via the new option "Wand Assortment
(Bargain Bin)" which only costs a single spellbook point, but gives you
an assortment of 6 wands picked at random from this list of new wands
and some of the existing ones.

If you buy two or more sets of wands (and are wearing the wand belt from
the first one) then instead of spawning wands in a belt it will spawn
them in a bandolier, which fits into your backpack or can be worn on a
suit slot.
Wand bandoliers in a suit slot will automatically replace an empty wand
you try to fire with a wand that still has ammo in it.

Several of these wands' projectiles are now also possibilities from
firing the Staff of Chaos (making it more chaotic) and some of them also
have their own Magicarp types.

Also I made it so that if you animate an animating weapon then it
focuses on animating more things instead of shooting its animating bolts
at mobs that are already animate. I could do this for more specialty
wands too at some point (door wand projectiles don't exactly hurt
anyone) but if I do that it'll probably be in a different PR.

## Why It's Good For The Game

A good number of these wands come from a downstream antagonist that's
essentially a lower-threat wizard. I thought these were all fun or funny
effects to have in the game upstream but also not ones that people would
typically want to buy as a dedicated spell (or alternately, that would
be pretty good as a dedicated spell but quite boring), so instead
they're limited use spells that you get in bulk for cheap.
I didn't think we'd really want to bulk up the spellbook with several
different kinds of themed bundle though (and frankly, they don't share
themes), so it's a blind box instead.
The bandolier was added to compensate people for buying random wands
multiple times, so they can have more of a wand-based playstyle.
Now you can spend all of your points on 60 wands (maybe more if you take
the gambling trait...) and be a sort of wizard cowboy, or split them
among your apprentices, or just leave them everywhere like candy and see
whether the crew fuck things up for themselves with their new power I
guess.

## Changelog

🆑
add: Adds 16 more wizard wands to the game, which wizards can buy
cheaply but randomly, or are available via Summon Magic.
add: If a wizard buys more than one set of wands they will receive a
"Wand Bandolier" holster which fits in the backpack or, if worn in the
suit slot, will automatically exchange an expended wand for a full one.
balance: Staffs (and wands) of animation that are animated will try to
animate other objects instead of firing at living mobs, which are
already animated.
balance: Animating a wand of nothing will turn it into a wand of
animation (and animate it).
balance: The staff of chaos can now do more things.
balance: Magicarp now additionally come in Babbling, Frigid, Quantum,
and Weightless varieties. Collect them all!
/🆑
2026-04-20 09:31:55 +12:00
SmArtKarandGitHub 3454171051 Visual and balance changes to style meters (#95631)
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request

Style HUD now renders the events top to bottom rather than bottom to
top, meaning that new events appear at the top which is more intuitive
than what we have now.
``ROCK MINED`` action has been removed as it filled pretty much the
entire list whenever you were digging, or even fighting with an AOE tool
(PKA/crusher with worm trophy) and was an extremely easy way to
constantly keep SPACED! rank up without doing anything.
A new 125/250/375 ``VENT TAPPED`` action has been added, given to all
surrounding miners upon vent completion and based on its richness (and
thus, difficulty)
Both megafauna kills and vent taps now give permanent point gain
multipliers, +10% for megafauna kills and +5/10/15% for vents of varying
sizes.

## Why It's Good For The Game

Bottom-to-top listing of events was extremely unintuitive and hard to
read.
``ROCK MINED`` kept anyone with mining AOE at constant SPACED! rank and
cleared all other actions from the queue as soon as the user fired their
PKA once, which isn't ideal
Vent taps are quite difficult and are worthy of being acknowledged by
style meter in my opinion, and both they and megafauna kills are
somewhat permanent achievements fitting of a bigger boon than an
extremely short-lived point boost (350 for megafauna takes about 50
seconds to completely decay if you don't have any other point gains,
otherwise relatively it decays even faster as the speed ramps up the
more points you have)

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

🆑
add: Style meters now award you for clearing vents based on vent
richness and difficulty
balance: Megafauna kills and vent taps grant a permanent 10% / 5/10/15%
(based on difficulty) permanent style boost respectively
del: Style meters no longer grant points for mining empty rocks
qol: Style meter actions now list top-to-bottom rather than
bottom-to-top
/🆑

<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
2026-04-16 16:05:27 +00:00
SmArtKarandGitHub 3103f9c413 Adds a Tactical IFF Visor and slightly refactors eye rendering (#95547)
## About The Pull Request

A new cybernetic eye implant, the tactical IFF visor, has been added to
the game, available in the combat implants research node. Its main
features are a cool LED display, dynamic color correction to make
distinguishing important objects easier, and inbuilt IFF systems capable
of distinguishing and highlighting allies and potential threats. They
also give flash/welding protection and mild night-vision capabilities.

However, this comes at a downside of making the user completely unable
to distinguish appearances or voices, or even examine others. Everyone
will simply show up as Unknown and be completely covered in static, bar
the threat assessment outline. Examining will only display their threat
status according to threat settings in the visor.

The parameters for threat assessment (both ID access and security
flag-based), as well as the visor display, can be configured by the user
at any time.

When emagged, the visor will instead completely hide and mute all mobs
except the user themselves, leaving them completely "alone" on the
station.

Deathsquads get an unmodifiable version, configured to treat anyone but
CentCom personnel as hostiles.
Settings can also be adjusted before installation with a multitool, and
locked using a screwdriver, preventing users from accessing them when
installed.

---

Eye rendering has been slightly refactored in order to support the
monovisor, as well as to get rid of duplicate code (and missing
features) on dismembered heads. Also moth eyes once again should block
emissives properly.

## Why It's Good For The Game

New content for both gameplay and roleplay, and fits deathsquad's
purpose very well.
2026-04-13 20:58:40 -05:00
SmArtKarandGitHub 93ea8085cb Datumizes material effects, slots, and material spears (#95341) 2026-04-11 09:15:07 +10:00
0f95e041e2 Disjointed eyes such as AI eyes, advanced camera consoles, & looking up properly show HUDs (#95526)
## About The Pull Request

Revival of #92846, without which I would have no idea how to do this

Adds a new proc within `/datum/atom_hud` that changes what Z level huds
an atom is seeing without changing what Z level that atom's own hud
exists on, and hooks it into the new `COMSIG_LIVING_LOOK_Z_CHANGE`, sent
by `/mob/living/on_look_z_level_change()`, which is called when a mob
looks up, stops looking up(not when it looks down, it doesn't need to),
or by any z level change done by an `/eye/` that's just the window for
an actual mob(camera consoles, AI eye).

## Why It's Good For The Game

fixes #92370
fixes #92622
fixes the same HUD issue with looking up a floor as any other mob

## Changelog
🆑

fix: HUDs are now visible when looking up a floor, as well as by AIS and
camera consoles on lower floors.

/🆑

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
2026-04-03 15:16:17 +01:00