Requires #5420 to be merged.
## About The Pull Request
See changelog
## Why It's Good For The Game
Bug fixes are good. Especially fixing bugs that brick you.
## Proof Of Testing

## Changelog
🆑
fix: Click dragging a protean modsuit onto yourself no longer unequips
it, bricking you.
del: Removed the Control Click Stripping functionality from Protean
modsuits. It's now only click dragging.
/🆑
## About The Pull Request
This PR reverts part of a Skyrat-Era PR,
https://github.com/Skyrat-SS13/Skyrat-tg/pull/15950. The PR as a whole
was intended to fix an exploit where a retracted MODsuit's modules could
still be used, but did so by preventing any modules from being activated
at all if the MODsuit was not fully deployed and active, in addition to
deactivating them when the associated part was retracted.
TG eventually fixed retraction not deactivating modules, and the Skyrat
fix for that part is no longer in our codebase. The part preventing
modules from being activated unless the suit is fully deployed, however,
lingered, and nowadays it inconveniences me when I am trying to have hot
MODsuit sex. _This is unacceptable._
This change will bring MODsuit behavior closer to how TG has it, where
players don't need to wait for all 4 parts of the suit to activate
before using something that only needs the gloves deployed. There may be
some mild balance implications there, but given that it's moving to how
TG does it I'm not too concerned.
## Why It's Good For The Game
Keeps us closer to parity with TG, and allows for greater flexibility in
MODsuit use, rewarding players who are knowledgeable in their modules'
required parts with faster access to those modules' abilities.
## Proof Of Testing
<img width="853" height="449" alt="image"
src="https://github.com/user-attachments/assets/8acbb0ca-5852-4a65-acd8-80f9a2e92c58"
/>
## Changelog
🆑
del: Removed a Skyrat restriction on activating MOD modules with a
partially-deployed suit.
/🆑
## About The Pull Request
This PR refactors ``effect_system``s to be a bit easier to use by
getting rid of ``set_up``, allowing ``attach()`` to be chained into
``start()`` and refactoring most direct system usages in our code to use
helper procs.
``set_up`` was unnecessary and only existed to allow ``New``'s behavior
to be fully overriden, which is not required if we split
sparks/lightning/steam into a new ``/datum/effect_system/basic`` subtype
which houses the effect spreading behavior. This allows us to roll all
logic from ``set_up`` into ``New`` and cut down on code complexity.
Chaining setup as ``system.attach(src).start()`` also helps a bit in
case no helper method exists
I've added ``do_chem_smoke`` and ``do_foam`` helpers, which respectively
allow chemical smoke or foam to be spawned easily without having to
manually create effect datums and reagent holders.
Also turns out we've had some nonfunctional effect systems which either
never set themselves up, or never started, so I fixed those while I was
at it (mostly by moving them to aforementioned helper procs)
## Why It's Good For The Game
Cleaner code, makes it significantly easier for users to work with. Also
most of our effect system usage was copypasta which was passing booleans
as numbers, while perfectly fine helper procs existed in our code.
## Changelog
🆑
refactor: Refactored sparks, foam, smoke, and other miscellaneous effect
systems.
refactor: Vapes now have consistent rigging with cigs using the new
system.
fix: Fixed some effects never working.
/🆑
## About The Pull Request
This list is keyed by the `type` not instances. Does not have a visible
effect apart from wasting memory and not doing what was indended
## Why It's Good For The Game
Bugfix
## Changelog
Nothing player-facing
## About The Pull Request
What it says on the tin.
Here are the new values for all the Syndicate modsuits.
| Modsuit | Melee | Bullet | Laser | Energy | Bommb |
| --- | --- |--- |--- |--- |--- |
| Infiltrator | 40 | 50 | 30 | 30 | 35 |
| Blood-Red | 50 | 50 | 40 | 50 | 40 |
| Elite | 60 | 60 | 50 | 50 | 55 |
## Why It's Good For The Game
The infiltrator is, despite marketed as a lesser armor, paradoxically a
stronger armor than the blood-red modsuit. This is likely due to some
value changes with time, since both suits have had many iterations over
the years.
To make sure the infiltrator is not too extreme a value purchase
(particularly on Icebox, where the lack of pressure protection doesn't
matter whatsoever), and ensure that the blood-red is actually the
superior of the two for the cost, their values for melee, bullet, laser,
energy and bomb armor have been swapped.
The knock on effect of this is that nukies get a stronger baseline
armor. Going to be honest here, I think most people will still buy the
elite. More armor is always better. And the elite comes with additional
benefits on top.
## About The Pull Request
Puts most stuff related to space ninja in its own antagonist folder
which includes equipment and stuff, puts the ninja modsuit modules in
the ninja's antag module, and puts shuriken, also kills off
ninjadrainact.dm and put the relevant interactions in the ninja modules
## Why It's Good For The Game
It'd be nice to find all ninja related stuff in the same folder when
coding even if its modsuit modules, it also combines the energy
net/shuriken into the modules folder itself because its related to it
anyways
## Changelog
🆑 Ezel
code improvement: Space ninja relative stuff is easier to find
/🆑
## About The Pull Request
Void stamp added to bureaucracy loot spawners, a new box that contains a
granted, denied, and void stamp found in the lawdrobe, hop locker,
bureaucracy crate, mod stamper module, and the paperwork implant gets a
stamp that can cycle between 3 different ones like the mod stamp.
## Why It's Good For The Game
Finally the void stamp is obtainable
## Changelog
🆑
add: The void stamp is now obtainable
add: The lawdrobe now sells a box of stamps
add: The head of personnel's locker now contains a box of stamps
fix: The mod stamper module is now visible
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
As on tin. Checks if you have baton resistance and reduces the duration
of jitter, confusion (exclusive to the stun baton), and stutter by half.
This applies to both the stun and contractor baton, since they are the
only two to possess these effects. Updates the shock absorber module
description accordingly.
## Why It's Good For The Game
Baton resistance is limited to only preventing knockdown in most use
cases, while allowing the other detrimental effects to slip by. With how
few sources there are of this trait, next to half of which are
temporary, the investment in procuring this is moot if confusion decides
you should run into a wall for most of the ten whole seconds it is
active after taking a hit from a stun baton. This mitigates that by
allowing those who've prepared (or should rightly be harder to subdue,
like nukies with a shock absorber module) to fight or flee from combat
with security somewhat more easily, while slightly improving quality of
life thematically, in line with the spirit of the trait. Extends it to
the contractor baton as it uses the same effects, method of stunning in
lore, and already resists the knockdown there.
## Changelog
🆑
balance: Baton resistance now reduces the jitter, confusion, and stutter
of electric baton strikes by half.
/🆑
## About The Pull Request
Updates subdermal implants so that they have `implant_info` and
`implant_lore` variables instead of one unchanging `get_info()`. Also
rewrites/updates/tweaks/etc. lore for every implant that had get_info()
blocks.
Makes beacon implants (the ones you teleport onto) turn off (hide
themselves on prisoner management consoles) after ten minutes, matching
the tracking implant's functionality.
Deathrattle implants are now `allow_multiple = TRUE`, so you can have
multiple deathrattles implanted.
Reworked the implant pad's UI to have collapsible sections for implant
info, implant lore, and also have buttons for configuring deathrattle
implants.
Adds a box of expeditionary deathrattle implants to the mining vendor.
For 900 points (585 points if delivered), you receive a box containing 5
expeditionary deathrattle implants, which **ONLY ALERT TO DEATHS IN
MINING WASTELAND AREAS (e.g. not ruins, not space, not station) (this is
important)**, an implanter, and an implant pad.
The intended workflow is that you initialize one deathrattle implant,
use that network for all the other deathrattles, and implant yourself,
your mining buddies, your QM, and a paramedic, maybe. However since they
start unset you could theoretically make one really big deathrattle
network. Good luck getting people to volunteer for implanting, though,
and as above, it only really works if you die outside of the station.
Also, repaths kheiral cuffs to be accessories, so you can attach them to
uniforms. They're still functional as suit sensor extenders and GPSes
(when off-station).
<details><summary>Screenshots</summary>
<img width="469" height="91" alt="image"
src="https://github.com/user-attachments/assets/2c88b151-e5ab-415a-8c41-0f166f439315"
/><br>
<img width="300" height="350" alt="image"
src="https://github.com/user-attachments/assets/0764983a-1160-48ab-aa6a-d1aaf08a682e"
/><br>
<img width="300" height="350" alt="image"
src="https://github.com/user-attachments/assets/98e84368-300b-453a-89a4-d922c80628e8"
/>
</details>
## Why It's Good For The Game
Deathrattle implants are cool. Being able to know that your coworker
exploded, after a non-negligible amount of setup and wrangling your
fellow spaceman to let you implant them, is probably a good thing.
Introduces a cooperative avenue of "Wait, my coworker just died" instead
of "Hey, they haven't yelled something on comms, did they roll antag?
(No. They died.)"
Kheiral cuffs being uniform attachments is because having to sacrifice
glove slot for them annoyed me a lot.
## Changelog
🆑
add: Nanotrasen has begun rolling out (unconfigured) expeditionary
deathrattle implant kits for their mining teams for 900 points (585
points, if manually delivered). These only alert for deaths on raw
mining wasteland, and will not work in space, ruins, or on-station.
balance: Kheiral cuffs can now be attached to uniforms as accessories.
They retain their suit sensor extension/GPS functionality (still only
when off station Z-levels, though).
fix: Beacon implants now turn off (hide themselves on prisoner
management consoles) after ten minutes, matching the tracking implant's
functionality.
qol: Made the implant pad UI a little nicer to look at, with dropdowns
and demarcated sections.
code: Implants now have separated "immediately useful" information and
"extended lore tidbits" information as variables instead of one
unchangeable get_info() block.
/🆑
---------
Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
## About The Pull Request
`adjust_fishing_difficulty` is a good one to make into a bespoke element
since a number of the same clothing item are created in the wardrobe
system.
climb_walkable is also good due to how prevalent it is, and it is a bit
of a two for one since it also removes the need for the
`/component/connect_loc_behalf`
Also stops adding the on_climbable trait to literally everything in the
turf, it now only applies it to atoms with density. So no more pipes and
stuff getting trait lists created for no reason.
<details><summary> Tested + things still work as before </summary>
<img width="422" height="122" alt="image"
src="https://github.com/user-attachments/assets/b23696f5-cd16-4150-aeb3-14ea6bd256fc"
/>
</details>
## Why It's Good For The Game
Lessens overhead, fixes a bug as well.
## Changelog
🆑
fix: fixes a pushed crate not removing on_climbable trait properly off
the mob standing atop it
/🆑
## About The Pull Request
This was LONG overdue and its finally time. Refactors 2 components to
regular datums
- `/datum/component/material_container` -> `/datum/material_container`
- `/datum/component/remote_materials` -> `/datum/remote_materials`
Reduced memory overhead and stops misuse of component i.e. storing it in
a variable
## Changelog
🆑
refactor: refactored material container code to reduce memory overhead.
Report bugs on github
/🆑
## About The Pull Request
Modsuit storage modules are now called compact storage modules and the
expanded ones are just regular storage modules. (Regular because they
have the same capacity as a backpack afaik) They're researched in the
modular suit equipment node instead of all the way on the advanced
engineering node, and the small storages only take up 1 capacity.
## Why It's Good For The Game
Picking your storage module is now more of a choice instead of "I'm not
going to get a modsuit until advanced engineering suits are researched".
The advanced engineering node is still good though because it has ion
thrusters.
## Changelog
🆑
balance: Expanded storage modules are now unlocked much earlier
balance: Regular storage modules require 1 complexity instead of 3
spellcheck: Regular storage modules are now called compact storage
modules and the expanded ones are just called storage modules.
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
Mel forgot to give compact defibs to the rescue suit storage. Also I
noticed the medical modsuit can hold other applicators like patches and
stuff instead of only pills.
## Why It's Good For The Game
bugfix
## Changelog
🆑
fix: Rescue modsuit suit storage can hold anything the medical modsuit
suit storage can hold
/🆑
---------
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request
I love the new pathfinder module but I did notice some tiny little bugs
while I was poking through the new code to find out exactly how it
worked. Basically if someone picked up the modsuit after it prepared for
takeoff it would cancel the launch but not set in_transit back to false
so the suit would think it's still flying through the air and you
wouldn't be able to recall it ever again.
Also, if the suit is being held by a mob it won't be recalled, but the
code kinda just assumes it's you that's holding it so it gives you a
balloon alert from the modsuit's position that it's already being worn.
Problem is if you're far away from the suit when this happens you won't
see the alert, so now it checks for that and instead puts the alert on
your position and also tells you it can't be recalled specifically
because the suit is being worn by someone else.
## Why It's Good For The Game
bugfix
## Changelog
🆑
fix: mod pathfinder module no longer gets stuck after an interrupted
launch
fix: mod pathfinder module gives you a unique balloon alert on your
position if you try to recall a suit that's being held by another mob
/🆑
Co-authored-by: Fghj240 <fakeemail@notrealemail.com>
## About The Pull Request

