* Adds pathmaps, refactors pathfinding a bit (#78684)
## About The Pull Request
Implements /datum/pathfind/sssp, which generates /datum/path_map
/datum/path_maps allow us to very efficently generate paths to any turf
they contain from their central point.
We're effectively running the single source shortest paths algorithm.
We expand from the center turf, adding turfs as they're found, and then
processing them in order of addition.
As we go, we remember what turf "found" us first. Reversing this chain
gives us the shortest possible path from the center turf to any turf in
its range (or the inverse).
This isn't all that useful on its own, outside of a few niche cases
(Like if we wanted to get the farthest reachable turf from the center)
but if we could reuse the map more then once, we'd be able to swarm
to/from a point very easily.
Reuse is a bit troublesome, reqiures a timeout system and a way to
compare different movables trying to get paths.
I've implemented it tho. I've refactored CanAStarPass to take a datum,
/datum/can_pass_info. This is built from a movable and a list of access,
and copies all the properties that would impact pathfinding over onto
itself.
There is one case where we don't do this, pathing over openspace
requires checking if we'd fall through the openspace, and the proc for
that takes an atom.
So instead we use the weakref to the owner that we hold onto, and hold
copies of all the values that would impact the check on the datum.
When someone requests a swarmed path their pass info is compared with
the pass info of all other path_maps centered on their target turf. If
it matches and their requested timeout isn't too short, we just reuse
the map.
Timeout is a tricky thing because the longer a map exists the more out
of date it gets.
I've added a few age defines that let you modulate your level of risk
here. We default to only allowing maps that are currently
being generated, or finished generating in our tick.
Hopefully this prevents falling into trouble, but consumers will need to
allow "failed" movements.
As a part of this datumized pass info, I've refactored pathfinding to
use access lists, rather then id cards directly. This also avoids some
dumbass harddel oppertunities, and prevents an idcard from changing mid
path.
Did a few things to the zPass procs, they took args that they did NOT
need, and I thought it'd be better to yeet em.
If you'd all like I could undo the caching/can_pass_info stuff if you'd
all like. I think it's useful generally because it avoids stuff changing
mid pathfind attempt, but if it's too clunky I could nuke it.
Oh also I added optional args to jps that constricts how it handles
diagonals. I've used this to fix bot paths.
## Why It's Good For The Game
Much of this is redundant currently. I'm adding it because it could have
saved hugglebippers, and because I get the feeling it'll be useful for
"grouping" mobs like bees and such.
We're doing more basic mob work currently and I want to provide extra
tools for that work.
https://github.com/tgstation/tgstation/assets/58055496/66aca1f9-c6e7-4173-9c38-c40516d6d853
## Changelog
🆑
add: Adds swarmed pathfinding, trading accuracy for potential
optimization of used correctly
fix: Bots will no longer take diagonal paths, preventing weirdo looking
path visuals
refactor: Refactored bits of pathfinding code, hopefully easier to add
new pathfinding strategies now
/🆑
* Adds pathmaps, refactors pathfinding a bit
---------
Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com>
* Invisibility refactor (#78908)
This adds a tracker for sources of invisibility and a priority system. I
needed this for another thing so I'm doing this first since it touches a
lot of code. As for the bugs fixed in the changelog, it's only what I
noticed while going through everything and there's likely a few more
things fixed with this. This should be testmerged for a while, I'll
bring this out of draft when it feels safe.
🆑
admin: Invisimin can now be used on mobs that are already invisible,
whether through temporary or permanent effects.
fix: Monkeyize/Humanize mob transformations no longer permanently reveal
invisible mobs if they had effects making them invisible otherwise.
fix: Objects with the undertile element that have been made invisible
through other means are no longer revealed by being uncovered.
/🆑
* Invisibility refactor
---------
Co-authored-by: Emmett Gaines <ninjanomnom@gmail.com>
* Revenants can use spirit boards (#79029)
## About The Pull Request
Allows Revenants to use Ouija boards.
Cleans up some code of Ouija boards in general.
Default Ouija boards now have some more options to select.
Admins can now VV Ouija board options.
Adds a 1% chance for a Ouija board to be called Luigi board.
## Why It's Good For The Game
Revenants being excluded from spirit board fun is kinda messed up, even
though they're telepaths.
## Changelog
🆑 Melbert
add: Revenants can now use Ouija Boards
add: Ouija Boards now have more options to select from by default (and
admins can VV it to even more options)
fix: Blind people are now worse at using Ouija Boards
/🆑
* Revenants can use spirit boards
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level (#78803)
## About The Pull Request
Saw this in CI.

~~Quick fix for it--because turrets are not mobs trying to call this
proc on them will runtime. So let's give them their own implementation
of the proc.~~ Just kidding, let's refactor faction checking entirely
## Why It's Good For The Game
Fixes an issue with basic mob AI targeting and turrets.
## Changelog
🆑
fix: basic mobs will no longer runtime when trying to check the faction
of a porta turret
refactor: faction checking is now done at the atom/movable level
/🆑
---------
Co-authored-by: san7890 <the@ san7890.com>
* Fixes a runtime with AI targeting code, refactors faction checking to be at the atom/movable level
* Modular updates
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: san7890 <the@ san7890.com>
* Gives broken canisters a description (#79005)
## About The Pull Request
A torn apart canister. It looks like some metal can be salvaged with a
wrench.
## Why It's Good For The Game
It fixes a part of #79003, the rest seems like balance or qol changes.
## Changelog
🆑
spellcheck: Broken canisters now have a description
/🆑
* Gives broken canisters a description
---------
Co-authored-by: BlueMemesauce <47338680+BlueMemesauce@users.noreply.github.com>
* Remove tiered canister construction (#78909)
## About The Pull Request
In https://github.com/tgstation/tgstation/pull/66210 we removed canister
tiers, but didn't change the construction code. Currently you still have
to build an unfinished frame with 5 iron, 'upgrade' it to tier 1 with
another 5 iron, then complete it.
This combines it all into a single 10 iron recipe.
## Why It's Good For The Game
Eliminates the extra steps in canister construction, since you can't
upgrade above tier 1 any more anyways.
## Changelog
🆑 LT3
qol: Canisters can now be built in one step, no upgrading required
/🆑
* Remove tiered canister construction
* Modular paths
---------
Co-authored-by: lessthanthree <83487515+lessthnthree@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* Fixes some issues with mirrors not updating mob appearance after making a selection
* Update mirror.dm
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Add burning sound loop to bonfires and fireplaces (#78834)
## About The Pull Request
This adds a ignition sound whenever a fireplace or bonfire is initially
lit on fire. Afterwards a continuous burning loop is played. Also added
some documentation and optimized fireplaces to only `process()` when
lit.
## Why It's Good For The Game
Better consistency.
## Changelog
🆑
sound: Add burning sound loop to bonfires and fireplaces
code: Improved fireplaces to only process when lit
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Add burning sound loop to bonfires and fireplaces
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* [NO GBP] you can hit tendrils in melee again (#78856)
## About The Pull Request
adds an `else . = ..()` to spawner's attackby check so you can just
break them with your crusher in case you need to be rid of it
## Why It's Good For The Game
sometimes you just need to melee a spawner
## Changelog
🆑
fix: Necropolis tendrils and other mining mob spawners can be hit in
melee again.
/🆑
---------
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* [NO GBP] you can hit tendrils in melee again
---------
Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* Tendril Tagging - scanning necropolis tendrils with a mining analyzer updates its GPS tag (#78738)
## About The Pull Request
Makes it so that if you wave a mining analyzer over a necropolis tendril
(kinda like a geyser), its GPS tag is updated with a code for what it
spawns and a numerical designation. Unlike geyser scanning, this awards
no points, and is solely for figuring out what tendril spawns what
fauna.
<details>
<summary>Screenshots in the dropdown:</summary>



Updated: now on the `structure/spawner` level, allowing it to cover
icemoon spawners.

Updated again: now it has an associated examine thing.

</details>
Also removes the redundant `gps` variable because it got
componentalized.
## Why It's Good For The Game
I think being able to know what one of fifteen eerie signals is spawning
without having to memorize which one is spawning which thing at what
coordinate, or just vaguely going "oh so that's where the legion tendril
was today".
## Changelog
🆑
qol: Miners can now tag monster spawners (necropolis tendrils, animal
dens, demonic portals, and netherworld links) by using their mining
scanner on it, which updates their GPS tag (and/or gives them one) to
give it a numerical designation and a short identifier for what it's
spawning.
/🆑
---------
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* Tendril Tagging - scanning necropolis tendrils with a mining analyzer updates its GPS tag
---------
Co-authored-by: Hatterhat <31829017+Hatterhat@users.noreply.github.com>
Co-authored-by: Hatterhat <Hatterhat@ users.noreply.github.com>
* adds directional helpers for empty fire axe and mech removal crowbar cabinets (#78722)
## About The Pull Request
title. it's mostly so they can be used conveniently in areas you don't
want to put fireaxes, but do want an empty cabinet for reasons.
## Why It's Good For The Game
more flexible options for mappers, more convenient than making
directional variants yourself. it's what the helper is for
## Changelog
🆑
qol: gives empty fireaxe and mech removal crowbars cabinets directional
helpers
/🆑
* adds directional helpers for empty fire axe and mech removal crowbar cabinets
---------
Co-authored-by: Lamb <110322848+CoiledLamb@users.noreply.github.com>
* Adds The Hand of Midas, an ancient Egyptian gun. (#78699)
## About The Pull Request
Adds the Hand of Midas (HoM), a weapon for pirate captains.
This matchlock pistol is powered by gold rather than gunpowder.
If you hit someone with it, they will be afflicted with Midas Blight for
a duration of time that scales with how much gold is in your gun.
Midas Blight will slowly turn their blood into gold, and slow them down
depending on how much blood is in their system.
If you right-click on someone with the HoM, it will siphon all gold from
their bloodstream and recharge the gun, curing them of Midas Blight in
the process if they still have it.
The amount of gold you can get from people is meant to be ~1.5x as much
as you fired into them in the first place, if you get your timing right.
This way you can exponentially scale the power of your weapon if you can
hit your shots, with a limit of 30 Seconds on the Blight timer.
The siphon has a range of 2 meters, and if you miss a shot you can input
a gold coin into the gun to refill it with the same weak shot you
started with.
It's a little hard to explain in text so here's some video examples:
https://github.com/tgstation/tgstation/assets/66052067/d49238fc-beb2-4ba9-be0c-83e8a701c995https://github.com/tgstation/tgstation/assets/66052067/34dc23e7-2b88-4ee9-bb1e-c8067a491975https://github.com/tgstation/tgstation/assets/66052067/68a07426-ba6c-43a7-8228-132fc4b02b83
## Why It's Good For The Game
Honestly I just had the idea for the gun and thought it would be really
cool lmao.
Also because Barrel Behind the Door is one of the funniest YuGiOh cards,
the censored design is TOO GOOD.

## Changelog
🆑 Wallem
add: Adds The Hand of Midas, an ancient Egyptian matchlock pistol.
/🆑
* Adds The Hand of Midas, an ancient Egyptian gun.
---------
Co-authored-by: Wallem <66052067+Wallemations@users.noreply.github.com>
* oh yeah oh woag
* maybe we can make uncommon into that
* gunnenshooter
* hard work work
* just now realised i forgot inhands
* inhands and worn
* soundsmith tf2
* does the rifles
* puts some of the pistol suppressor images in
* awawawa
* shotgun override apparently
* pistola
* grendae launcher
* dont forget the evil one too
* yeah lets fix that
* oops
* now lets see what kind of errors compiling gives us
* should hopefully be all the compile errors
* i understand morbius now
* surely it will work now
* fixes shrapnel grenades runtiming
* also fixed grenade rangefinding
* how'd I mess thta up
* fixes various issues
* granata!!!
* haha surely this will gow ell
* should fix the grendades for real
* opening this pr then dropping dead
* uhhh fixes some stuff i think?
* armory stuff
* random mapping things pt 2
* blehh :3
* fixes it forever and ever
* whar??
* turns out that needs a tweak
* curious
* that'll work 4 sure now
* fixes vr
* come on over wont you sway with me
* mhm yup
* should hopefully be all that's it?
* missing icons
* makes the rifle more expensive
* makes the smg a little less awful feeling
* dollar store suppressors, just a week away
* mmsmrmmrsgg
* lets the shotguns actually be sawn off
* the propaganda
* hey thats important
* sprite error (comical)
* gives the casings custom materials for printing
* i love code ordering
* 'lets just be safe' ifies the weight classes of mags and ammo boxes
* reworks the sol defense selection a bit
* Update modular_skyrat/modules/ammo_workbench/code/design_disks.dm
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
* act three
* defines
* undefine
* restores the clothing
* some stuff part 3
* fixes the outfit guns not existing
* adjusts firerates and grenade launcher sprites
* fixes .35 sol revolvers??
* slightly un-nerfs the rifle firing rates
* makes the revolver jus tuse the normal sound
* makes the pistol case the right path
* its a machinegun!
* slight little tiny tweaks
* british weather service
* puts the blueshield gun box in their locker
* makes rifle less lethals a bit more normal
* slightly changes the smg burst and firerate
* the pepperball had raygun
* pepperball caliber
* forgot to push the include
* i love testmerges
* revolver sillies
* makes the kiboko's examine_more not just the rifle's
* smallens the eland and enlargens the cost of the kiboko
* lets change the machinegun a bit too why not
* gfl larp (real)
* fixes modular armory templates
* lets cases be ordered dont worry about the other stuff
* makes the takbok say its from the right company
* makes sawn off shotgun suppressors visibile
* those aren't used at all
* tweaks some of the rifle sprites
* shortens the shotgun a bit
* puts the pixel shifting out of initialize to make certain things work b
* granata!!!1!!!
* large number of weapon and ammo tweaks
* windup autofire seems broken somehow?
* fixes the inhands
* outfit sanity
* .40 armor piercing ammo box name correction
* removes var that doesnt exist anymore
* .40 armor piercing rework
---------
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <jerego1234@hotmail.com>
* Tweaks railings to stand and look taller (#78598)
## About The Pull Request

This Pull request updates the sprites used by railings, including both
directional, corner, outer corner, and rail ending sprites.
Additionally, I've placed railings on the GAME_PLANE_UPPER plane, so
that visually it looks like railings in front of a player can physically
stand in front of the player.
## Why It's Good For The Game
This ports the railing sprites I did for The Wallening (tm) onto live,
providing a 3/4ths perspective sprite, in addition to the fact that
it'll help sell the height of objects by layering in a more satisfying
way.
Not to mention, I just think they're way better than current railings,
where are both ancient and super flat sprites.
## Changelog
🆑
image: Railings have had a visual update.
/🆑
* Tweaks railings to stand and look taller
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Fix water puddle runtime when washing items (#78627)
## About The Pull Request
Runtime log:
```
[2023-09-26 03:06:01.741] RUNTIME: runtime error: Cannot read null.total_volume
- proc name: attackby (/obj/structure/water_source/attackby)
- source file: code/game/objects/structures/watercloset.dm,697
- usr: Seed-Xil (/mob/living/carbon/human)
- src: the puddle (/obj/structure/water_source/puddle)
- usr.loc: the volcanic floor (143,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface)
- src.loc: the volcanic floor (144,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface)
- call stack:
- the puddle (/obj/structure/water_source/puddle): attackby(the hairless hide (/obj/item/stack/sheet/hairlesshide), Seed-Xil (/mob/living/carbon/human), "icon-x=18;icon-y=12;left=1;but...")
- the puddle (/obj/structure/water_source/puddle): attackby(the hairless hide (/obj/item/stack/sheet/hairlesshide), Seed-Xil (/mob/living/carbon/human), "icon-x=18;icon-y=12;left=1;but...")
- the hairless hide (/obj/item/stack/sheet/hairlesshide): melee attack chain(Seed-Xil (/mob/living/carbon/human), the puddle (/obj/structure/water_source/puddle), "icon-x=18;icon-y=12;left=1;but...")
- Seed-Xil (/mob/living/carbon/human): ClickOn(the puddle (/obj/structure/water_source/puddle), "icon-x=18;icon-y=12;left=1;but...")
- the puddle (/obj/structure/water_source/puddle): Click(the volcanic floor (144,199,3) (/turf/open/misc/asteroid/basalt/lava_land_surface), "mapwindow.map", "icon-x=18;icon-y=12;left=1;but...")
```
The water puddle would runtime due to not having initialized the water reagents and volume. The error would popup whenever someone attempted to wash an item in the puddle.
## Why It's Good For The Game
One less runtime for the codebase to worry about.
## Changelog
🆑
fix: Fix water puddle runtime when washing items
/🆑
* Fix water puddle runtime when washing items
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* adds crushed can, jelly doughnut, and shipping container random spawners (#78444)
## About The Pull Request
i got bored so i made some new spawners, mainly for mappers but maybe an
admin will use them too. pics here:

firstly, this adds crushed can spawners, for if you want a random
crushed can sprite in your map, and don't really care which it is.
if you _do_ care, however - you can set the var/random_icon field on one
of these to 0, in your copy of strongdmm. then just change the icon
state to whatever specific can design you'd like it to be (ie:
"wellcheers")
here you can see a few of them in action

secondly, this adds doughnut, jelly doughnut, and slime jelly doughnut
spawners - pictured below
these use a weighted list based on flavor - more down to earth flavors
are more common, while more interesting and unique flavors like bungo
and blumpkin are a bit rarer.

thirdly, this adds a shipping container spawner. this one uses a
weighted list so the super obvious syndi corps are rare, less obvious
ones are less rare, and regular corporate ones are common. here you can
see a few.

## Why It's Good For The Game
more flexibility for mappers, more dynamic spawns... what's not to love?
## Changelog
🆑
not player facing
/🆑
---------
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* adds crushed can, jelly doughnut, and shipping container random spawners
---------
Co-authored-by: Lamb <110322848+CoiledLamb@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@ users.noreply.github.com>
* Makes some better use of passtable_on / off (#78487)
## About The Pull Request
Flicking the passtable flag has a helper to avoid accidentally
overriding passtable from another source. A few places don't use it,
which makes it plausible you're removing the flag when you shouldn't be.
So I just went through a few places I noticed setting it directly and
made it use the helper.
## Changelog
🆑 Melbert
fix: Maybe fixes some weird occurrences where you lose the ability to
pass over tables when you shouldn't, and visa versa
/🆑
* Makes some better use of passtable_on / off
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
* The Medal Epilogue: Engineering (And Medical) Now Gets Them Too (#78461)
## About The Pull Request
**Credits to @ CoiledLamb for the awesome sprites in this PR!**
CE 🤝 CMO
Finally, the last department to receive their own medal box, the
engineering department. The saga is complete, we can go home now.
Adds two types of medals: 1. For assisting the station in a crisis, the
"emergency services award" 2. For showing your atmospheric prowess with
a project, the "atmospheric mastery award"
To me, those two awards symbolize the best engineering (and medical) has
to offer. On the one hand, assisting the station and its crew in a
calamity, and on the other hand just absolutely flexing your atmos
knowledge on your boss.
CEs now have a lockbox in their locker with 3 emergency service medals
and 1 atmospheric mastery medal, and CMOs get 3 emergency services
medals in their lockbox.
3 emergency service medals may seem like a lot, but remember that
assisting the station is often done in a team and not alone. An
engineering/medical department who can work together in a crisis really
demonstrates how robust they are.
As for the atmos mastery medal, well...
### THERE CAN ONLY BE ONE !
<details>
<summary>Pictures</summary>

Upper row: emergency services award, engineering
Middle row: atmospheric mastery award
Lower row: emergency services award, medical



Sprites without funky byond scaling


</details>
## Why It's Good For The Game
medals are cute and awesome, i think you can agree
## Changelog
🆑 distributivgesetz, CoiledLamb
add: Added two new awards specifically for engineering and medical: The
"Emergency Services Award" and the "Atmospheric Mastery Award". CEs get
3 Emergency Services Awards and 1 Atmospheric Mastery Award and CMOs get
3 Emergency Services Awards.
/🆑
* The Medal Epilogue: Engineering (And Medical) Now Gets Them Too
---------
Co-authored-by: distributivgesetz <distributivgesetz93@gmail.com>
* Fixes the comments in closets.dm (#78468)
## About The Pull Request
It looks like someone in a previous PR was a little too zealous with
find-and-replace, and replaced every 'w' in some of the comments in
closets.dm with 'weapon.' This PR just fixes those comments, making them
easily readable again.
## Why It's Good For The Game
Comments should be readable.
## Changelog
No player-facing changes.
* Fixes the comments in closets.dm
---------
Co-authored-by: GPeckman <21979502+GPeckman@users.noreply.github.com>
* go go gadget hat (#78293)
## About The Pull Request
adds a hat that you can say a phrase for it to put something in your hands
* go go gadget hat
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Fixes some construction bugs with airlocks & windoors (#78261)
## About The Pull Request
1. Fixes#77981. the airlock electronics `unres_sides` and
`unres_sensor` vars were not copied onto the windoor after its
construction was finished manually without RCD. Now a windoor assembly
is spawned and it is finished by the RCD just like you would do manually
2. Windoors created via RCD did not have any electronics installed
inside them. It would only copy the `access` and `passed_name` vars onto
the windoor, leaving its `electronics` var blank. It's also fixed by the
windoor assembly
3. Airlocks constructed via RCD now uses the `finish_door()` proc of an
airlock assembly to correctly complete an airlock. This proc does
important stuff such as adding the `/datum/component/shell` component
when the airlock electronics requests shell control and the RCD was
skipping over these steps. That's fixed now too
## Changelog
🆑
fix: Manually constructed windoors have correct unrestricted accesses
applied to them
fix: Windoors created via RCD now actually have electronics inside them
fix: Airlocks constructed via RCD have the shell component correctly
installed inside them and have no other missing variables
/🆑
* Fixes some construction bugs with airlocks & windoors
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
* climbing hooks for multiz planetary maps (#78340)
## About The Pull Request
https://github.com/tgstation/tgstation/assets/70376633/6c65925e-5276-41fb-8062-cafc2de94b2f
allows you to climb up holes by clicking on tiles above the hole youre
on
examining the rope shows you your current binds for looking up
emergency variant can be found in internals boxes on planetary maps that
have multiz levels (2 uses)
a better one can be bought from cargo for 250 credits (5 uses)
syndies can buy a much much better one for 1TC or can be found in the
nukie base personal lockers (10 uses)
## Why It's Good For The Game
being fucked because you fell down a 1 tile hole in the dark and now
youre in a 1x1 box of snow on the middle of nowhere sucks
or falling down a hole and bam 30 watchers
or falling down a hole and now youre completely lost and might have to
weld your way into the station if youre lucky
## Changelog
🆑
add: climbing hooks that allow you to go up holes for multiz, found in
internals boxes (on planetary maps), the uplink, cargo and nukie
personal lockers
/🆑
* climbing hooks for multiz planetary maps
---------
Co-authored-by: jimmyl <70376633+mc-oofert@users.noreply.github.com>
* Adds a new component so that items that are "attached" to walls will now drop/deconstruct on turf destruction. (#77417)
## About The Pull Request
Adds a new component, called wall_mounted, which applies on the
wallframe objects on construction, as well as a number of wall frame
objects and structures to cover mapped in, roundstart objects of the
like.
I might have forgotten a few, but this covers the vast majority that
players will run into in a given round.
This will cover wall destruction, turf explosion, the whole nine yards,
and call that object/structure/machine's deconstruct proc. We have some
special handling for intercoms as well since they're apparently items.
So most basic case is this: You have a wall. that wall holds a sign. If
you examine the wall, it tells you that the wall is currently supporting
the **Example Sign**. It tells you that if the wall is damaged or
destroyed, the sign will **fall off the wall.** So, if you were to
welder, bomb, or hulk your way through that wall, it would call the
deconstruct() proc on that sign, and fall off the wall, leaving an item
sign at the foot of the wall.
## To-Do
- [x] Stop breaking all wallmounts when operating shuttles (Signal
conflict with COMSIG_TURF_CHANGED 😔)
- [x] Confirm that the ~~deconstruct~~ designated proc of each wallmount
falling is sane for the intended object
- [x] Clean up the contents of the wall_mounted component to reduce
copy-paste on object init.
- [x] Add it to more stuff that may just not have a directional helper?
- [x] ~~Change how APC construction is handled to make it easier!~~
- [x] ~~Don't accidently nerf malf AI into the ground I guess~~
## Why It's Good For The Game
Closes#22283.
Helps close more of #47526.
Closes#54983.
Closes https://github.com/wall-nerds/wallening/issues/90.
All of these objects are "wall mounts". It stands to reason that they're
mounted to the walls they appear to be attached to. This attempts to
rectify them by giving them a turf link to the turf they're mounted to,
and then upon changes to that turf, dropping or breaking that object.
It'll need a little more polish to get to 100%, since I can see a few
more issues to iron out first, but I'm dropping this here for now to get
some feedback and put some fire under me to get this completed.
## Changelog
🆑
add: Wall mounted objects (Things like APCs, Air Alarms, Light switches,
Signs, Posters, Newscasters, you name it) will now fall to the ground
and break or deconstruct when their attaching wall is changed or broken.
/🆑
* Adds a new component so that items that are "attached" to walls will now drop/deconstruct on turf destruction.
---------
Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com>
* Removes some food initialize arguments (#78322)
## About The Pull Request
A prior PR added some new initialize arguments to the food subtype which
did not strictly need to be there, this caused a large number of bugs as
a result of places which already had extra initialize arguments not
correctly accounting for these new ones.
As a result I have removed these again in favour of performing the
required operations in a different way (one of these arguments was
seemingly used for butter purity and literally nothing else), for this
food and also some of its subtypes.
In some other cases where it _did_ make sense to have arguments in
`initialize` I also added them to `new` so they can be passed by name.
This will hopefully make the food more maintainable if in the future if
someone does something similar, and solve any remaining bugs related to
"not passing the arguments properly".
## Changelog
Hopefully not player facing
* Removes some food initialize arguments
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* An Assortment of Positive Station Traits (#78211)
## About The Pull Request
This adds five new positive station traits, of varying weight and
impact.
**Loaner Shuttle** (Weight - 4): The shuttle loan event will occur more
frequently, can occur more times per round, and has a 1.15x payout
multiplier (only for the loan offers that pay out with credits).
**Medibot Mania** (Weight - 5): Station medibots will start as advanced
medibots, able to heal all damage types. Medbot hiring scope has
expanded to include medbots that have recently earned their doctorates
as well.
**Wise Cow Invasion** (Weight - 1): Wisdom Cow visits can happen more
than once during the round, and will occur more frequently. _"You will
give someone a piece of your mind, which you can ill afford." -Wisdom
Cow_
**Shuttle Firesale** (Weight - 4): Some emergency shuttle options are
offered at a discount. Neat!

The shuttle purchase menu has been changed to sort by initial value, so
the list order shouldn't get scrambled.
**Misplaced Wallet** (Weight - 5): A repair technician from the
between-shift crew left their wallet in a locker somewhere. Good thing
the famously trustworthy crew of Space Station 13 will get it back to
them safe and sound! Is your integrity as an honest person worth more
than free maintenance access and 500 credits?
**OH ALSO**
The station trait report will now italicize trait titles, for easier
reading.
Also, this fixes a small typo in the shuttle purchase screen.
## Why It's Good For The Game
A fair number of the positive traits are just inverses of negative
traits, and there's more negative ones than positive ones (I think).
This adds some more fun, unique-ish entries to the roster.
## Changelog
🆑 Rhials
add: Shuttle Firesale positive station trait. Some emergency shuttle
options have been put on sale!
add: Misplaced Wallet positive station trait. You wouldn't steal from a
missing wallet, would you??
add: Wisdom Cow Invasion positive station trait.
add: Advanced Medbots positive station trait. Better roundstart medbots!
add: Loaner Shuttle positive station trait. More shuttle loan offers and
more payout!
qol: Station Trait titles are now italicized for easier reading.
spellcheck: Fixes a "prerequisites" typo in the shuttle purchase menu.
/🆑
* An Assortment of Positive Station Traits
---------
Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com>
* decks of cards no longer have their own wielded var (#78260)
## About The Pull Request
we have the trait for that
## Why It's Good For The Game
Throughout UNDERTALE, we get treated to three story sequences (4 if you
include flowey's fakeout but that's not important). The first is the
intro story, telling the tale of humans and monsters, which shortly
thereafter leads into 201X, and Chara (Toriel's house has “An old
calendar from 201X.”) falling into the underground.
The second is the waterfall flashback, its contents taking place
immediately after the intro segment, as a voice (Asriel) finds the
fallen child.
And finally, the third takes place in the True Pacifist final boss.
We'll get to it in due course, and it will have its own section, but
let's address the first two. Regarding the intro, the first thought one
might have is that simply, while narratively relevant, is not a diegetic
presentation. However, We know that everything after the “201X” frame is
Chara's memory (from an outside perspective, that is,) and we also know
that UNDERTALE LOVES bringing the non-diegetic, the mechanical, the
game, INTO the narrative. Saving, RPG Stats, hell, even the
NarratorChara. Surely the intro can be as well? On top of this, what
does the intro do for the player, as the player? Well, aside from
setting the tone, the intro gives us some setting backstory. It's all
important context, and it certainly helps… but it being in the intro
sequence is not that important; It's all presented throughout the game
via diegetic signs, books, and expositional tortoise war heroes/angry
fish guardswomen. The second half is how Chara fell to the underground,
and while also setting tone and informing the player how their character
arrived. It also creates the false impression for the player that their
character is Frisk, feeding into UNDERTALE's meta narrative; “You are
not your character, and their happy ending is not yours.” If we weren't
playing Chara, this would have no narrative impact. The story beat fails
to land by showing us someone elses' character. But, sure. This could be
a purely non-diegetic intro sequence. Simply put, The 201X portion of
the intro sequence does not make sense from a diegetic or a storytelling
perspective unless we play as Chara.
Flashback number two is explicitly a canonical, diegetic flashback. It
occurs when Frisk escapes Undyne by falling down a massive pit… again.
This time, they land in the garbage zone, black out, and have a
flashback sequence of the first time Asriel found Chara. While serving
the main narrative by setting up Asriel as a character, furthering the
final twist of the meta narrative's pacifist route, and neatly
transitioning between overworld areas, it's also very explicitly
diegetic and cannot be dismissed as an intro sequence. With this in
mind, one question is raised. Why do we see this flashback? If the
player character is Frisk, this makes little sense, why would we see
someone else's flashback and not our own? Same thing applies for a Third
Entity, but even more abstract and illogical. What even are we? Sure,
you could say Chara is somehow attached to us/Frisk and that somehow we
get a flashback from Chara who is somehow knocked unconscious by Frisk
also being knocked unconscious. I used the word somehow three times.
That's not good storytelling. A simpler answer, at least in my view, is
that We Are Chara. When Frisk is knocked unconscious, we, being
ostensibly linked to them as a Spirit/Ghost/Reincarnation/Possessing
Dead Frisk/Demon/Insert fan-theory here/SOUL Fragment, have our only
connection to the world temporarily disabled, rendering us effectively
unconscious and prompting a flashback. Nothing weird with multiple
entities or memory sharing. The waterfall flashback is simply our
memory. Simple. The simplest answers are usually the correct ones.
<details>
<summary>DO NOT RESEARCH</summary>
The third sequence is a connection/extension of the first two, displayed
when we SAVE “Someone Else” during the true pacifist battle with Asriel.
To refresh everyone, here is the direct quotes, taken from the Wiki:
[SAVE]: Someone Else
Strangely, as your friends remembered you... Something else began
resonating within the SOUL, stronger and stronger. It seems that there's
still one last person that needs to be saved. But who...? ... Suddenly,
you realize. You reach out and call their name.
Asriel: “Huh? What are you doing...?”
s
It's at this point that the sequence plays. There's no narration, but we
see the sequence of interactions between Asriel and Chara. There are no
panels (except for the first) that don't contain the both of them.
Following this, we get:
You feel your friends' SOULs resonating within ASRIEL! [This is the
generic flavour text for saving all 6, before “Someone Else”, and
appears at the asterisk above as well]
[SAVE]: Asriel Dreemurr
Asriel:
> “Wh... what did you do...?”
“What's this feeling…? What's happening to me?”
Etc. etc. let me win…
During my first and consecutive playthroughs of UNDERTALE, I came to the
conclusion that Asriel's soul still “Had Some Chara In It.” Saving
“Someone Else” was saving Chara, and then you save Asriel Dreemurr after
the story sequence.
This interpretation no longer feels particularly potent to me, but in
the spirit of completeness I'll address it alongside the more reasonable
“You just save Asriel.” Assuming for a moment though, that we do “Save
Chara”, it's not unreasonable to assume that some of Chara's ‘essence'
(or whatever) was merged with Asriel's and by SAVING them, we're SAVING
the part of them that's inside Asriel.
But I don't like that theory.
Let's talk about SAVING Asriel for a moment.
What is the motivation for doing that? Why would we, in universe, wish
to SAVE him, something that the narration explicitly prompts us to do?
He tried and probably succeeded to kill us, at least once, he wants to
reset the entire timeline, he wants to erase all our friendships, all
our progress.
So, why? Well, it's simple. He's our brother. And we know better than
anyone that he's worth saving. And at the very least, there's something
about Frisk (who appears to have absolutely no personality) that reminds
him of Chara, of us. This is, by his own admission, weird;
Asriel:
“Frisk… You really ARE different from Chara. In fact, though you have
similar, uh, fashion choices… I don't know why I ever acted as if you
were the same person.”
To summarise.
The player SAVING Asriel Dreemurr works best if they are Chara, it
becomes Chara encouraging Frisk to SAVE Asriel too.
Asriel recognises Frisk as Chara throughout the True Pacifist battle
(And Beyond), despite his own admission that this is basically
unfounded. Something is causing this recognition.
In Alphys' true lab, there lies a dusty TV and a stack of VHSes. On
them, lie some of the last words Chara had ever heard from their father.
[Asgore] Chara! You have to stay determined! You can't give up... You
are the future of humans and monsters...
These tapes are not the first time they are heard. Sleeping in Toriel's
guest bed, we dream about them. Suffering a fatal injury, they echo in
our ears. Watching the tape is yet another reveal. It's the chilling
truth that in fact, the words we (if we die a lot) are so familiar with,
are in fact the words we hear on our deathbed.
Storytelling-wise, this reveal; like all the others, fails if we do not
play as Chara.
Aside from Asriel's dialogue, Chara's genocide Narration, and the coffin
in Asgore's basement, this is the only time we hear Chara's name. That
and, this following exchange.
[Flowey]
Hi.
…
Monsters have returned to the surface
Peace and prosperity will rule across the land.
…
Well.
There is one last thing.
…
One being with the power to erase EVERYTHING…
…
I'm talking about YOU.
…
So, please.
Just let them go.
Let Frisk be happy.
…
Well, that's all.
See you later…
Chara.
This, I think, is pretty explicitly definitive. Flowey comes to you. To
us. Tells us to take a deep breath and leave the happy ending intact,
then bids us farewell by our own name.
Regardless of anything else, this definitively proves Chara is the
entity with the power to reset everything by the end of True Pacifist
(Which is a power we have). Flowey positively identifies us as “Chara”,
despite his mistake we discussed in 3C. He's not talking to Frisk,
because he refers to them in the third person.
He is talking to Us. Chara.
I don't want to discuss Flowey's use of “Chara” in Genocide all that
much, because the counter-argument is blindingly simple.
“By the time Flowey first says that name, Chara has overtaken Frisk by
feeding on the power we create for them.”
Of course, under PlayerChara, Flowey's lines still make sense, and
arguably more.
Implications
At this point, I believe the evidence is sufficient to support the
theory. With this in mind, I want to discuss the implications this has
on the narrative and meta-narrative. This is where all those funny
glossary terms come into play.
The pacifist route in UNDERTALE, as discussed above, is textually quite
simple when accepting PlayerChara. The meta-text is also relatively
simple. Meta textually, the Pacifist Route is a dissection of the
suspension of disbelief, examining how we emotionally place ourselves
within fictional worlds, and are often-times torn away from those worlds
as the game comes to an end, left wanting the true emotional connection,
wanting a happy ending that cannot be good enough for us because we're
real and it's not. The reflection of this meta narrative in the textual
narrative, quite naturally flows. We, Chara, want a happy ending. But we
can't have it, it's not our happy ending. We're gone. We've been gone a
long time. Frisk's happy ending can't be good enough for us, because we
won't be around to see it. So, we're left with a choice.
To let Frisk live happily? To accept an ending that might leave us
emotionally wanting, yet preserves our emotional journey?
To reset? To refuse an ending and satiate our emotional emptiness, yet
destroy that very emotional journey we took in the process?
The choice is the same. There is practically no separation between the
diegetic and the meta.
“Can a happy ending be good enough for you?” This question applies to
us, as the real world player running UNDERTALE.exe on our computer, and
us, Chara, the long deceased human who can do little but watch as Frisk
lives the life they wish they still had, or can destroy everything for a
hollow mimicry of that very life.
This message, however, breaks down under one specific circumstance.
Where we force a Third Entity into the mix. This one decision fractures
the cohesion and creates a meta-textually dissonant mess. Now, all of a
sudden, “Can a happy ending be good enough for you?” no longer runs
parallel through both narratives. There is no reason for the Player
Entity to wish to remain, the happy ending should automatically be good
enough because it's the happy ending. Meanwhile, Chara, despite being an
inextricable representation of “A happy ending I can't achieve,” gets
absolutely nothing to do with this meta-narrative because they're just…
not you.
“we are mario in Super Mario 64, but when he says "Thank you so much for
playing my game!" that doesn't mean we aren't still playing as mario” -
PopitTart
This is where things get weird. See, in the Genocide route.. Well, we
see Chara. On Screen. Talk to us.
Now, it can easily be argued that this completely shatters the theory,
but I would disagree. I'm going to endeavour to present a textual
explanation (or two) for this. But first, I want to dissect the
meta-text here.
Now, I'm sure the idea that “The Genocide Route's Meta-Narratve is
Fading Emotional Investment and the way emotional connection with video
games can lead to the very sabotage of that emotional connection” is not
revolutionary. However, what's conspicuously absent from all of the
third entity theorising is the way that this meta-text is mirrored in
the textual narrative.
Once satisfied with a game, having extracted all lines of dialogue and
stat boosts, once reaching all endings, a user will close the game down.
And at some point, perhaps to make room for a new game or perhaps on a
new device, will leave the game uninstalled, either deliberately, or
simply as a consequence of time.
Textually, what happens in the Genocide ending?
Now we have reached the absolute.
There is nothing left for us here.
Let us erase this pointless world, and move on to the next.
The world is destroyed. So much is left unanswered here.
Who is Chara talking to?
Where did Frisk go?
How do they have this much power?
Why would they want this?
If we ‘corrupted' them, what the hell does that even mean?
What is Chara?
For now, let's talk about who Chara is talking to.
The simplest answer is “Perspective switch.” Suddenly, we're not Chara
anymore, now we are Frisk. This meets all the dialogue options and even
vaguely mirrors the meta-text. It also manages to avoid bringing a third
entity along and so is automatically better! But, I find myself still
not fully enjoying this idea.
Remember what I said about Occam's Razor?
I think there's another option. One that doesn't involve three entities,
or even two entities, just Chara. One that mirrors the meta-text to a
degree only Toby Fox could pull off. It's a weird one, and I don't fault
you if you don't get it on your first read, but bear with me here,
because things are about to get
A little
Fucking
Abstract
Let's discard any and all pre-concieved notions of anything and hold one
singular truth above all else. “Chara Is The Player.” What does this
mean for this cutscene?
Well… it means the player is talking to…
THe player?
It also neatly answers the question of motive, so let's throw that out
the skeleton-shaped hole in the window for now.
If the player is talking to the player, this frames Chara's words in a
whole new light.
Every time a number increases, that feeling… That's me. “Chara.”
This line becomes explicitly literal. The Chara on-screen is literally
the player's feeling of satisfaction watching stat increases. But this
is all meta-textual, right? What does this mean for the textual
narrative?
Here's the thing. It can't mean anything, yet means everything.
There is no way to reconcile the fact that a Textually Real character is
directly talking about what the player feels when playing a game to
completion. The barrier between Meta and Textual no longer exists. It
can't. Not here. And with this revelation, everything begins to make
sense.
Your power awakened me from death.
Our power. Our desire to complete UNDERTALE awakens Chara from death.
They become startlingly real. We imbue this fictional character with the
real world desire to consume fiction, destroying enemies and worlds as
we go, increasing our power and our stats. Video Game Accomplishments.
And UNDERTALE has just finished being consumed.
My “human soul”... My “determination”... They were not mine, but YOURS.
Chara, the textual player, acknowledges the meta-textual player's
control over the game world. A control that we surrendered. By engaging
in UNDERTALE in a fully immersed way, we have fed the Diegetic character
that is our player character, Chara. This has continued until we haul
ourself out of the Internal Mode and into the External Mode, revoking
our immersion to make the consumption of content easier, to distance
ourself from the killing.
Raising our LV.
The more we distance ourselves, the less real UNDERTALE's world appears
to us. Once it's done, we're ready to erase this pointless world and
move onto the next. There's just one problem. UNDERTALE knows about us.
It knows we exist and it will abuse that to convey meaning. By revoking
our immersion in UNDERTALE, we end up shattering the barrier between
Meta and Textual, and this occurs because revoking our immersion is a
diegetic decision. Without this barrier, WE, as a character, gain
control of UNDERTALE and use this external mode control to
Erase the world. To uninstall.
This code doesn't actually work, of course. That was pretty obvious by
the fact that it didn't delete your game. But still, this exists in the
code that makes the game window shake when Chara attacks it. This is,
quite literally, intent for Chara to delete UNDERTALE. If you didn't
think Chara was capable of uninstalling your game before, you should
now.
Who is chara talking to?
Us.
How do hey have this much power?
We gave it to them. We Are them, and we deleted UNDERTALE when we were
done with it.
Why would they want this?
We wanted to move onto a new game.
What is Chara?
Us. ( I'll come back to this.)
But wait! What about soulless pacifist?
Well, at that point, you've surrendered Frisk's SOUL to Chara, as in,
you the real player has revoked your emotional attachment to UNDERTALE
and accepted that Chara can have control over the game. You've revoked
your immersion AS Chara, you no longer see yourself a Chara and as such
Chara becomes their own being. You've surrendered, basically. But they
let you play through it. Because why not. You might get attached again,
but that's fine. All that means is that the happy ending that was once
Frisk's, that you, the player, and you, Chara, both once lamented not
being able to live, has now been surrendered to Chara. A warped,
completionist, Chara.
You don't get your happy ending. But Chara does.
You don't even get the solace of knowing someone gets their happy
ending. Because Chara gets it.
Frankly, outside of being “The Player”, I don't think the exact nature
of “Chara” is that crucial. My personal thought is that they're a SOUL
fragment, absorbed by Frisk when they fell on Chara's grave (Frisk could
absorb a human SOUL fragment because said fragment was part monster
SOUL). This fragment gives Frisk the final edge of determination needed
to SAVE.
But, ultimately, that's little more than a fanfiction. And frankly, I
think that's okay. Not everything needs to be impenetrable, as long as
there's enough there to build a stable foundation.
I'd also like to address the nature of SAVING quickly, specifically the
normal version, not the Asriel fight version. People have asked “Why do
we save if it's Frisk's SOUL.” There could be many reasons. Frisk might
just defer control to us. Because we're pushing Frisk over that
Determination limit, we might be privileged to have that control.
</details>
## Changelog
not player visible
* decks of cards no longer have their own wielded var
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
* Collected food fixes (#78190)
I went through the code and tried to find all of the remaining places we
forgot to update the arguments passed into `item/food/Initialize` after
more arguments were added to it, because there were a couple and they
caused things to stop working.
Most notably, golems were unable to eat anything because nothing would
correctly spawn "golem food".
_Additionally_ we were using a bunch of named arguments in new whenever
crafting or cooking food. This runtimed, causing the food not to init
properly.
_On top of that_ a late code review on a recent PR processed a list into
a string_assoc_list twice causing it to become null.
Finally, we were trying to check the food preferences of examining
ghosts or dogs or other non-human mobs. We shouldn't do that.
I also added a unit test for moth and golem food in the hopes that we'll
notice them breaking.
* Collected food fixes
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
* [Icebox] Remaps Arrivals and a bit of surrounding maintenance, feat. actually functioning disposals mass driver. Also nukes the Aux Base. (#78048)
## About The Pull Request
- Remaps Icebox Arrivals
- I added some weather radios as flavor in arrivals someone tell me if I
shouldn't.
- Removes the Aux Base, for it serves no purpose
- Removes the whiteship dock, it serves no purpose. Centcom Ferry now
docks at where the whiteship dock once did.
- Remaps a bit of maintenance around it, specifically disposals
- Remaps a bit of the laundry room and locker room
- Disposals now actually dumps its waste into plasma/lava when using the
mass driver
- Adds a barometric radio to Icebox Mining office
<Details>
<Summary> PICTURES HERE PICTURES HERE PICTURES HERE PICTURES HERE
PICTURES HERE PICTURES HERE PICTURES HERE PICTURES HERE PICTURES HERE
PICTURES HERE PICTURES HERE PICTURES HERE PICTURES HERE PICTURES HERE
</Summary>


</Details>
## Why It's Good For The Game
Icebox Arrivals hasn't changed since Boxstation and as soulful as it is,
it can better integrate into the map's new identity.
To start, the Aux base: Serves no purpose on the Icemoon. Literally
useless besides having an extra stack of Plasteel for cultists to steal
and an extra PKA for tiders to steal.
It's gone. In its place is a small emergency EVA room / an external
airlock access.
Disposals. Literally hasn't been touched since Box, just DUMPED trash 10
tiles away onto the Icemoon. Kinda lame.
I moved it to the lower floor and made the mass driver dump its trash
into the river of plasmalava below.
Whiteship dock. Useless, no whiteship exists on Icebox. If badmins want
to mess around with docking shuttles they have the Centcom Ferry, or for
the more adept, they can manually place a dock.
Otherwise, the changes are just general modernizing. Brings it a bit
closer to how Delta's arrivals is set up.
## Changelog
🆑 Melbert
add: [Icebox] Remaps arrivals and the maintenance around it. Aux base
out, mass driver into a plasma lake in.
/🆑
* [Icebox] Remaps Arrivals and a bit of surrounding maintenance, feat. actually functioning disposals mass driver. Also nukes the Aux Base.
* Updating automapper
* Automapper placement
* Update icebox_arrivals.dmm
* Arrivals shuttle fix
* Update icebox_arrivals.dmm
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
* Fixing this dead mouse related harddel (#78150)
## About The Pull Request
Fixes https://github.com/tgstation/tgstation/issues/78085
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23510
Fixes https://github.com/Skyrat-SS13/Skyrat-tg/issues/23506

When the foodening added some args to the constructor of
`/obj/item/food` some instances of the constructor being passed stuff
got overlooked and were not updated.
This resulted in a mob ref potentially being passed in to
`starting_reagent_purity` in some cases, ultimately resulting in this
harddel.
@ SyncIt21 this is exactly the reason I was being so paranoid with #77946
the other day. Tracking constructor uses down can be such a pain when
they aren't prefaced with a type, and are almost guaranteed to get
overlooked during refactors if the compiler does not say anything about
it.
I hate DM.
edit: and I just tested this only to find a second bug with the ice
cream. I can confirm that it is in fact working now after fixing that
one too.
<details><summary>evil ice cream</summary>

</details>
## Why It's Good For The Game
Fixing a harddel that was causing many CI failures
## Changelog
🆑
fix: fixes creamatorium not producing any suspicious ice cream, and
fixes a dead mouse related harrdel
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* Fixing this dead mouse related harddel
---------
Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
Co-authored-by: MrMelbert <51863163+MrMelbert@ users.noreply.github.com>
Co-authored-by: Jacquerel <hnevard@ gmail.com>
* ports noticeboards from the wallening (#78133)
## About The Pull Request
got permission from @ LemonInTheDark to add these here, changes virtually
nothing from the wallening branch.
tested and everything looks good. props to @ Krysonism for the sprites,
they are very very nice
basically just a straightforward resprite. it holds 8 notices now
instead of 5, and uses overlays rather than static sprites.

comparison here

## Why It's Good For The Game
noticeboard was kind of crufty and this either makes the wallening
easier, or doesn't make it more difficult. which is nice!
## Changelog
🆑 Krysonism
image: resprites the noticeboard
/🆑
* ports noticeboards from the wallening
---------
Co-authored-by: Lamb <110322848+CoiledLamb@users.noreply.github.com>
* Atmos overalls take 2 (#78007)
## About The Pull Request
This is a reinmagining of #72768 as I never was never given a chance and
feedback to polish the sprites or remake it as a suit item as was
suggested before the PR was closed.
This adds Atmos Overalls that ATs will spawn with, the sprite is based
on the GAGS overalls we already have, but I dodged the GAGS system and
made it a standalone item following the AT firesuit palette and design
to fit in.
It can carry the same gear as the wintercoat and the overalls themselves
have fire and acid armor in parity with the firesuit, but that is for
the clothing itself and not the wearer.
This is first and foremost a fashion item, as with how our game manages
fires, being fireproof on your legs and torso won't do anything with
your arms exposed...

<details><summary>This is how ATs looked at spawn before as
reference</summary>
<p>

</p>
</details>
## Why It's Good For The Game
The only "fashion" suit atmos have is their wintercoat, if an AT is not
using their "functional" clothing (MOD/Firesuit) they all default to the
wintercoat and look mostly the same and even their functional uniform
makes everyone also look the same as it covers everything (That is
something I like to be clear)
There is also the "issue" that AT and Engies have the same jumpsuit and
wintercoat with small changes, and that their department bags use orange
instead of yellow as a second color, which makes them look weird on ATs
and the CE.
So now we have something that ATs can use to look different from each
other while still keeping their job identity.
And, as I said in my previous PR, I just really want the pumbler job to
look like a plumber, when they are not firefighting at least.
## Changelog
:cl:Guillaume Prata
add: Atmos Tech now have new drip and will spawn with Atmos Overalls to
protect their clothing from gas leaks! (It will actually not protect you
against fire or leaks, but hey! It's the thought that counts!!)
/🆑
* Atmos overalls take 2
* Worn digi sprite refit
---------
Co-authored-by: GuillaumePrata <55374212+GuillaumePrata@users.noreply.github.com>
Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com>
* RCD directional window qol & wall mount patch. Code improvements (#77858)
## About The Pull Request
Fixes#77852
RCD can build wall mounts on reinforced walls
Closes#77848
Not a fix so labelling this as a qol cause it was always intentional but
now RCD can build directional windows without building a grill first.
Saving some matter units from building a grill is a plus
Added auto doc for some procs & made the extra delay when building
multiple structures into a define
## Changelog
🆑
fix: rcd can build wallmounts on reinforced walls
qol: rcd can build directional windows without requiring/building a
grill
/🆑
* RCD directional window qol & wall mount patch. Code improvements
---------
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>