* Adds a martial artist gi to the AutoDrobe. (#73794)
## About The Pull Request
On a dark and stormy night, @ Cheshify asked in OOC if anyone would be
down to make a martial arts gi of no known origin for an event idea they
had.
Naturally, I decided to put my talent (CITATION NEEDED) to use, and I
have both sprited and coded in (the latter with the help of Cheshify
ofc) the aforementioned gi of no known origin.
<details>
<summary>Picture</summary>

</details>
## Why It's Good For The Game

## Changelog
🆑 dessysalta, Cheshify
add: Nanotrasen has added a martial artist gi to the AutoDrobe for those
who want to go even further byond.
imageadd: Aforementioned gi sprites.
/🆑
* Adds a martial artist gi to the AutoDrobe.
---------
Co-authored-by: Rem/Dess <117083785+dessysalta@users.noreply.github.com>
* Adds checkgrep for improper or missing atom Initialize args (`mapload`) (#72846)
## About The Pull Request
Adds a grep for atom initialize overrides which does not include mapload
Regex used
`^/(obj|mob|turf|area|atom)/.+/Initialize\((?!mapload).*\)`
Also replaced some space indentation with some tab indentation in some
other greps

## Why It's Good For The Game
See #69107, #61759, #61623
## Changelog
No player facing changes
* Missed by #8374
* Add (mapload) to a //Skyrat Edit so that it passes
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Document why moths eating clothes is like that (#73382)
People have tried to change this a few times and I want to make sure
it's written in stone that I'm not stupid, just forward thinking
* Document why moths eating clothes is like that
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
* Adds the Ectoplasmic Outburst, a rare ghost-centric anomaly event (#73024)
## About The Pull Request
This PR description might be a bit rushed because I accidentally
submitted the PR and want to bang out a quick explanation of what this
is before people start asking questions.
Adds a new, rare, ghost-themed anomaly event -- The Ectoplasmic
Outburst.

This event increases in power as more ghosts orbit it, with three
important thresholds to meet.
If 10% or more of all active observers are orbiting the anomaly, an
effect will occur in the nearby area akin to the revenant's defile
spell, damaging flooring, windows, and making a mess.
If 35% or more are orbiting the anomaly, nearby objects in the effect
radius have a chance to become haunted, and will fling themselves at
anyone nearby for a bit. Spooky!
Now, at 50% or more participation, things get serious. Ghosts orbiting
the anomaly will be polled to be brought back into the world for a brief
period as a vengeful spirit, anchored to a SUPER spooky ghost portal.
The portal closes after two minutes (alternatively, smash it with a
toolbox) and deletes all of the ghosts it spawned. Vengeful spirits are
mostly just meant to smash stuff and be a nuisance while they can. It's
a wonderful opportunity to let deadchat desalinate a little.

Oh, also, the anomaly is deadchat controlled. With enough ghosts, you
could theoretically outrun anyone trying to neutralize it!
The associated reactive armor has an effect similar to the anomaly,
haunting nearby objects for a time when the wearer is struck. Not
particularly outstanding, but it can introduce an element of chaos into
a fight that your opponent might not expect.
## Why It's Good For The Game
Anomaly events are great for ghosts. Why not make one tailored just for
them!
Gives admins something to spawn when a wizard has killed half of the
crew but it's not quiiiite time for an ERT.
It's a bit of a silly event with a novelty reward, but I think it's rare
enough not to be a huge issue.
## Changelog
🆑 Rhials
add: Ectoplasmic Outburst anomaly event
add: Reactive Ectoplasm Armor
/🆑
* Adds the Ectoplasmic Outburst, a rare ghost-centric anomaly event
---------
Co-authored-by: Rhials <Datguy33456@gmail.com>
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
* Fix a merge skew on armor datums (#72909)
And also add a check grep to find it in the future
* fix linters
* damn youuuu
---------
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
* Moths can't eat indestructible items (#73171)
## About The Pull Request
Prevents mothmen from eating indestructible clothings like the advanced
magboots
## Why It's Good For The Game
Closes https://github.com/tgstation/tgstation/issues/66923 and makes
indestructible items not be destructible through the power of your damn
mouth.
## Changelog
🆑
fix: Moths can no longer eat indestructible items (like the CE's
magboots)
/🆑
* Moths can't eat indestructible items
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
* Converts blindness and nearsightedness to status effects, scratches some VERY dumb blindness handling that resulted in mobs becoming "incurably" blind
* Fixes the conflicts and makes shit compile!
* Fixes other things that didn't show up because I hadn't updated
* Fixes the lints.
* Okay NOW it's ready (please don't add anything else that touches blindness I beg you)
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Customizable GAGS Witch Hat (#72477)
## About The Pull Request
Implements new sprites for the witch (Marisa) hat, divided into three
greyscale icon states - base, bow, and charms. The hat can have its
colours customized at an AutoDrobe. The not fake version has also been
changed in the same way. The default colours are approximately the same
to the old hat's.

_A coven of witches showing off their newly colourable hats_
## Why It's Good For The Game
More customization options for clothes allow for more variety and
greater player creativity.
## Changelog
🆑
add: added greyscale json configs for witch hat and witch hat worn.
imageadd: Added new, greyscale states to head/wizard.dmi
imagedel: Removed Marisa hat states from head/wizard.dmi
code: changed Marisa hat code in wiz_robes.dm to make them use
greyscale.
config: changed greyscale configs to include the witch hat.
/🆑
* Customizable GAGS Witch Hat
---------
Co-authored-by: Kepteyn <94123167+Kepteyn@users.noreply.github.com>
Adds plasmaman support to mob spawners (#73068)
## About The Pull Request
A very minor change but one that will save headache down the line. Adds
plasmaman support to mob spawners, meaning they will be guaranteed to
get their internals and suit upon spawning from those.
Modified the equip proc to be able to automatically turn hand slot
internals on without the need for snowflakey open_internals checks
everywhere, as that should already handled by the it (shown below). Just
modified it to work on hand slots.
4b832e7d01/code/datums/outfit.dm (L245-L248)
## Why It's Good For The Game
Adds support for present and future mob spawners involving plasmapeople.
## Changelog
🆑
qol: prevents mob spawner plasmamen from spawning without their suit and
internals.
code: the equip proc can now find internals in the hand slot and
automatically open them, allowing for less snowflakey code down the
line.
/🆑
---------
Co-authored-by: Bloop <vinylspiders@gmail.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* adds atmospheric gloves, small resprite of firefighter gear, repaths stupid glove paths (#72736)
repaths a lot of gloves off /color because they were incredibly stupid
firefighter gear has gotten an update (it doesnt cover hands anymore
though, you need something else)
firefighter helmets no longer hide your mask or glasses

fixed engine goggles starting with darkness vision
to the atmos lockers adds atmospheric gloves, a pair of thick (chunky
fingers) gloves that are fireproof and fire protective, slightly shock
resistant and let you fireman carry people faster.
atmospheric firefighter helmets now are a subtype of welding hardhats,
you can enable a welding visor.
welding hardhats change mode with right click instead of altclick
im not a good spriter but i think this resprite makes them fit nicer
with other engi equipment
lets me firefighter rp
🆑
add: Atmospheric Gloves, thick gloves that are fully fireproof and fire
protective and let you fireman carry people faster.
fix: fixes engine goggles starting with darkness vision
qol: firefighter helmets can now enable a welding visor
qol: welding hardhats change mode with right click instead of altclick
balance: firesuits no longer protect your hands
/🆑
* Makes shit compile
* Updates the digi and snouted stuff to match the new sprites (thanks Halcyon!)
* Fixes a whole ton more issues that popped up
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Refactor lighting items that use fuel (#72146)
Fixes#71826
This does the following:
- Makes candles a subtype of flare
- Fixes candles having lighting inconsistencies
- Fixes burning items (welder, candles, flares, etc.) not causing
ignition effects when held in hand
- Adds burnt flares and melted candles to maint loot and trash spawners
- Add match lighting sound when candles are lit
- Add time defines for fuel amounts and rounded them (ex. instead of
32.3333 minutes, it's now 35 minutes)
- Light sources that burn will now spawn a trash item once fuel is spent
- Light sources that burn now have a welder hitsound
- Light sources that burn can now be extinguished by a fire extinguisher
(except flares)
- Light sources that burn can now be used to ignite another object on
fire (ex. a lit candle can be used to light a cigarette)
- Light sources that burn and are lit now do `BURN` damage while
attacking
Code is more cleaner and consistent. Also fixes some bugs.
🆑
soundadd: Candles will now use the match lighting sound when lit
soundadd: Light sources that burn will now have a welding hitsound
fix: Fix candle light behaving erratically
fix: Fix burning items that are held in hand will now have an ignition
effect on the turf. (ex. lit welders in hand will now ignite plasma in
the air)
balance: Light sources that burn and are lit now do `BURN` damage while
attacking
balance: Light sources fuel amounts were rounded to exact numbers (ex.
instead of 32.3333 minutes, it's now 35 minutes)
qol: Light items that burn can now be extinguished by a fire
extinguisher (except flares), used to ignite another object on fire, and
will now leave a trash item once fuel is used
qol: Add burnt flares and melted candles to trash spawners
refactor: Refactor lighting items that use fuel to be more robust
/🆑
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
* Modular!
* Toggle Light
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Kylerace <kylerlumpkin1@gmail.com>
Co-authored-by: Funce <funce.973@gmail.com>
* Refactors memories to be less painful to add and apply, moves memory detail / text to memory subtypes. Adds some new memories to demonstrate. (#72110)
So, a huge issue with memories and - what I personally believe is the
reason why not many have been added since their inception is - they're
very annoying to add!
Normally, adding subtypes of stuff like traumas or hallucinations are as
easy as doing just that, adding a subtype.
But memories used this factory argument passing method combined with
holding all their strings in a JSON file which made it just frustrating
to add, debug, or just mess with.
It also made it much harder to organize new memories keep it clean for
stuff like downstreams.
So I refactored it. Memories are now handled on a subtype by subtype
basis, instead of all memories being a `/datum/memory`.
Any variety of arguments can be passed into memories like addcomponent
(KWARGS) so each subtype can have their own `new` parameters.
This makes it much much easier to add a new memory. All you need to do
is make your subtype and add it somewhere. Don't need to mess with jsons
or defines or anything.
To demonstrate this, I added a few memories. Some existing memories had
their story values tweak to compensate.
Makes it way simpler to add new memories. Maybe we'll get some more fun
ones now?
🆑 Melbert
add: Roundstart captains will now memorize the code to the spare ID
safe.
add: Traitors will now memorize the location and code to their uplink.
add: Heads of staff winning a revolution will now get a memory of their
success.
add: Heads of staff and head revolutionaries who lose their respective
sides of the revolution also get a memory of their failure.
add: Completing a ritual of knowledge as a heretic grants you a quality
memory.
add: Successfully defusing a bomb now grants you a cool memory. Failing
it will also grant you a memory, though you will likely not be alive to
see it.
add: Planting bombs now increase their memory quality depending on how
cool the bomb is.
refactor: Memories have been refactored to be much easier to add.
/🆑
* Modular!
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Funce <funce.973@gmail.com>
* fixes detective and horrible ties randomly breaking their sprite (#72713)
## About The Pull Request
clip on ties are meant to never be tiable, but that means that whenever
update_icon is called, their sprite breaks and they are fully white
## Why It's Good For The Game
quite silly
## Changelog
🆑
fix; fixes detective and horrible ties randomly breaking their sprite
/🆑
* fixes detective and horrible ties randomly breaking their sprite
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Unironically removes the atmos and black beret (#72722)
## About The Pull Request
Removes atmos berets
## Why It's Good For The Game
Berets shouldn't be thrown into every job, it's milsim circlejerking
dressup shit that creeps out of our milsim containment jobs (security)
and into other innocent jobs. There is absolutely no reason for this job
to have a beret just straight up. Can we add unique hats to the game,
not the same one recolored every way to Sunday? That's my problem. We
don't have unique clothes, we have a billion types of beret when the
BASE BERET TYPE has `IS_PLAYER_COLORABLE_1` so ANYONE can color it. So
again, why do we have the atmos beret? To clog the wardrobe, a vending
machine added specifically because we couldn't stop clogging the
original locker atmos techs spawned in?
The black beret has the same problem: recolored item when you can get
the item of any color
## Changelog
🆑
del: Atmospherics beret and black beret
/🆑
* Unironically removes the atmos and black beret
* update modular
Co-authored-by: tralezab <40974010+tralezab@users.noreply.github.com>
Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com>
* Fixes durability tags not showing their class (#72654)
## About The Pull Request
Copy paste error. `armor_to_protection_class` should take a number, the
armor rating.
## Why It's Good For The Game
Runtimes bad
## Changelog
🆑 Melbert
fix: Fixed durability tags not showing their ratings
/🆑
* Fixes durability tags not showing their class
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* [no gbp] removes all duplicate armor datums (#72354)
closes#72348
Title
My bad
Heres the script I used this time if you want to
```cs
var baseDir = Environment.CurrentDirectory;
var allFiles = Directory.EnumerateFiles($@"{baseDir}\code", "*.dm", SearchOption.AllDirectories).ToList();
var known = new Dictionary<string, List<KeyValuePair<string, int>>>();
foreach (var file in allFiles)
{
var fileLines = File.ReadAllLines(file);
for (var i = 0; i < fileLines.Length; i++)
{
var line = fileLines[i];
if (line.StartsWith("/datum/armor/"))
{
var armorName = line.Replace("/datum/armor/", "").Trim();
if (!known.ContainsKey(armorName))
known[armorName] = new List<KeyValuePair<string, int>>();
var knownList = known[armorName];
knownList.Add(new KeyValuePair<string, int>(file, i));
}
}
}
Console.WriteLine($"There are {known.Sum(d => d.Value.Count)} duplicate armor datums.");
var duplicates = new Dictionary<string, List<int>>();
foreach (var (_, entries) in known)
{
var actuals = entries.Skip(1).ToList();
foreach (var actual in actuals)
{
if (!duplicates.ContainsKey(actual.Key))
duplicates[actual.Key] = new List<int>();
duplicates[actual.Key].Add(actual.Value);
}
}
Console.WriteLine($"There are {duplicates.Count} files to update.");
foreach (var (file, idxes) in duplicates)
{
var fileContents = File.ReadAllLines(file).ToList();
foreach (var idx in idxes.OrderByDescending(i => i))
{
string line;
do
{
line = fileContents[idx];
fileContents.RemoveAt(idx);
}
while (!String.IsNullOrWhiteSpace(line));
}
File.WriteAllLines(file, fileContents);
}
```
* modular
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
* Experiment with holding hard references to objects being qdeleted in 515 (saves 1.1+ seconds on init times, more on prod) (#72033)
## About The Pull Request
Adds `EXPERIMENT_515_QDEL_HARD_REFERENCE`, which will queue to the GC
subsystem using hard references rather than `\ref`. This is only
possible in 515 because of the new `refcount` proc. `\ref` is very very
slow and has some nasty knock on effects, so removing its usages where
possible is good.
This is an explicit opt in define because I want to give us the ability
to test 515 on live while only testing 515 itself, not our experimental
changes. We have a few more of these we want to do so I made a separate
file for them. They're auto-defined in unit tests so we see them with
the alternate test runner. In a perfect world we'd test both on and off,
but eh.
Closes https://github.com/tgstation/dev-cycles-initiative/issues/10
* Experiment with holding hard references to objects being qdeleted in 515 (saves 1.1+ seconds on init times, more on prod)
* fix missed underbarrels
* HEV radio
* Keeps gc_destroyed from getting updated on every step thru the gc queue. (#72401)
Keeps gc_destroyed from getting updated on every step thru the gc queue.
Fixes logic that assumed gc_destroyed is the time the object first
qdel'ed. it used to get updated on each stage of the garbage controller
and there are 3 stages.
Added list index defines for the inner gc item list.
* test fix
* final fix
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
* Food code sweepups + heart boxes have more chocolate variety (#72127)
- Chocolate boxes now contain bonbons (formerly tiny chocolates),
truffles, and peanut butter cups
- Slices of bread now taste like their respective breads instead of
tasting "indescribable"
- Fiesta skewers have food categories now
- Misc food file has had more split out of it into sweets.dm,
vegetables.dm, and packaged.dm
- Removed a bunch of redundant food_reagent code
- Changed the sugar in clown cakes' food_reagents to banana juice
- Increased the amount of vitamin in pound cakes (it's four whole cakes
and the amount of vitamin doesn't go up?)
* modular foods
* Fixes the first merge skew of 2023 (#72414)
https://github.com/tgstation/tgstation/pull/72232
skews with
https://github.com/tgstation/tgstation/pull/72127
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Tastyfish <crazychris32@gmail.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Fixes clothing not showing armor (#72337)
So the linter didn't detect usage of a private var for some reason.
We never want to directly access the armor var because ideally its null
unless being used
Inspecting armor should work now.
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
* Converts drowsy and eye blur to status effects, striking yet another two carbon level status vars
* merge conflicts
* adjust_eye_blur and set_eye_blur_if_lower
* adjust drowsiness overdoses
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>
* Crafting/Cooking menu update
* Yeeted away all of the merge conflicts, time to fix the code
* Okay, now it compiles, and after testing, it seems to work just fine
* Actually, early addition of an upstream fix, so those that don't have hunger can still open the cooking menu
* Fixes the units tests by removing the extra comma in the Stuffed Muli Pod recipe
Co-authored-by: Andrew <mt.forspam@gmail.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* Minor detectives spawn with a candy cigarette and apple juice filled flask (#72422)
If a detective joins who is 20 or younger their cigarette is changed for
a candy one and their flask is filled with apple juice. Also adds candy
cigarettes' to the detective vendor.
Minor crew members are unable to use cigarette vendors or acquire
alcohol in game without effectively committing a crime, it doesn't make
sense for minor detectives to spawn with them. I also think that minor
characters trying to obtain narcotics can be a pretty entertaining RP
starter as a overall harmless crime and something that requires
interaction with other members of the crew.
* Minor detectives spawn with a candy cigarette and apple juice filled flask
Co-authored-by: NamelessFairy <40036527+NamelessFairy@users.noreply.github.com>
* makes status tab use signals, thirds the delay between updates (#72002)
## About The Pull Request
status panel for carbons and humans instead of hardcoding stuff, uses
signals (borg material storage too)
removes combat mode indicator in status tab from xenomorphs which have a
button for it, but adds it to simplemobs, since they dont have a visual
indicator
adds status tab stuff to basic mobs, i think they were missing
everything by accident
offsets unique status tab stuff for all mobs by a single line
the delay between updates is a third of what it was before, mainly to
make shuttle timers more accurate (approved by kyler)
## Why It's Good For The Game
much cleaner code, makes future implementations easy
## Changelog
🆑
qol: you can see your combat mode status as a simple or basic mob, and
you can see your health as a basic mob
qol: status panel updates three times as fast
/🆑
* makes status tab use signals, thirds the delay between updates
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Fixes chameleon vest suit storage (#71992)
Chameleon vests now work like security vests,
allowing you to wear guns on it.
This makes it easier to disguise within security
while giving a little more utility to the item.
* Fixes chameleon vest suit storage
Co-authored-by: FinancialGoose <92416224+TheBoondock@users.noreply.github.com>
* Fixes medical scrubs not being adjustable (#72105)
## About The Pull Request
I had on my list: "Make adjusted sprites for the medical scrubs." and to
my surprise #69047 already added adjusted sprites for all the medical
scrubs (thanks for saving 30 minutes of my day Imaginos16!), but not on
the code side, this fixes that.
## Why It's Good For The Game
Adjusting jumpsuits is an important medbay feature IMO, this keeps new
doctors from learning bad habits (fully stripping at stasis) from other
doctors.
## Changelog
🆑 Guillaume Prata, Imaginos16
fix: You can now adjust medical scrubs for easier surgery on your fellow
doctors.
/🆑
* Fixes medical scrubs not being adjustable
Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
* Pride pin quirk + pins can be infinitely reskinned (v2) (#72143)
## About The Pull Request
Neutral pride pin quirk added. Pride pins can be infinitely reskinned
now. Changes "sexuality" to "pride" in description of pin.
## Why It's Good For The Game
Pride pins are cute and having to buy them every round is a chore. Pride
pins are purely cosmetic and have no reason to be locked into only being
reskinned once.
## Changelog
🆑
add: Pride pin quirk! Start the shift off with a pride pin in-hand.
qol: Pride pins can be infinitely reskinned now.
/🆑
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Pride pin quirk + pins can be infinitely reskinned (v2)
Co-authored-by: iwishforducks <65363339+iwishforducks@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@ users.noreply.github.com>
* Santa hat fixes (#72078)
Fixes#72070🆑 ShizCalev
fix: Santa now spawns with the actual space capable hat again!
fix: Fixed the claustrophobia trait not recognizing Santa's real hat.
/🆑
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
* Santa hat fixes
* Includes 18278 change
* furry santa
Co-authored-by: ShizCalev <ShizCalev@users.noreply.github.com>
Co-authored-by: John Willard <53777086+JohnFulpWillard@ users.noreply.github.com>
Co-authored-by: tastyfish <crazychris32@gmail.com>