Removes the "pathfinding through the halls" function of the MODsuit
pathfinder module in favour of having it "fly" to your location in the
same manner as cargo pods (by getting inside an invisible cargo pod).
If it's inside a locked crate or locker when this happens it will break
the door on the way out, so be careful where you leave it.
## Why It's Good For The Game
Mostly because nobody uses the pathfinder module.
Pathfinding through the corridors is _cool_ on a conceptual level but
it's not very practical, _especially_ because it means that it has a
good chance of not functioning at all if you are on a station with Z
levels.
This method means that it will always arrive in the same amount of time
(quite fast, but not fast enough that it will arrive before someone can
shoot you) regardless of where you are when you suddenly realise that
you need spaceproofing rather than drip.
Also Fikou asked me to do it.
## Changelog
🆑
balance: The Captain's MODSuit pathfinder module now flies it directly
to their location rather than physically traversing the halls of the
station.
/🆑
## About The Pull Request
First, boring stuff.
The "Modsuit equipment" techweb node has been split into two nodes, with
the additional node containing the more civilian MODules (And the new
plating), and costing 20 points.
A new "Perfumer" MODule has been added(not printable anywhere, but in
the new suit by default) that just cleans you.
The MODsuit being added has been added to the LawDrobe's premium
section, for 300 credits.
Now, the real addition.
This adds a MODsuit that is a modular suit, that is to say, a suit, tie,
shoes and glasses. The glasses aren't actually real flash-proof
sunglasses by default, but the welding protection module can be added.
The suit is obviously not space-proof, and offers no protection to
anything but biohazards. The suit has 10 complexity max, due to the fact
that most modules don't have a point on it. This is subject to change.
The pre-made one also has the stamp and paper dispenser MODules
pre-installed, which are both now activateable via the neck slot.
The suit control unit is the tie.
## Why It's Good For The Game
Have you ever been called to court, but you didn't have a nice suit, so
the judge holds you in contempt and sends you to jail? Well, never
again. Gone are the days that you cause two innocent boys to almost be
executed for a crime they didn't commit simply because you don't have a
nice suit. With the Moonraker Conglomerate's newest export in your
hands, you'll never be the less formal one ever again. No matter the
occasion, you're never more than a few moments away from
self-representing.
Video of the fit:
https://github.com/user-attachments/assets/44d08ca8-9ae1-4887-81e6-cec11792132e
It's the same look as a suit jacket, white tie, sunglasses and laceup
shoes. You must get a matching jumpsuit of your own.
I think it's neat, and it's a damn shame that there's not a single
MODsuit that isn't just head gloves suit shoes. All these MODules which
are activateable from head, mask or glasses, and no suits that allow it.
Missed opportunity, I'd say.
Also, lawyer buff. Need I say more?
## Changelog
🆑
add: Added a modular SUIT, a deployable, one-piece three-piece suit.
Purchasable from the LawDrobe.
balance: The MODsuit equipment techweb node has been split in two, with
an offshoot for civilian MODules.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Compact defib can be worn on the suit storage slot of labcoats, medical
coats, surgical aprons, and medical MODsuits
## Why It's Good For The Game
This thing is dope but sucks to use because you have to juggle your
belt.
Allowing docs to wear it on their coat so they don't have to inventory
juggle with their belt would make it 10x more usable.
## Changelog
🆑 Melbert
add: Compact defib can be worn and used on the suit storage slot of
labcoats, surgical aprons, and medical MODsuits
add: Drones and Dex Holoparasites can (hypothetically) wear and use
compact defibs
/🆑
## About The Pull Request
Extends the part of the crafting unit test that ensures consistency
between the total mats of the components of a recipe (or rather, the
result of said recipe) and a generic instance of the same type as its
result, previously only implemented on food recipes.
## Why It's Good For The Game
This ensures a degree of consistency with the material composition of
various objects in the game. I couldn't do it in the original PR as that
one was too big already and it took months to get it merged, and have
the relative bugs fixed.
Currently a WIP as I slowly deal with the unit test reports.
## Changelog
🆑
refactor: Follow-up to the crafting/material refactor from months ago.
All objects crafted with stacks now inherit their mat composition (not
necessarily the effects and color) by default, while previously only a
few things like chair, sinks and toilets did. Report any object looking
or behaving weirdly as a result.
fix: The material composition of ammo boxes is no longer a 1/10 of what
it's supposed to be. It was a shitty hack to make it harder to recycle
empty ammo boxes. Instead, they lose materials as they're emptied now.
/🆑
## About The Pull Request
High frequency blades, both null rod variant and admeme variant, can
block mech melee attacks. For the former, that is the only thing it can
block. Great if you're fighting a lot of mechs as a chaplain I guess.
And you're also really committed to the bit.
Weapons that were vibro subtypes are now claymore subtypes. The only
difference here is that they now have 30% block instead of 35% AP.
Null rod high frequency blades are now two-handed. This mostly
determines force changes (10 unwielded, 18 wielded), and mech attack
block chances.
Mech melee attacks respect block...assuming the blocking source can even
block the attack in the first place. Currently, the few sources that can
block/avoid mech attacks are;
- high frequency blades
- energy katanas
- Those staff nullrods (its a holy force field, iunno)
- wizard modsuit shield (and it will eat literally every single charge
it has to do that)
- Sleeping Carp evasion (and only at half the possible chance)
- CQC defense mode (themed as dodging the attack, and also halved)
- probably something I overlooked when I implemented OVERWHELMING_ATTACK
originally and have overlooked here as well.
Just think 'could this help avoid being hit by a road roller being
dropped on you' and go with your gut as to whether or not it is
appropriate if you spot something in the wild that seemingly can block a
mech.
## Why It's Good For The Game
> High Frequency Blade
I wanted to elevate the meme and that is as deep as this goes. Also I
wanted to make this two-handed, much like the true version.
The only thing it is lacking is the cool attack functionality, but I'll
be damned if I can get that to work in a sensible fashion for a crew
weapon...
> Vibro subtype
A lot less of these than I thought. And most of them seemed more
appropriate as claymore types anyway.
> Mech Block
I seeded this previously by making mech clamps respect block. I've now
come back to fully implement it in order to facilitate MGR memes.
For the most part, mechs should still enjoy being largely unblocked by
most sources, even from things like operative suit shields, and
certainly not from actual shields (which I've stripped the ability to
block the attack from entirely) and melee weapons.
The sources that can block them do so poorly. Or, in the case of the
high frequency blade, very well and that's pretty much the only thing it
IS good at blocking.
## Changelog
🆑
balance: High frequency blades (both null rod and admin versions) are
able to block melee attacks from mechs.
balance: High frequency blade null rods are now two-handed weapons.
balance: Mech melee attacks can be blocked or avoided by a few rare
sources.
/🆑
## About The Pull Request
Flips the logic on MOD deploy action RMB click, allowing it to undeploy
parts if some of them still aren't deployed. Currently if you're wearing
a hat or a suit, trying to use it with your gloves and boots deployed
will not do anything, as it will try to deploy parts onto the blocked
slots instead of retracting already deployed ones.
## Why It's Good For The Game
Allows people to wear suits and not have to manually undeploy each of
their MODsuit parts because the RMB action doesn't work.
## Changelog
🆑
fix: Fixed partially deployed MODsuits trying to deploy parts onto
blocked slots when the deploy action is right clicked, instead of
retracting already deployed parts.
/🆑
## About The Pull Request
It's just a partial cleanup of
anti-[STYLE](https://github.com/tgstation/tgstation/blob/master/.github/guides/STYLE.md)
code from /tg/'s ancient history. I compiled & tested with my helpful
assistant and damage is still working.
<img width="1920" height="1040" alt="image"
src="https://github.com/user-attachments/assets/26dabc17-088f-4008-b299-3ff4c27142c3"
/>
I'll upload the .cs script I used to do it shortly.
## Why It's Good For The Game
Just minor code cleanup.
Script used is located at https://metek.tech/camelTo-Snake.7z
EDIT 11/23/25: Updated the script to use multithreading and sequential
scan so it works a hell of a lot faster
```
/*
//
Copyright 2025 Joshua 'Joan Metekillot' Kidder
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
//
*/
using System.Text.RegularExpressions;
class Program
{
static async Task Main(string[] args)
{
var readFile = new FileStreamOptions
{
Access = FileAccess.Read,
Share = FileShare.ReadWrite,
Options = FileOptions.Asynchronous | FileOptions.SequentialScan
};
FileStreamOptions writeFile = new FileStreamOptions
{
Share = FileShare.ReadWrite,
Access = FileAccess.ReadWrite,
Mode = FileMode.Truncate,
Options = FileOptions.Asynchronous
};
RegexOptions regexOptions = RegexOptions.Multiline | RegexOptions.Compiled;
Dictionary<string, int> changedProcs = new();
string regexPattern = @"(?<=\P{L})([a-z]+)([A-Z]{1,2}[a-z]+)*(Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss)([A-Z]{1,2}[a-z]+)*";
Regex camelCaseProcRegex = new(regexPattern, regexOptions);
string snakeify(Match matchingRegex)
{
var vals =
matchingRegex.Groups.Cast<Group>().SelectMany(_ => _.Captures).Select(_ => _.Value).ToArray();
var newVal = string.Join("_", vals.Skip(1).ToArray()).ToLower();
string logString = $"{vals[0]} => {newVal}";
if (changedProcs.TryGetValue(logString, out int value))
{
changedProcs[logString] = value + 1;
}
else
{
changedProcs.Add(logString, 1);
}
return newVal;
}
var dmFiles = Directory.EnumerateFiles(".", "*.dm", SearchOption.AllDirectories).ToAsyncEnumerable<string>();
// uses default ParallelOptions
// https://learn.microsoft.com/en-us/dotnet/api/system.threading.tasks.paralleloptions?view=net-10.0#main
await Parallel.ForEachAsync(dmFiles, async (filePath, UnusedCancellationToken) =>
{
var reader = new StreamReader(filePath, readFile);
string oldContent = await reader.ReadToEndAsync();
string newContent = camelCaseProcRegex.Replace(oldContent, new MatchEvaluator((Func<Match, string>)snakeify));
if (oldContent != newContent)
{
var writer = new StreamWriter(filePath, writeFile);
await writer.WriteAsync(newContent);
await writer.DisposeAsync();
}
reader.Dispose();
});
var logToList = changedProcs.Cast<KeyValuePair<string, int>>().ToList();
foreach (var pair in logToList)
{
Console.WriteLine($"{pair.Key}: {pair.Value} locations");
}
}
}
```
## Changelog
🆑 Bisar
code: All (Brute|Burn|Fire|Tox|Oxy|Organ|Stamina)(Loss) procs now use
snake_case, in-line with the STYLE guide. Underscores rule!
/🆑
## About The Pull Request
Another relatively simple simple_mob to basic mob refactor. I wish more
people were doing these since I was saving these for people to get their
feet wet, but I think it's better to pivot away from that and just have
only the gargantuan ones outstanding (since those ones are pretty much
their own framework).
I also delayed this one because we didn't actually have the AI framework
available 1-2 years ago for this to be seamless and easy, but now we
have easy fleeing functionality so that's an easy plug and play.
This rework contains the following:
* General code readability changes and standardization (i.e. removing
single letter vars, `SECONDS` defines)
* Moves more stuff to subtypes instead of having it be on parent
* Removes the necessity for define "attack modes", that's on subtypes
now
* Fixed instances where args weren't defined. I think cult apparitions
via the mirror shield have been much weaker than what they were
originally intended to, so I changed it to what I thought was correct. I
can change the health to be down but it really doesn't make sense as a
lot of the args were not standardized (ideally we would have more
subtypes). I can change this back to the original arg order, let me
know.
* Clones now replicate on damage taken as well as when they attack. I
wanted to tweak this around more but this was originally added since I
confused myself, but it gave a more realistic mitotic effect I liked
more for the replicating clones.
## Why It's Good For The Game
If we want more flamboyant mirage escapes or sneaky clone AI behavior,
it is now far easier to implement. It's very simplistic at the moment
but is pretty much fully featured and representative of the simple mob
version of illusions. They were already laden to the item/mob that was
spawning them in anyways, so this is really the most simple stuff we got
going on.
I tested this with the mirage grenade, reactive stealth armor, and the
mirror shield. I have no clue how the heretic stuff works but it appears
to be a really simple framework plug-and-play so no real worries there I
think.
## Changelog
🆑
refactor: The Cult of Nar'Sie realized that they were installing the
mirrors on their mirror shields the wrong way around, thus altering the
makeup of their mirror clones health, damage, and re-replicability.
refactor: In response to the recent updates in clone magic, Nanotrasen's
Stealth Reactive Armor should now generate more convincing clones.
/🆑
## About The Pull Request
Should fix https://github.com/tgstation/tgstation/issues/93897
This implements a restock blacklist for SSwardrobe. If an item type is
in the blacklist, then SSwardrobe will never try to restock that item,
instead just deleting them.
## Why It's Good For The Game
Fixes ever-expanding pile of modsuits in nullspace, and lets modsuits
actually be wardrobed properly
## Changelog
🆑
fix: fixes an where modsuits would accumulate in nullspace over the
course of a round
/🆑
## About The Pull Request
closes#93805
## Why It's Good For The Game
we actually have almost no emp logging at all lol, not even emp chem
reaction, so you barely can track potential griefer?
## Changelog
🆑
admin: EMP logs are improved, additionally chemical EMP reactions are
now logged.
/🆑
## About The Pull Request
If you have an outfit with a modsuit control, and are equipping it to a
dummy for previews, when you unequip it SSwardrobe tries to delete the
individual parts when stashing the mod control since they are in the
suit's `contents`.
The control is then stashed, and the parts all cause hard deletes after
a while since the suit itself is still holding a ref to all of them.
Since there is currently no good fast way of checking all the modsuit
parts outside of a nest of istypes I added an item flag for it.
## Why It's Good For The Game
Fixes an oversight, should not have any performance impact.
## Changelog
🆑
fix: fixes an oversight where the wardrobe system tries to delete
modsuit parts when stashing the modsuit
/🆑
## About The Pull Request
removes oxygen jetpack subtype and makes empty jetpack actual oxygen
## Why It's Good For The Game
because our empty jetpack wasnt actually empty and we infact had two
oxygen jetpacks?
## Changelog
N/A
## About The Pull Request
This is me picking up #93077 but with code changes relative to the two
new flags that Krysonism added in his PR, which unfortunately he never
finished.
## Why It's Good For The Game
Monkeys should be able to ventcrawl even if their left or right arm is
actually a chainsaw or armblade or whatever. See #93077
## Changelog
🆑 Krysonism
balance: prosthetic item limbs are no longer considered equipped items
for some purposes such as ventcrawling.
/🆑
---------
Co-authored-by: Krysonism <robustness13@hotmail.com>
## About The Pull Request
changelog should say pretty much enough, dont want to double it here.
## Why It's Good For The Game
as paramedic later into the game you'll prefer jaws of life over jaws of
recovery because theyre both silent AND have no area restrictions, but
heres the thing: you cant wear it in suit storage, nor it can act as
bonesetter additionally (why would paramed need wirecutter?) this PR is
aimed to combie both of those jaws into one modified, that would be
useful for paramedic.
also you really should be able to wear them in mod suit storage, trust
me, it sucks to carry paramedic jacket/coat in inventory everytime and
waste time on swapping
## Changelog
🆑
qol: Jaws of Recovery can be worn on medical MODSuit suit storage now.
add: Added modified Jaws of Recovery and recipe for them. Made from
regular Jaws of Life they act like one, without area restrictions and
radio announcements.
/🆑
## About The Pull Request
Ore bags try to insert the stack without actually checking if it can
merge with anything, meaning that ores can take up limited slots which
may end up with 7 single-ore stacks preventing any more ore from
entering the bag, despite there being ample space for 49 more ore of
each type. Now bags will actually try to merge picked up ore into
themselves first, ensuring that this doesn't occur, and that the bag
will always be topped up (This needed additional logic to ensure that
stacks don't merge beyond the size that the storage they're in can
handle)
Additionally, I've changed how stacks merge when dragged (instead of
merging themselves into the target, target is merged into themselves)
and prevent dragging from changing focus to stack that is being merged
into if the merging stack isn't empty, fixing the "pull churn" issue
that locks out player inputs if you try to pry and drag floor tiles due
to constantly swapping the pull target after every tile pried, plus I've
removed that weird ore box `insertion` animation (which I recon is an
oversight) and ore bags sucking up the ores you drop from your hand
because you're probably doing so intentionally
## Changelog
🆑
fix: Fixed ore bags being able to reject any ores despite having ample
space
fix: Pulling a stack behind you and getting it topped up by lying items
will no longer spam pulls and lock out your inputs
fix: Picking up ores into an ore box via an ore bag will no longer play
a jank animation
qol: Ore bags and MODule ore bags no longer pick up ores you've dropped
from your hand until you walk over them again
/🆑
## About The Pull Request
The visors on MODsuits using the Syndicate welding visor (now renamed
the "flash-protected optical suite") now toggle their armor booster
overlay depending on whether the user has combat mode on or off.
## Why It's Good For The Game
Style. Listen, man, I just thought it'd be a shame if the cool visor
sprites never got used again.
https://github.com/user-attachments/assets/d5103168-7a1e-4405-adb3-53420c8601d7
## Changelog
🆑
add: The visors on MODsuits that used to have armor boosters now visibly
toggle based on whether the wearer is in combat mode or not.
/🆑
---------
Co-authored-by: Hatterhat <Hatterhat@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Projectile refactor pulled armor check above the pre-hit comsig, this
fixes that. No need to check armor before you're hit when you
potentially will not be.
## Changelog
🆑
fix: Sleeping Carp and Cain & Abel no longer tell you about armor
penetration when you reflect projectiles with them
/🆑
## About The Pull Request
Fixes#93359
Caused by #93165
Inventory screen elements were no longer considered reachable, which
broke mousedrop handing on objects that check "is dragging into
inventory slot"
I don't know the best way to fix this yet but I figured the next best
thing would be to make all of these use the `drag_pickup` element, which
skips this reach-ability check
Thus I refactored it slightly to accommodate for items which should
contextually not be drag-pick-up-abble and bam, works like a charm
## Changelog
🆑 Melbert
fix: Dragging defibs and modsuits off your back works again
/🆑
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
Co-authored-by: Xander3359 <66163761+Xander3359@users.noreply.github.com>