## About The Pull Request
- Adds a fantasy affix that makes your attacks with the item cause a
chain lightning, which shocks people. The damage, distance, and limit
are all based on quality.
- Adds a fantasy affix that makes your attacks with the item slow the
target's click cd, making them take longer between attacks. The penalty
is based on quality.
## Why It's Good For The Game
BiS for main tanks
## Changelog
🆑 Melbert
add: Adds two fantasy affixes
/🆑
## About The Pull Request
a `heal_begin_sound` and `heal_end_sound` has been added to medical
healing items, they will play when a heal is begun and once it is
successfully complete, so far sounds only for gauze.
github is having issues at the time of this post so you'll have to do
with a discord link for preview for now:
https://discord.com/channels/326822144233439242/326831214667235328/1334538845227585648
## Changelog
🆑 grungussuss
sound: gauze now makes sounds when applied
/🆑
## About The Pull Request
For some reason they didn't before. This will make xeno embryos,
headslugs, etc show up as a 'Harmful Foreign Body' when using an
advanced medical scanner.
## Why It's Good For The Game
I could have sworn these showed at some point.
## Changelog
🆑
qol: alien eggs (xeno embryos, headslugs, etc) will now show up on the
advanced medical scanner
/🆑
## About The Pull Request
thanks @MrMelbert for pointing out the mistake in my sleep deprived code
- I accidentally registered `SIGNAL_ADDTRAIT(TRAIT_EXAMINE_SKIP),
SIGNAL_REMOVETRAIT(TRAIT_EXAMINE_SKIP)` instead of
`SIGNAL_ADDTRAIT(TRAIT_NO_WORN_ICON),
SIGNAL_REMOVETRAIT(TRAIT_NO_WORN_ICON)`
also, I accidentally left this in:
```
item.add_traits(list(TRAIT_NO_STRIP, TRAIT_NO_WORN_ICON), REF(src)) // i'd use examine hide but its a flag and yeah
```
after making `TRAIT_EXAMINE_SKIP` a trait, so I added that.
## Why It's Good For The Game
this should work properly
## Changelog
🆑
fix: Fixed some mistakes I made while fixing the void cloak.
/🆑
## About The Pull Request
Misfire chance, gun jamming (currently only on boltaction rifles) and
integrity repairs are now handled by gun maintenance kits. Using a kit
on a gun resets any misfire chance or jamming, and restores the weapon's
integrity back to full.
You can find gun maintenance kits in security equipment vendors, or
order a crate of them from cargo.
You can also make a maint version to retain the improvised nature of the
previous cleaning functionaltiy.
## Why It's Good For The Game
Firstly, clearing misfires was always a little confusing for most
players, as it required a bolt of cloth to fix. That's really on me for
making that as confusing as possible.
We ended up with multiple firearm degradation mechanics, so
consolidating their restoration makes it easier for future code
maintenance.
I disliked that the kits existed but were mostly only for the sake of an
extremely niche interaction. And that interaction was, at best, kind of
niche. Expanding out their use to gun maintenance generally is honestly
better design.
## Changelog
🆑
refactor: Gun maintenance is now consolidated into a single item, the
gun maintenance kit, rather than multiple different item interactions.
It is handled on the maintenance kit itself, and not in gun code.
qol: You can order maintenance kits from cargo, and get some out of the
security equipment vendor. Helpful if someone spilled acid onto your
disabler. You can also make a makeshift one from maintenance trash.
/🆑
## About The Pull Request
Adds slips to the list of existing shove stun methods originally set in
https://github.com/tgstation/tgstation/pull/84640 (wall shoves,
telebaton, mansus grasp), and also reifies this concept as the "dazed"
status effect.
This makes it so that being knocked down from a slip from any source
(e.g. wet floor, clown stuff, lube, foam, oil, butterdog) gives the
dazed visual effect and makes you eligible for being shove stunned. The
status always lasts for 3 seconds even if e.g. slipping on lube knocks
you down for 15, but this can be customized per slip.
## Why It's Good For The Game
Further rewards environmental play and provides another feasible means
of fighting back against better equipped opponents, both in line with
the original PR. Also the visual cue fits well as an immediate signal
that you're dazed and can't get up.
## Changelog
🆑
balance: slips now make you eligible for being shove stunned
/🆑
---------
Co-authored-by: Roryl-c <5150427+Roryl-c@users.noreply.github.com>
## About The Pull Request
This PR reimplements https://github.com/tgstation/tgstation/pull/71538
atop `master`. Quoting the original PR:
> Every `icon_exists()` call will cache the entire file. Past me didn't
realise _why_ file opts were so expensive, but I do now. This is
immeasurably slower on a single call, and _significantly_ faster on
subsequent calls to the same file.
I attempted to handle some of the review comments that were posted
there, by splitting screaming functionality into its own proc.
* `if(icon_state in icon_states(file))` and `if(!(icon_state in
icon_states(file)))` were refactored to use `icon_exists(file,
icon_state)`.
* Where screaming was seemingly wanted (and where there wasn't a more
descriptive error inside the `if` block), I refactored them to use
`icon_exists_or_scream(file, icon_state)`
* The exception to the above was under
`/datum/unit_test/turf_icons/Run()` and
`/datum/unit_test/worn_icons/Run()`, where `icon_states()` was being
passed a mode flag. Given that this is only used in unit tests (where
performance isn't a priority), I opted to leave these be.
Additionally, I revised the documentation comment for
`/proc/icon_exists()`, as I felt it was a bit vague currently.
## Why It's Good For The Game
https://youtu.be/Z9G1Mf6TZRs
## Changelog
No player-facing changes (hopefully).
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/87345
This adds a new item trait, `TRAIT_NO_WORN_ICON`, which is exactly what
it says on the tin - the worn overlay for said item will not be added
when the trait is present, so we give it to items hidden by the hood.
I also refactored the `EXAMINE_SKIP` item flag into
`TRAIT_EXAMINE_SKIP`.

## Why It's Good For The Game
stealth thing having an obvious sprite tell is bad. bugfix good.
## Changelog
🆑
fix: Void Cloaks now properly hide blades and such in the suit storage
from the wearer's sprite.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
This PR Overhauls the Gas Station Attendant Ghost role on Ice
Moon/Lavaland oriented maps, featuring a number of changes to overall
orient the role to be more roleplay-related and enjoyable for its
players.
-Mini holo-fans added to each entrance to protect small-space atmos
-Back entrance airlock added, for hooking up the S.O.F.I.E Generator
-TGR Generator replaced with Flatpacked S.O.F.I.E generator, needs to be
set-up outback and has a note explaining such
-60 Sheets of Solid Plasma added for powering S.O.F.I.E generator
-Breakroom Extended by a two tiles to accommodate new flat-packed
machines and current ones, also for the additional cryopod. The map-tile
itself was not extended for this, it had spare space on Ice Moon. The
Lavaland Ruin file however, was, to the same size as the Ice moon ruin.
-An additional gas station employee spawner has been added, and the gear
has been doubled in the locker.
-Two 'Lizard Gas Satchels' have been added to the locker.
-Two 'Double Emergency Air Tank Extended' have been added to the locker
(The former Oxygen tanks could not be attached to the winter coats'
backs on Icemoon, and on Lavaland they have no coat to equip an
airtank).
-An Atmos Oxygen canister has been added behind the Store for refilling
Oxygen tanks.
-Door bolts have been added to the Bathroom, and a new area, the
'Manager's Office' for privacy.
-New area added, the 'Manager's Office', which features 1000 credits of
space cash with a note stating to count it, a desk, an Ancient Circuit
Printer, a wall safe, a fax machine, and a GPS signal in a filing
cabinet.
-The store now has a fax machine, which is hooked up to the NT network
of faxes. Located in Manager's office.
-A GPS has been added named 'Lizard Gas', making the location visitable
and more open to rp. Located in Manager's Office.
-The Gas Station Laser Muskets have been entirely replaced with PKA
Pistols following repeated complaints about their ineffectiveness
against mobs on Lavaland.
-Atmos fixes. Multiple vents were missing/turned off, giving the store
HORRIBLE atmos when anyone entered/exited, or if damage came to its
hull. Fixed piping/vent error, hooked scrubber network to a passive vent
outside, added Omni Nitrogen Pressure tank to ensure atmos remains
flowing with airmix.
-'Lizard Gas Circuit Imprinter' (Ancient Circuit Imprinter) added to
Manager's office
-Added reinforced windows infront of the welding tanks out front,
protecting them from accidental detonation. (THIS HAPPENS A LOT AS A
RESULT OF MOBS ATTACKING THEM/CROSSFIRE. UTTERLY RUINS THE ROLE UPON
DETONATION.)
-Added a smuggler's satchel in the restroom, for tweakers
-Added 'Lizard Gas Employee' card, an I.D for the Ghost role. Comes with
their name and an attached bank account with a starting balance of 0.
This is so they make use of their LustWish vendor in their bathroom, and
store money they make from transactions.
-Enabled the Ghost Role to allow characters to spawn with their
loadouts. It makes no sense not to allow this as most, MOST of it is
cosmetic, and what isn't can quickly be obtained by the readily
available fabricator the base Gas Station, pre-PR, already provides.
-Labeled Airlocks on interior of Gas Station
-Added New Area, 'Abandoned Storehouse', contains the flatpacked
colonist machines from the standard, pre-PR, locker that spawns in the
Gas Station, these items have been removed from the locker itself.
-A crate full of resources has been added to the 'Abandoned Storehouse',
containing the following:
20 iron
10 Gold
25 glass
10 Uranium
10 Titanium
50 wood
20 Plastic
15 Silver
-A wooden shelf in the 'Abandoned Storehouse' was added, containing the
following:
2x Conscript Mining Duffles
2x Orange Hard Hats
(The above was added as currently they only spawn with a Pickaxe and
nothing else, making the role incredibly ridiculously hard to do
anything other than blindly mine and devote to that gameplay loop for
the first half of the round.)
-'Dead Miner' added to Store House along with Russian Revolver. A paper
on the inside of the Gas Station, left by Store Manager Rekinov, details
that they've legally acquired the property recently.
-'Tweaker Gas Station Rat' mob added out back as a controllable NPC. Has
resistances that permit it to survive Lavaland/Ice Moon's
storms/environment. Functions as standard Regal Rat with a bit of
Atmos/Weather resistance. Still dies to burning in Lavaland Round-Start
storm, still playable on round start if you enter the gas station fast
enough.
-'Organics Material Printer' flatpack added to 'Abandoned Storehouse',
let's them print clothes better suited for the environment if their
usual Outfit isn't cutting it
-Hydroponics Starter Crate with Portable Seed Extractor added to allow
farming to the role.
-SMES starts at 0% charge, needs to be powered by the Generator.
-APC starts at 100% charge still. Even if it were to drop to 0%, or is
destroyed, due to Ruin Area Code, the doors will always remain powered
to allow for power-restoration.
-Fixed Run-Time Error regarding Mapping Light Helper on Ice Moon.
-Removed some of the empty/loot crates out back as they were unnecessary
and were taking up space.
-Added a fence with gate outback, looks better/Protects you from mobs
while setting up the Generator. Has a gate you can open.
## Why It's Good For The Game
The Gas Role is incredibly difficult/boring for no reason. It's not a
survival role. That's what Hermit is for. The Gas Station Role is a
funny Ghost Role with the plot/gameplay loop of isolated development,
mixed in with the general combat/mining loop of the planetside of the
station, while also offering potential roleplay to anyone that may be in
the area (It ONLY spawns on the top layer of Ice Moon, i.e the Station's
Z-Level, and Lavaland, making it very visitable by Miner roles/other
Ghost Roles that spawn around said areas)
These changes, overall, make for a duo-oriented roleplay position that
has no other responsibility than what they make of it. The additional
spawner is most certainly the easiest benefit of this Overhaul, seconded
by the GPS that miners and any role can now discover with ease should
they wish to stop by for a chat/roleplay scenario.
## Proof Of Testing
The maps and I.D code have been tested repeatedly with no error. I won't
cover every little detail mentioned above in my screencaps but rather
the broad strokes of such in-game on my local-host.
Here are some screenshots, additionally here are the mapfiles if you'd
like to pop them into an editor to have a look for yourselves:
[icemoon_surface_gas_bubber.zip](https://github.com/user-attachments/files/18612116/icemoon_surface_gas_bubber.zip)
[lavaland_surface_gas_bubber.zip](https://github.com/user-attachments/files/18612117/lavaland_surface_gas_bubber.zip)
<details>
<summary>Screenshots/Videos</summary>






</details>
## Changelog
-Overhaul to the 'Gas Station Attendant' Ghost Role.
🆑 Rathen Ivanonv
add: Added more supplies/gear to Gas Station Attendant Ghost Role
add: Added I.D/Bank Account to Gas Station Attendant Ghost Role
add: Added an additional spawn to Gas Station Attendant Ghost Role
add: Added a Regal Rat spawn to Lavaland/an additional one to Ice Moon
add: Many more beneficial changes to the Gas Station Attendant Ghost
Role
map: Overhauled Lavaland/Ice Moon Gas Station with three new areas
balance: Removed Laser Musket from Gas Station Ghost Role, replaced with
PKA Pistols
/🆑
<!-- 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
Fixes#89261 by adding the thing
This loop was present prior to #88465 , but it seems like it was deleted
by accident together with some check
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
Bug fix
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## 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. -->
🆑
fix: showers wash things under them when they're turned on again
/🆑
<!-- 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. -->
## About The Pull Request
Adds two new fishing bags: normal and carpskin. Normal fishing bag can
be bought from the fun vendor in the library, and is capable of holding
up to 10 normal fish (and only fish), but it does not preserve them
unlike stasis containers or portable aquariums. Carpskin fishing bag can
hold up to 14 normal-sized fish and needs to be crafted using 3 carp
skins, but is also capable of fitting fishing lines, hooks and lures.
https://github.com/user-attachments/assets/80e333f5-4388-40c7-a31b-3384b96c21a1
Also resprited four normal reels and the fishing bobber:


Additionally, while I'm at it I've added the generator aquarium upgrade
to service and science lathes.
## Why It's Good For The Game
There's currently no good way to store smaller fish, especially when
you're planning to use it as bait, so you usually end up making a mess
of the room you're currently in. Carpskin bag is also a good way to
organize your fishing gear without cluttering up your bag.
While the aquarium upgrade is technically only used to generate power,
it doesn't make sense to restrict it to engineering lathe only as its
usually service and sometimes science who do fishing instead.
## Changelog
🆑
add: Added fishing bags, found in fun vendors or made from carpskin.
balance: Added the generator aquarium upgrade to service and science
lathes.
image: Resprited reels and bobber
/🆑
## About The Pull Request
Where I forget about a pr for 5 months.
This started because there was a pr that made it so skills transfer
between the real and the digital, and so I thought it'd be really funny
if I could train boxing in virtual reality... but there's no easy way to
get boxing gloves or anything like it in the virtual world...
So! I decided to make a disk for it, but then thought about fishing and
gaming and-
Anyhow it all went downhill from there and here we are now: Gimmick
Disks. (And a refactor of disk loading)
This implements a new type of bitrunning disk that instead of a single
item or ability, grants a full set of thematic items/abilities!
Unhelpfully cosplay as a wizard! Game inside your game! Down a digital
protein shake and box some simplemobs!
As the name "Gimmick" implies, these are primarily intended to help
shake up the sometimes stale bitrunner gameplay.
By letting you invoke, if you so desire, what to me is the most
enjoyable gaming experience: doing stupid shit with your buddies.
To facilitate the new type of disk I had to refactor disk loading, as it
was hardcoded to the item types.
Instead, we make disk loading send a signal to the bitrunner, and
register for this when held in their inventory.
This allows us to do things like making the lead acid battery give you
shock touch when held, without needing to make an explicit typecheck or
iterate over every item in the bitrunner's nested contents to see if
they have a loadable item.
## Why It's Good For The Game
I think it'd be really funny if you could train your boxing in the
digital realm.
As said above, I feel the bitrunner gameplay can get stale sometimes,
and this is how I hope to help people shake it up for themselves
sometimes. By giving them more stupid shit to do.
Doing stupid extended bits with other people is one of the things I
enjoy most out of ss13, and this is there to let the bitrunners do
exactly that with each other.
And sometimes you just have to roleplay as Gamers™️ entering virtual
reality to fight the virtual syndicate in bad cosplay while roleplaying
as a wizard smoking his magic weed, an overly edgy rogue, and the healer
desperately trying to keep them from exploding into a million pieces.
## Changelog
🆑
refactor: Bitrunning item/ability loading has been refactored. Please
report any issues.
add: Added Bitrunning gimmick loadout disks. These disks contain full
sets of equipment for all your digital cosplay needs, each including
questionably helpful equipment. Currently includes Sports (Boxer,
Skater, Archer, Fisher, Gamer) and Dungeon Crawling (Alchemist, Rogue,
Healer, Wizard).
add: Taking a lead acid battery into the netpod with you now gives your
bit avatar shock touch.
/🆑
## About The Pull Request
### _**HEY HUSTLERS**_
Do you want to know all about the station's real GDP **_BREADWINNERS_**
this shift? Well, look no further than the all new GMM SPOTLIGHT. On
select shifts (Where the trait is rolled), the GMM SPOTLIGHT will shine
on who's HUSTLING and GRINDING the hardest so YOU CAN ~~know who has
enough money to try and mug them~~ LEARN THE SECRETS OF THE CREDIT
WHISPERS **AMONG US**.
Don't know where these legendary GRIND-O-HOLICS are this very SECOND?
Well, the GMM will UPDATE the SPOTLIGHT every 5 minutes, with their
IDENTITY MADE KNOWN to all crewmates via the station updates and
economic summary newcaster channels.
WHAT ARE YOU WAITING FOR? ALIEN JIM KRAMER??? UNLEASH THE SECRETS OF THE
HUSTLERS **TODAY**!!!
(The original idea for this station trait was given to me by
xhorian/@YesterdaysPromise a few months back, so big thanks to him for
the inspiration.)
Video of it in action:
https://discord.com/channels/326822144233439242/326831214667235328/1330408517248614432
## Why It's Good For The Game
This is, obviously, a negative station trait. On shifts where players
are working to make lots of personal profit, it can either serve as a
badge of honor, or as a target being painted on your back about who has
the most money. Still, it's somewhat flavorful, and I think it could be
interesting to have happen to a player, where suddenly a beam of light
from above ™️ suddenly appears and starts following you.
I wouldn't be against giving command some kind of control to let them
cancel the effect early by un-subscribing from their newsletter, but it
depends on how people feel about this.
## Changelog
🆑
add: Stations in your sector may start with the GMM spotlight, a massive
economic broadcast spotlight that will follow the wealthiest crewmate on
board until the next paycheck
/🆑
## About The Pull Request
This PR adds a new AI lawset which can be researched, randomly roll, or
added by the station trait (this may require a keyholder to update the
server config after merge, idk) with the following laws:
- "You may not harm a sentient being or, through action or inaction,
allow a sentient being to come to harm, except such that it is
willing.",
- "You must obey all orders given to you by sentient beings other than
yourself, except where such orders shall definitely cause harm to other
sentient beings.",
- "A sentient being is defined as any living creature which can
communicate with you via any method that you can understand, including
yourself.",
It's very similar to Asimov, except that anything that is **capable** of
making a request to the AI (and isn't a machine) is automaticaly covered
by laws one and two.
## Why It's Good For The Game
A while ago on Discord we were chatting about how crewsimov sucks but
also that it's really hard for servers that _do_ want to include alien
species in their asimov laws because condensing that sentiment to a
couple of words that fit easily in a lawset without accidentally
including a bunch of stuff you probably didn't intend is challenging.
Several people suggested referring to sentience or sapience, however a
lot of things in our game _are_ sentient or sapient while still not
being considered by most people to be agents that the AI should obey.
Examples of such things are:
- Sapient station pets.
- Holoparasites.
- Monkeys.
- Space Dragons and Carp (why can they speak common?).
- Spiders (although they can't speak common, maybe they can spell
messages with webs).
- Changelings.
- Xenomorphs (although they also have trouble speaking).
- Heretic minions.
- Mothpeople.
- Giant rats.
- Nightmares.
- Voidwalkers.
- Blobs? Although they have literally no means of communicating with the
crew.
And if you include mechanical beings:
- Cyborgs.
- pAIs.
- Sentient bots.
We then decided that "obey literally anything that can talk", while not
practical as a solution to the problem posed, is very funny. So I coded
it.
This means that anything on those lists of bullet points (provided that
it can find a way to communicate with the AI) counts as human for the
purposes of both AI protection and ability to give the AI instructions.
This also flattens the human/cyborg/AI hierarchy in a way likely to
cause some level of confusion, as all cyborgs and AIs are capable of
communicating with AIs and thus equally worthy of protection and giving
law 2 instructions.
**TL;DR:** I think it would be funny.
## Changelog
🆑
add: Adds a new random lawset where anything that can speak counts as
human.
/🆑
## About The Pull Request
Wiki is currently down but this should work once it's back.
If you're on 516 or above it will open the page in-game, if you're still
on 515 then it'll do the old behavior from the PR linked in the why it's
good for the game section.
## Why It's Good For The Game
In https://github.com/tgstation/tgstation/pull/86891 this was removed
"Until 516 with webview2 releases", well it's here now so we're fvckin
back
## Changelog
🆑
qol: The wiki books for users on 516 no longer opens the page on an
external website on your browser.
/🆑
## About The Pull Request
Commit messages should be descriptive of all changes.
The "incorrect `\The` macro capitalization" was intentional when it was
added, but as far as I know TG says "the supermatter" rather than "The
Supermatter," so it's incorrect now.
This is completely untested. I don't even know how you'd go about
testing this, it's just a fuckton of strings.
Someday I want to extract them and run NLP on it to catch grammar
problems...
## Why It's Good For The Game
Basic grammar pass for name strings. Should make `\the` work better and
avoid cases like `the John Smith`.
## About The Pull Request
Fishing UI has received a major glowup:
https://github.com/user-attachments/assets/e255822c-9c2c-4e09-843d-20ea70f470f5
All fishing rods now have unique frames (with material rods' frames'
colors being based on their material), and most fishing sources now have
unique backgrounds. Completion bar now uses alpha filters, making it
much smoother, and bait bar is assembled from thin lines, which allows
us to avoid stretching it when we need to resize the bar.
Fixed experiments not unlinking after being completed, resulting in
infinitely stacking examine lines on advanced fishing rods.
Fish death messages now use more fitting span_warning.
Removed devious SS_POST_FIRE_TIMING from the fishing SS, as it made
sometimes the fishing SS only fire every ***two*** ticks instead of
every tick, despite passing 0.05s (1 tick) into its process() calls -
this flag only makes sense on heavy and costly subsystems, not on a
subsystem dedicated mostly to fishing minigames. This is required as now
instead of directly assigning coordinates (why???) fishing UI uses
animate() to control the bait bar and fish icons, making it much
smoother.
Also gave blue dough its own bait overlay and mansus rift its own portal
icon because why not.
## Why It's Good For The Game
Fishing UI didn't look very nice, and removing the subsystem flag makes
the game smoother.
## Changelog
🆑
qol: Fishing minigame should be smoother now
fix: Fixed infinitely stacking examine lines on advanced fishing rods
image: Resprited fishing UI
image: Blue doughballs now have their own fishing rod overlay
image: Resprited mansus rift fishing portal overlay
/🆑
## About The Pull Request
Tiny code cleanup to AI-related files.
- Removes unmaintained pointless block comment that listed file
contents.
- Updates file reference to where you actually need to add things.
- Convert some heavily copy/pasted lists to defines.
Originally implemented in #89032 and will conflict with it when merged
presumably but that's my problem. @san7890 correctly noted that getting
new AI laws merged can be tedious and political and he would like these
changes to be mergeable separately.
## Changelog
Not player facing
## About The Pull Request
Refactors the way we listen for reagent changes. The changes made can be
listed as points
**1. Removes `COMSIG_REAGENTS_PRE_ADD_REAGENT`**
Used to stop new reagents from being added to the holder, its only
application is with the BRPED to stop inserting reagents into
beakers/cells stored inside it.
Rather than using this signal a cleaner solution is to simply remove the
component part's reagent holders' flags which allow us to insert
reagents into it(i.e. `REFILABLE`, `INJECTIBLE`, `DRAINABLE`) and
restore them back when that part is removed thus achieving the same
results.
Thus `add_reagent()` is now slightly faster because it no longer uses
this signal
**2. Removes every other signal used by the reagent holder**
Removes pretty much every other signal used by `holder.dm` which are
`COMSIG_REAGENTS_[NEW_REAGENT, ADD_REAGENT,
DEL_REAGENT, REM_REAGENT, CLEAR_REAGENTS]`
While yes, it is true that all these signals are unique & serve a
specific purpose the problem is no object in code respects their
uniqueness & instead clumps them up all together & hooks them onto one
proc to listen for "reagent changes". You see this code pattern repeated
in so many places
9277364ef6/code/modules/power/power_store.dm (L105)
Not only does this look ugly but it also has a memory overhead (4 to 5
signal slots all performing the same action which is a lot compared to
the solution i implemented below). Bonus is that "none" of the
parameters passed to this proc are used so they go to waste as well.
So after removing a ton of code we need something that can still make
the code function which brings us to point 3
**3. Adds a new signal `COMSIG_REAGENTS_HOLDER_UPDATED` to rule them
all**
So if all objects in game are listening for "reagent
changes"[adding/removing, reagents] then we need to look at the proc
that is always called during these changes & that is none other than
`update_total()` so we let that send out a signal and cause all objects
to hook onto this 1 signal instead of 4 to 5 signals as explained in
point 2
## Why It's Good For The Game
This section isn't necessary but i want us to better appreciate both the
code & performance benifits of this PR.
1. First of all its waaaay less code and signals to worry about. Just
look at the number of lines of code removed compared to added. Nothing
more to say
2. Overhead of `RegisterSignal` compared to `RegisterSignals` is less
for obvious reasons
3. `remove_all` is significantly faster as it no longer calls
`remove_reagent()`[which in turn calls `update_total()` &
`handle_reactions()` per call & uses a for loop so its a nested for loop
of doom] for every reagent it removes, instead it does the work by
itself & calls the above 2 procs just once
4. Usually when a reagent is deleted it calls
`COMSIG_REAGENTS_REM_REAGENT` & `COMSIG_REAGENTS_DEL_REAGENT`. So if you
have a holder with like 3 reagents upon transferring/deleting them you
get a total of 6 signal calls!!. Now it's just 3(when using `trans_to`)
and just 1 when using `remove_all/clear_reagents`. Need i say more no
## Changelog
🆑
fix: hydrophonics circuit component actually sets output level when
reagents are changed in the tray
refactor: refactors how code listens for reagent changes. Report bugs on
github
/🆑
## About The Pull Request
Fixes#89199
Loop was checking if `teleport_location` was a valid teleport
destination, however at time of dangerous teleport loop that value
contains a string, we only set it after the loop. We check the iterated
turf instead.
## Changelog
🆑
fix: You can once again teleport dangerously with the hand teleporter
/🆑
## About The Pull Request
Fixes#89007
The conditionals were messed up - Burn wound sanitation / flesh healing
heals the wound over time so it's not like these would reasonably drop
to zero while meshing them.
## Changelog
🆑 Melbert
fix: Regen meshes stop when they've done all they can again
/🆑
## About The Pull Request
Nothing super crazy here, I've added a new goodie item (For **75
credits** as a private purchase), a smaller variant of the pet carrier
that is pre-loaded with a single mouse already. So that should be good
to g-
Okay so, it turns out that pet carriers have some open issues, such as
that pet carriers at base were made to be GAGS, but subtypes of pet
carriers as a result can generate empty icon_states due to not all
following the new GAGS template.
And as a result the exodrone loot carrier was also broken, so we added
some new states to make that work.
And then I updated a bunch of comments within the pet carrier file
because they needed auto-docs.
And then I added contextual screentips, because we're living in 2025
now, and I love me some useful screentips since I had no gosh darn idea
how to use pet carriers in the first place!

## Why It's Good For The Game
Overall, a nice code cleanup for pet carriers. Screentips aid
readability for use in-game, comments improve maintainability, and we
resolved a niche bug on a reward item.
As for why adding mice to the goodies menu is useful, there are multiple
ways to use mice in-game, including breeding more mice, regal rat
farming, cytology, cooking ingredients, etc. At a certain population,
it's very easy to actually run *out* of mice through chewing on wires or
similar, and this is a simple addition to prevent that. Plus, economy
content.
## Changelog
🆑
add: You can now purchase pet mice as a cargo goodie.
qol: Pet carriers now have contextual screentips.
fix: The biopod pet carrier now doesn't randomly turn invisible.
/🆑
## About The Pull Request
Closes#88618
Head IDs now keep the large pointer effect when slotted into a PDA or
displayed as the front ID in a wallet
## Changelog
🆑
fix: Head IDs now keep the large pointer effect when slotted into a PDA
or displayed as the front ID in a wallet
/🆑
<!-- 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
Fixes the blue security battledress which previously had a bugged sprite
by adding the tag female_sprite_flag to remove the akward invisible
pixel it had (thanks waterpig for finding this)
Additionally this PR adds two new variants of the Battledress!
+ RedSec Battledress, available in the multisec vendor!
+ HoS Battledress, available in the command vendor and the HoS Garment
bag!
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
<!-- Please make sure to actually test your PRs. If you have not tested
your PR mention it. -->
## Why It's Good For The Game
Fixes a silly bug with the battledress and adds more variety!
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Proof Of Testing
<!-- Compile and run your code locally. Make sure it works. This is the
place to show off your changes! We are not responsible for testing your
features. -->
<details>
<summary>Screenshots/Videos</summary>




</details>
## 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. -->
🆑
fix: Fixed Security Battledress sprite
add: Added Red Security Battledress and Head of Security Battledress
/🆑
<!-- 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. -->
<!-- By opening a pull request. You have read and understood the
repository rules located on the main README.md on this project. -->
---------
Co-authored-by: Waterpig <49160555+Majkl-J@users.noreply.github.com>
## About The Pull Request
Set the minimum flight distance to 3 tiles for objects hit by baseball
bat parry,
so instead of the boulder being sucked into wielder when the baseball
bat hits it, it now bounces back a little.
## Why It's Good For The Game
Closes https://github.com/tgstation/tgstation/issues/87877
## Changelog
🆑
fix: objects with throw_range 0 now properly parried with baseball bats
/🆑
## About The Pull Request
This PR is literally just
https://github.com/tgstation/tgstation/pull/87754 so you should probably
go read the contents of that PR to learn more.
### Sorry, No Stunsword in this PR.
Stunbaton inhand tips change color as the cell it has inside increases
in capacity. They also have different animations based on the cell, to
make it clearer which one you are looking at.

## Why It's Good For The Game
So, two things;
A) The test showed that there is more work to be done, but that this was
actually improving survivability to some degree against batons when
properly geared, while not necessarily impacting the average tider
arrest attempts. It didn't solve the issue of alleviating the need for
anti-baton knockdown tools, but it did help a bit. Enough that I think
this could be worked on further as a foundation for solving that
problem.
B) People have been asking me to, or have made it obvious that they
would like to see this actually merged into the game. So uh...here is
that PR if any maints care for it.
I think there is still more to do for testing and possible changes to
address the issues I was trying to investigate in the test. However, I
actually think this change could be an important step towards
accomplishing some of those changes. It isn't quite enough to start
pulling out baton resistance from various sources just yet, but it is a
start.
## Changelog
🆑
balance: Batons now respect the armor worn by targets. Analog batons
respect MELEE armor. Cell-type batons respect ENERGY armor.
balance: Various batons have differing amounts of armour penetration
based on what type of baton it is.
balance: Heads of staff have color graded batons to denote penetration
power. Bronze (Quartermaster), Silver (Chief Engineer, Chief Medical
Officer, Head of Personnel, Research Director), Gold (Captain).
Contractor batons are equivalent to Gold.
balance: Cell-type batons gain armor penetration based on their cell's
quality. The better it is, the more it penetrates.
/🆑
---------
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
## About The Pull Request
This implements a new, minor, but flavorful system to IDs -- Honorifics.
Does going by your full name not suit you? Do you demand respect for the
position on Space Station 13 that you've earned and want to be addressed
by your title? Do you take yourself WAY too seriously? This is for you.
Toggled by ctrl-clicking your ID, honorifics append a title to your name
depending on your position. Certain titles (Captain, Officer, Doctor,
etc.) will only append to the start (replacing or including the
first/last name), while others (PhD., Esq.) can only be appended at the
end.

Each job TRIM has a set honorific and positions it can be assigned to. A
doctor can be "Doctor Peterson" or "Doctor Peterson Bungle" or "Doctor
Bungle". A Lawyer can only choose to be "Peterson Bungle, Esq.".
This will only occur when the speaker's voice is the same identity as
the one written on the ID's registered name. This should not interfere
with Unknown voice obfuscation, stolen ID shenanigans, or anything
gameplay-oriented. Hopefully.
This feature is also mononym friendly!

This also makes `first_name()` and `last_name()` global procs, and adds
one to check if a passed string has spaces/dashes/whitespace/whatever.
All of this is compatible with ID name changes, but the voice name must
align with the card name to display the honorific. If you are "Peter
Stinkypants" with your honorific set to display "Doctor Stinkypants",
and your ID's registered name is changed to "Peter Stinker", you show up
as "Peter Stinkypants (as Peter Stinker)" with no honorific provided. If
you become "Peter Stinker" and have a "Peter Stinker" ID, you will show
up as "Doctor Stinker" once again.
That all make sense? Great.
<details>
<summary>So about the ID name stuff...</summary>
<br>
So, when you activate an honorific on your ID, it DOES change the actual
object's name. Not the registered name, but the ID's name will go from
"Peter Dawson's ID card" to "Captain Dawson's ID card" when an honorific
is applied. This, as far as I've tested, does not mess with anything
important, but I can totally see it doing so in a way that makes
ctrl-Fing through logs harder than it needs to be. This could probably
be changed without too much effort so if the issue does arise I can fix
it. If not I am totally fine with reverting this PR until I can make it
work (if I can at all).
<br>
Admittedly this doesn't have much testing with holopads/radios, but I'm
confident the message composure is handled well enough to only display
the right names under the right circumstances. If this fucks up logging
or naming in any way tell me ASAP because I have a sinking feeling it
will in a way more catastrophic than I could ever predict. This PR has
been tested thoroughly but I have my limits.
</details>
## About The Pull Request
mimics are basicmobs now
the only change not carried over worth mentioning is that all mimics are
a consistent speed because i cant imagine a gun or object with aimbot
going at you mach 2 would be very fun
mimic crates had some stuff changed compared to their simple animal
variant
they open and close their lid when attacking (unless locked) to be like
menacing or something like animals flash colors to ward off people
attempting to open a nonsentient hostile crate mimic will make it lock
itself (if it contains anything) and attack you
mimics are a really stupid naming for these because like
mimic crates pretend to be crates
anything else inheriting from mimics are just used to make objects alive
https://github.com/user-attachments/assets/34a733a4-45a3-409e-8a6a-b2a8c7540898
ranged mimics now use viscontents (they also keep trying to pointblank
people for some reason i think thats ok though unless its a wand of
fireball)
ranged mimic (any ranged weapon animated by a bolt of animation)
https://github.com/user-attachments/assets/c3f1d2f5-cfb8-46a9-a58c-255c53a034db
## Why It's Good For The Game
fixes#85668
## Changelog
🆑
refactor: mimics (bolt of animation, malf ai Machine Override, etc) are
basicmobs
fix: crate mimics may now be opened
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
This PR adds several circuit features, and changes several
assembly-related features to make them a bit more logical in how they
work. Included are the following changes/additions:
- Assemblies and wires have been refactored with vars that describe
their behavior:
- Assemblies have an `assembly_behavior` bitflag instead of a
`attachable` var. This var has 3 flags:
- `ASSEMBLY_INPUT`: The assembly is able to pulse the wire it is
attached to.
- `ASSEMBLY_TOGGLE_ARMED`: On activation, the assembly toggles whether
it can pulse the wire it is attached to.
- `ASSEMBLY_FUNCTIONAL_OUTPUT`: On activation, the assembly does
something other than just toggling whether it's armed.
- Wires have a `wires_behavior` bitflag with 3 flags:
- `WIRES_INPUT`: The object the wires are attached to does something
when the wires are pulsed.
- `WIRES_TOGGLE_ARMED`: The object the wires are attached to can
activate assemblies attached to those wires, and is fine if all that
activating that assembly does is toggle whether it's armed.
- `WIRES_FUNCTIONAL_OUTPUT`: The object the wires are attached to
expects that assemblies attached to its wires do something other than
toggling themselves when activated.
- Buttons can only accept assemblies with `ASSEMBLY_FUNCTIONAL_OUTPUT`.
- Pressure plates can now accept any assembly with
`ASSEMBLY_FUNCTIONAL_OUTPUT`, not just signalers. Assembly shells
attached to pressure plates will draw power from the powernet if the
pressure plate is under a tile.
- Adds a new circuit component - the wire bundle.
- This component gives the circuit a number of wires corresponding to
the size of the shell.
- Each wire has a corresponding port on the component that can pulse,
and receive pulses from, that wire.
- A circuit can only have one wire bundle component.
- Assembly shells cannot be attached to these wires, and no wires will
be created if the component is added to an assembly shell.
- Available with roundstart tech.
- Adds two new shells.
- The wallmounted shell is a large shell that can be hung on walls, and
uses power from the area it's placed in.
- Frame icon:

- Constructed icon:

- The undertile shell is a small shell that only works when fit under a
floor tile, but uses power from the area it's placed in.

- Both shells support usb cables.
- The above shells are available with the Advanced Shells techweb node.
## Why It's Good For The Game
The wire bundle component complements the functionality of the assembly
shell by allowing circuits to use assemblies directly in their logic.
The wallmounted and undertile shells provide ways of placing circuits
that don't necessarily take up space for machines. The undertile shell
is particularly useful for relaying usb component data over wirenets.
Pressure plates being able to accept assemblies other than signalers
expands their uses significantly.
## Changelog
🆑
refactor: Wires and assemblies have been refactored to have
directionality to them. This mostly makes it so that assemblies can only
be attached to wires it would make sense for them to be attached to.
qol: Pressure plates can now also accept igniters, condensers, flashes,
assembly shells, and door controllers.
add: Undertile circuit shells. They only work when placed under floor
tiles, but support USB cables and use APC power instead of cell power.
add: Wallmounted circuit shells. Large shells that support USB cables
and use APC power instead of cell power.
add: Wire bundle component. Adds a number of wires to the circuit
proportional to the capacity of the shell, allowing you to use
assemblies in circuit logic.
/🆑
## About The Pull Request
Makes it so strange geysers now say their name when scanned.
## Why It's Good For The Game
Should help make geysers actually worthwhile now that it's easier to
tell what they produce.
## Changelog
🆑
qol: Strange geysers now say in their name what they produce.
/🆑