## About The Pull Request
Adds in new, shiny, beer bottle sprites that look more like bottles than
what was previously available. Also adds in a new Two-Time root beer
bottle sprite cause it never existed to begin with. As well as a brand
new Carp Lite bottle.

## Why It's Good For The Game
Better looking sprites. Simple as that. Also fixes a missing sprite and
adds a different sprite for a variation to beer.
## Changelog
🆑
image: Added new Space Beer sprite
image: Added new Carp Lite sprite
image: Added new Ale Bottle sprite
image: Added new Two-Time Root Beer sprite
/🆑
Powerful or dangerous admin verbs should have some prompt or forced
runtime input to lower the attack surface once somebody finds a href
exploit since topics can trigger commands and verbs.
Weakens stickman summoned from the summon stickman spell.
Its very toxic to play against it only encourages spamming stickmen who
die from 4 laser shots(even after the laser gun buff) This will lower
them to be either 1 hittable or 2 hittable depending what weapon you
have available as exchange of how fast they can be summoned.
Most people who do paper wizard tend to cheese it one or the other way
either trough atmos or having self revives as for example a changeling.
🆑 Improvedname
balance: Weakens summoned stickmen to be 1 or 2 hit
/🆑
## About The Pull Request
Bottle volume was increased but not for pill press.
## Why It's Good For The Game
I mean, it should be this way?
## Changelog
🆑
qol: pill press' max volume for bottles are 50, as the volume of bottles
itself.
/🆑
## About The Pull Request
This makes instrument delivery beacons fit in pockets.
## Why It's Good For The Game
In a round I had both a door remote and an instrument delivery beacon.
The door remote, however, would fit in my pocket, while the instrument
delivery beacon wouldn't. The door remote seems like a far higher impact
item, so it seemed odd to be that the beacon was balanced to take up
much more inventory, and that they use the same graphic makes this feel
counterintuitive.
## Changelog
🆑
qol: Instrument delivery beacons now fit in pockets.
/🆑
## About The Pull Request
Reverses the logic of an early return in the EMP proc of arm implants.
Rather than returning if the implant is robotic, it returns if it is
organic.
## Why It's Good For The Game
It appears arm implant emp act was broken for about...like 2 years? But
today, I discovered that my vorpal scythe was EMP vulnerable.
I thought 'Oh someone didn't do a proper check that's an easy fix'
Turns out, robotic implants were immune to EMPs this whole time, but the
very few organic arm implants were vulnerable instead!
Well, it's fixed now. I blame the penguin maint.
## Changelog
🆑
fix: Arm implants properly handle EMPs depending on whether it is
robotic or organic. No longer can you EMP an organic organ!
/🆑
## About The Pull Request
New item for wizards, ~~the Staff~~ Scepter of Runic Vendormancy.
With it, you can summon Runic Vending machines to block your enemies,
push them 2 tiles back around the summoning tile, throw the vendors 4
tiles away to squash them or simple detonate the vendors for direct
damage against enemies within a 2 tile range.
The scepter has 3 charges that can be recharged after a "long" channel
so while powerful, it is a tactical weapon and wizards can't directly
steamroll the crew with endless vendors. (Unless they buy multiple
scepters, but that is just funny.)
Also, there is a bug with the throw... I copied how baseball bats deal
with knockback, but they consistently don't push the vendors back, just
spin them on the same tile... I appreciate if anyone has any idea on how
to fix or change that to a better system.
## New changes I made
The vendor has a random set of REAL wizard robes and hat, sandals and a
foam vendor scepter as products to sell now.
This gives the crew some real armor, and if it is considered too much, I
can swap it for the fake versions.
IMO the real clothes work as the perfect bait for the crew to approach
the vendors and get exploded in the process, and while a random
assistant might get real wizard armor to go valid hunt the wizard, the
crew might just mistake them for the real wizard and beat them to death,
which is too funny.
## Why It's Good For The Game

About a year ago I played Stoneshard, and it has such an amazing
Geomancy Wizard that I wanted to port some of its gameplay to SS13 as
our wizards, while funny and destructive, are kinda simple to play...
Summoning and blowing up rocks was nice, but I randomly had the idea of
summoning Vendors while at work and vendors squashing people has become
such an iconic SS13 thing to me that I had to stop being lazy and start
working on this.
Something, something, enviromental combat wizard.
## Changelog
Gonna polish the changelog later too...
🆑 Guillaume Prata
add: New Wizard spell branch: Vendormacy! Summon runic vending machines
with your Vending Scepter, force push them on your enemies to squish
them or blow them up while they are busy buying from the machines.
/🆑
---------
Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com>
This adds two new dropdown menus for AI preferences with holograms and
status displays. It also sets these preferences if admins transform a
player into an AI.
## About The Pull Request
As explained in
https://github.com/tgstation/tgstation/pull/74696#discussion_r1166099547
> no, bad 🗞️
> if this is in ui_act the ui datum holds a reference to the user mob,
use that. We do not guarantee that ui_act will be called off topic()
forever (it runs at the end of ticks so is possibly gonna get verb
delay'd at some point)
So yeah let's do that
## Changelog
🆑
code: makes sure cargo computer doesn't use `usr` var inside `ui_act()`
which could cause undefined behaviour
/🆑
## About The Pull Request
Title.
I saw a comment on psyker code complaining about these species traits
(which admittedly, they suck) and heeded the call to turn all of this
crap into something defined almost entirely by the head bodypart.
## Why It's Good For The Game
Potential to simplify species code further in the future, by delegating
more visuals to bodyparts, which is where most of them should be
handled.
## Changelog
Should not be player facing, unless I fucked up.
---------
Co-authored-by: Time-Green <timkoster1@hotmail.com>
## About The Pull Request
Ok so we currently have 1 (count em) border object that wants to smooth
with other border objects. That's the tram window.
It currently does this manually, via map edits, but that's kinda crappy
so lets be better.
This pr adds a new smoothing mode to handle border objects.
Unlike other smoothing modes, it returns a bitfield of directions the
border object connects in.
I do this by memorizing a calculation of which dirs "connect" at init,
and reading out of a global list with border object direction, direction
between objects, and if it's a border object, the other object's dir.
I'm doing this primarily because it's become useful for wallening (a
spriter saw the tram thing and is doing the same thing to pod windows,
and I want to support that)
I do think it's potentially useful in other applications too tho, and I
like dehardcoding tram windows.
Also fun bonus (or maybe downside), it's nearly 0 cost because I pulled
the bitmask smoothing define into 2 subdefines, and am swapping the
handler one out to do what I want.
Oh also I got rid of a for loop in smoothing code, redundant and costs
time in list iteration
[Moves tram windows over to the new border object
smoothing](https://github.com/tgstation/tgstation/commit/114873679c94d680788edee9665fa18dba8108c0)
Also replaces some typepath chicanery with a setDir override, for
redundancy in future
Oh and there's a update paths script too, to be nice
## Why It's Good For The Game
More visual possibility in future, fixes a hack we have currently, and
makes some spriters happy.
## Changelog
🆑
fix: Dehardcodes some stuff with tram windows, they'll be easier to map
with now
refactor: Border objects can now smooth with each other. I'm sure
something cool will come of this
/🆑
## About The Pull Request
Unused vars have 0 memory cost, and the ref and list lookup here is
REALLY expensive, for both init and foam spreading.
## Why It's Good For The Game
Saves 0.2s off a station flood on meta, and 0.17s off init. More time in
other qdel heavy areas
Pulled off #76104 for the sake of cleanliness
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
[Reduces timer insertion cost by
80%](https://github.com/tgstation/tgstation/commit/c9e5b285ed74e60108fddd3f6b45d6d3995c92a8)
Timer name generation involved a LOT of string shit, some in ways where
the string only existed for a moment.
This costs a good bit of time, and can be reduced with only minimal
impacts on the end product, so let's do that. Includes a compile flag to
flip it back if we ever have trouble in future.
This is about 0.1s off init, since we do a lot of timer stuff then too
[Removes STOPPABLE flag from QDEL_IN, moves it to a bespoke
macro](https://github.com/tgstation/tgstation/commit/e7a5d7f2a78fcf0dce4742ced258c9505411b202)
Its a waste most of the time, tho I would LOVE to analyze at compile
time to work out if we care
## Why It's Good For The Game
I like it when we don't spend all of our cpu time just setting the name
var on timers. that's good and not bad.
This saves time fucking everywhere. 15% off explosions, 0.1 seconds off
init, bunch of time off foam. it's just good.
Cherry picked out of #76104 since that was too cluttered (sannnnnn)
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
## About The Pull Request
The issue was map verification calling build_cache, which uses the
define which enables/disables init values on sleep. We avoid this by
using a var on map datums and using that to enable the init value
modification only when we are actually loading stuff.
Also fixes a bug in clear_tracked_initialize() where it being called
with no values lead to bad values/potentially overriding initialized on
accident.
Also also I forgot how for loops worked so this would not have worked
regardless
## Why It's Good For The Game
Code should like, function
#72736 added the firefighter gloves to atmos techs which lets them quick
carry wounded people faster.
Firefighting RP is fun, so this PR just gives the quick carry module to
the Atmos MODsuit. Now they don't miss on the best part of the job!!!
it was missing a GAS_FILTERING lmao lol even
## Why It's Good For The Game
fixes#75218
that also probably means that plasmeme special filters in the sechailers
were not operational lmao
## Changelog
🆑
fix: fixed sechailers/SWAT masks not using the installed air filter
/🆑
i should have adjusted these in my previous PR that was touching this
equipment lol thus the no gbp
also makes the `ui_act()` not use `usr`
if my calculations are correct the consumption rates per tick should be
the same — 5% of a sheet when active and 0.65% when idle
## Why It's Good For The Game
fixes#76132
## Changelog
🆑
fix: fixed mecha generators using way too much fuel due to using the old
values of material units per sheet
/🆑
## About The Pull Request
Targeting datums will target non-living movables which have livings
inside, such as mechas.
So this casting to living as a bad assumption.
## Changelog
🆑 Melbert
fix: Fix runtimes from Bileworms targeting mechas (or other objects
people are hiding in)
/🆑
## About The Pull Request
Runtimed from `90 / null` here.
What's the point in a `?` sanity check if you don't default it to any
values? Come on guys
## Why It's Good For The Game
Bugfix
## Changelog
🆑 Melbert
fix: Fix shooting guns without a magazine loaded making no fire sound
effect
/🆑
## About The Pull Request
The old system was... ok, but the stack trace was unfortuante, and the
potential to double remove was silly.
Let's use a list of source, value instead, to block overremovals and
properly support different load states
## Why It's Good For The Game
Prevents a bug a goodhearted bagilmin showed me where shuttles would
randomly just fail to load.
Calling clear twice should not be a failure
## Changelog
🆑
fix: Maps loaded post init will no longer randomly enter a failed state.
Hopefully.
/🆑
## About The Pull Request
Microwaves can be triggered by having their wires pulsed, such as EMPing
or being pulsed by a signaler.
This results in the cook cycle starting, but without passing a `cooker`.
This is valid behavior, so I'm patching these runtimes with some sanity
checks. Also adding documentation for the future.
## Why It's Good For The Game
Bugfix
## Changelog
🆑 Melbert
fix: Fixed EMP'd / signaled microwaves not running as they should
/🆑
## About The Pull Request
The axolotl sprites were based on the lizard sprites so now the axolotl
inhands and onheads will fuel the lizard equivalents to complete the
circle of life.
**Lizard inhands and onheads:**

one of the sprites had a mistake and I didn't wanna redo the entire
picture so here's the updated sprite:

**Space lizard inhands and onheads:**

The held weight of lizards has been changed to tiny because they look
like they could fit into your pocket. This value wasn't specified before
and it seems to default to normal weight, which seems a bit much for a
creature that's about the same size as a mouse.
## Why It's Good For The Game
More cute little animals to hold on your hands. And they can fit into
your pockets now too!
## Changelog
🆑
image: added lizard inhand- and onhead sprites
image: added space lizard inhand- and onhead sprites
fix: changed held weight class of lizards from normal to tiny
/🆑
## About The Pull Request
**1. Craftable & Removed from RPD UI**
1. Air sensor's are now craftable
2. You can turn them on/off with hand. Even though turning off the
sensor will change it to a diffrent type[from `obj/machinery/air_sensor`
-> `obj/item/air_sensor`] it's I/O port's are sill preserved when
turning them on although you have to assign it a new name again which is
usefull if you want to change the sensor's purpose in game.
3. They can now only be deconstructed by a welding tool and should be
wrenched in place to turn them on.
4. Turned off air sensor's once unwrenched can be picked up like any
regular item
5. Air sensor's are removed from the RPD UI because they don't go with
pipes so it logically doesn't make sense to group them with pipe related
device's
Removed unused code in the process
https://github.com/tgstation/tgstation/assets/110812394/3439a0f3-9c48-43ac-8f4b-98135435ec13
**2. New ID System**
The problem with air sensor's is that each sensor is assigned a unique
ID which is then stored in `GLOB.objects_by_id_tag` list. Each sensor
name it's assigned based on the gas it's trying to sense(for naming only
even though it can detect other gases) So if 2 sensor's having the same
ID are made they will overwrite each other in this list leaving one
sensor orphaned in the world which cannot be referenced because it's
value was overwritten by a new sensor having the same ID in this list.
The Solution? Rather than having all atmos computer's look up sensor's
from this 1 global list make each computer keep track of all sensor's
it's responsible for in it's own local list[which i called
`connected_sensor's`] this way 2 sensor's can have randomly generated
names in the global `GLOB.objects_by_id_tag` list but the computer will
know what sensor to look up in this list based on the stored sensor ID's
in the `connected_sensor's` list
Basically what i am getting at is now you can make as many air sensor's
as you wish but you will know have to connect that sensor to the
computer using a multitool.
Notice in the video how i made 2 sensor's called `Supermatter Chamber
Sensor's`] and every time you try to connect an sensor which has the
same name[`Supermatter Chamber Sensor's` in this case] they will
ovewrite the old sensor in it's list as shown in the video
https://github.com/tgstation/tgstation/assets/110812394/b5283c3b-c8a1-4b94-a6a8-8ba7a0007615
**Why it's good for the game**

I agree. Also air sensor's taking up a full Tab/Section in the RPD UI
wasted a lot of UI space so that's removed now. Also making the air
sensor's wrenchable and pickable item's was also requested in
https://github.com/tgstation/tgstation/pull/72019#issuecomment-1355499873
so you relate them to device's like meter's
Another huge issue was that the number of air sensor's you can make in
the world was limited because each sensor in the world must have a
unique ID but that's finally fixed now so yeah make as many sensor's as
you want.
## Changelog
🆑
add: air sensor's are craftable
refactor: air sensor's can now be turned off by hand and can only be
deconstructed by a welding tool
refactor: removed `Params()` proc
qol: unwrenched air sensors can be picked up & recycled like regular
item's
del: air sensor are removed from the RPD UI
qol: air sensor's are no longer restricted by their unique ID's which
mean you can craft as many air sensors as you want.
/🆑
---------
Co-authored-by: Time-Green <timkoster1@hotmail.com>
## About The Pull Request
Whoever made the relay_attackers element, thank you for streamlining the
bucketload of signals that had to be registered for everything that
counted as an attack. It's very much needed.
Beside, I only had to add a few flags to be sent by the
ATOM_WAS_ATTACKED signal, so that stamina and shoving doesn't
automatically make the attacker guilty.
Oh, one more thing I have forgot to mention. Currently medical staff is
immune to "guilt" altogether, while the comments suggest they should be
affected by declaration but not attacking. This PR also covers that
issue.
## Why It's Good For The Game
This will fix#75904.
## Changelog
🆑
fix: Fixed the honourbound trauma not reacting to attacks from basic
mobs
fix: Fixed the "Declare Evil" spell not working against the medical
department.
/🆑
## About The Pull Request
#76131 was merged instead of drafted when asking for this change
Look at this the items get removed right yippee yahoo

## Why It's Good For The Game
~~maintainer told me to~~ Makes removing stuff from the cutter actually
work right
## Changelog
No player-facing changes
adds the Vorpal Scythe, a special chaplain null rod variant, replacing
the Reaper Scythe, a not so special null rod variant.
When you choose the vorpal scythe, it comes as a shard that you implant
into your arm, similar to a cursed katana.
Once implanted, you can draw it at any time like an arm implant.
However, sheathing it again presents some problems. (Also, implanting
the organ gives you ``TRAIT_MORBID``, which I'll explain in a bit)
The Vorpal Scythe has 10 force, one of the weakest null rod variants for
force that isn't a joke null rod. However, it has exceptional armor pen
and also has 2 tiles of reach. So quite unique.
It also has a special beheading ability when you right-click someone.
This borrows some code from amputation shears, functioning pretty
similarly, except with a few additional ways to speed up the action and
restrictions. (It takes 15 seconds baseline to behead someone standing
and conscious, and speeds up or slows down based on factors such as
incapacitation and whether or not our scythe is already empowered)
When you successfully behead someone with a mind, the vorpal scythe
gains 20 force and can be safely stowed and drawn for 2 minutes.
Performing more death knells like this will reset the timer.
If it has not performed its 'death knell', or you haven't hit a living
mob, then it will cause severe damage to you if you ever try and stow it
(or its forced back into your arm). Just hitting a mob with the scythe
will sate it for 4 minutes. Unless it is a non-player monkey. Horrible
things. Just hitting mobs does not reset the timer on empowerment.
What this means is that the chaplain may be more hesitant to simply draw
their weapon on people. It also means that potentially, the chaplain
will not always have magic immunity, since they may end up stowing the
weapon away and be reluctant to draw it on a whim without either taking
damage for sheathing it without hitting something, or dealing with
having one less hand up until they can.
While empowerment only happens when you behead mobs with a mind,
beheading monkeyhumans and other mindless humans subtypes causes their
heads to become haunted! It's mostly harmless and largely just SpOoKy.
We don't want heads with actual players in them to go floating off to
space. (Does not work on monkey heads for sanity reasons)
When you have the Morbid trait, you think creepy stuff is cool and hate
saving peoples lives. You get a mood boost from graverobbing, autopsies,
dissections, amputations (including beheadings with the scythe and
amputations with the shears) and revival surgery. However, you get a
mood penalty when you tend wounds on the living, as well as a hefty
penalty when you perform CPR or defibrillate someone. I was thinking
Victor Frankenstein when I was choosing which actions had an associated
moodlet, so anything that I might have missed would be appreciated.
You also count as potentially cool with regards to haunted objects.
Ghosts think you're neat. (Revenants probably will still kill you if
they had the chance)
## About The Pull Request
Adds wound armor to ALL jumpsuits that were missing it.
Every jumpsuit, by default, has 5 wound armor. However, because for some
godforsaken reason armor datums don't use subtypes (seriously, the
fuck?), the vast majority of jumpsuits weren't updated to have anything
in case they overrode the base armor.
This includes critical oversights such as any nonstandard jumpsuit meant
to be armored (Tracksuits, turtlenecks, admin suit, tgmc suit). This is
especially critical a problem on nuclear operatives, who face a lot of
combat every round and need that wound armor.
Any nonstandard jumpsuit that also protects from departmental hazards
doesn't recieve the wound armor, this is seemingly reasonable with, say,
medical jumpsuits, but starts to get weird when it includes engineering,
botany, the RD, CMO, and CE..
Plasmaman envirosuits also don't by default. This may or may not be on
purpose but I added it on them just in case.
Armored jumpsuits that didn't have the wound resistance now have 10,
instead of the base 5, since they're meant to be, well, armored. This
might also make durathread useful for something (lol, as if)
## Why It's Good For The Game
Consistency. It's very inconsistent that 'wound' armor randomly pops in
and out of places ingame. It requires you to think like a space whale to
figure out what's the Best Combat Uniform rather than picking what
SHOULD be the right choices.
## Changelog
🆑
fix: Adds wound armor to ALL jumpsuits that were missing it
/🆑
## About The Pull Request
Rockets can't embed anymore and are now blunt objects (so they cause
blunt wounds instead)
This is what could happen before:

## Why It's Good For The Game
I've been told that the embedding is not intentional, so this PR fixes
an oversight
## Changelog
🆑
fix: Rockets can no longer embed in people and cause blunt wounds
instead of piercing
/🆑
Changed hardcoded matter bins values to use defined
`SHEET_MATERIAL_AMOUNT` for following stuff: autolathe, protolathe, mech
fabricator and component printer.
`Material Access Bar` and `MaterialIcon` used for protolathes, circuit
printers and etc. now also use defined `SHEET_MATERIAL_AMOUNT`, via
static ui data, to prevent same issues in future.
Also changed some notes in /// parts just because why not.
**Problem Reproduction**
1. Find/Make any instance of `/obj/machinery/modular_computer`
2. Try opening its UI
3. Doesn't work
**The Solution**
Assign the processor's `physical` var with the computer that it's inside
in.
## About The Pull Request
Fixed being unable to reimburse syndicate spawners via uplinks. This
includes nukie reinforcements, cyborgs, and holoparasite injectors.
Turned TC reimbursement into a bespoke element.
Tuned demon's blood message when there's no ghosts to pick to be a
little more understandable and sensible.
## Why It's Good For The Game
> Fixed being unable to reimburse syndicate spawners via uplinks. This
includes nukie reinforcements, cyborgs, and holoparasite injectors.
This bug was, to my knowledge, introduced with bubby traitors when
uplinks were turned into components, as the code no longer supported it
due to what I presume to be an oversight, since there's plenty of
references to it ingame still.
> Turned TC reimbursement into a bespoke element.
Seemed like the best way of doing this. Since for some godforsaken
reason attackby() is one-way only (no attackto() ), the uplink component
sends a signal to any item hit with it instead.
## Changelog
🆑
fix: Fixed being unable to reimburse syndicate spawners via uplinks.
This includes nukie reinforcements, cyborgs, and holoparasite injectors.
refactor: Turned TC reimbursement into a bespoke element.
spellcheck: Tuned demon's blood message when there's no ghosts to pick
to be a little more understandable and sensible.
/🆑
## About The Pull Request
Fire stacks status effect no longer uses a weakref for the mob light, I
am pretty sure there was no real reason to use a weakref there.
Deleted weird luminescent glow dummy, now it just uses the standard
moblight obj.
Put all /obj/effect/dummy/lighting_obj together in a single file and
added a comment explaining why they exist.
(I severely dislike the /obj/effect/dummy typepath, but I am very much
unsure if just replacing all of them with /obj/effect/abstract would
break shit)
## Why It's Good For The Game
Code organization good
Remove welder fuel usage from all actions except attacking and leaving
it on
most welder tasks require a minimum of 1u of fuel, some longer tasks
require a minimum of 2 or 3u welders now drain 1u every 5 seconds
they're active
## About The Pull Request
Prior to this PR welder fuel usage was random, a lot of tasks didn't use
any welder fuel and welders were basically near infinite so long as you
didn't use them for combat, it took 26 seconds of activity to drain 1u
of fuel, that means an emergency welder alone could run for 5 minutes
straight before needing a refuel
After this PR all welders will drain 1u every 5 seconds instead of every
26 seconds, but welding objects won't require extra fuel anymore, making
the fuel usage much more consistent.
resolves#55018
## Why It's Good For The Game
Actually makes fuel tanks useful and relevant without making it
obnoxious to do repetitive quick tasks like turn rods into plates,
there's actually a reason to upgrade off the emergency welder now since
it lasts 50 seconds rather than 5 minutes
## Changelog
🆑
qol: Welders now have a more consistent fuel usage
/🆑
## About The Pull Request
Apps now properly delete themselves when removed, so they don't exist in
nullspace anymore.
Chat client now actually updates the uid, because its New() didn't call
parent.
Deletes the 'console' subtype of modular computer
Updates how downloading and transferring files are handled
Fixes being able to infinitely upload apps to a disk
## Why It's Good For The Game
Fixes some more bugs I found with apps and prevents spamming apps in a
disk.
## Changelog
🆑
fix: Maintenance data disks now properly transfer from PC to disk
fix: Disks can no longer be flooded with the same app repeatedly.
/🆑
## About The Pull Request
Slots the chef equipment vendor into categories, since it was pretty
cluttered with a variety of things.

## Why It's Good For The Game
Main page had a combination of clothing, tools, utensils, condiments,
skill chips, and books. What a mess
## Changelog
🆑 Melbert
qol: Categorizes chef vendor
/🆑
## About The Pull Request
[A common problem with explosions is an overabundance of
sleeping](https://github.com/tgstation/tgstation/commit/6499077a09469ff401c224c0510bc184c663b118)
In an attempt to solve this issue, let's not continue to sleep and do
work in door closing if the door is already deleted
(This is caused by firelocks activating due to other adjacent objects
deleting, triggering an atmos update, and closing the firelocks before
they get bombed. I don't have a elegant way of resolving that core
problem, so let's just minimize the impact)
[Nukes a stupid sleep loop in airlock
code](https://github.com/tgstation/tgstation/commit/5b16360520526d6f5aa3b511049456b74f33f430)
When an airlock was depowered, it would enter a sleep loop, decrementing
its delay by 1 second every well, one second, so long as it had the
right wires flipped
This is very stupid
Instead, let's use signals off wire changes and a combo of timer and
remaining time var to do this with JUST a timer
Most of the changes here are just swapping over wires to a setter to
make signal registration work\
## Why It's Good For The Game
Less sleeping around explosions means less dropped ticks after a bomb
goes off. Good just in general
Also this excises dumb boomer code and adds some hooks for other devs to
use (we should use wires more man)
## About The Pull Request
Currently, photocopiers parse the `blanks.json` file in `ui_data` and
send the entire thing to the client. Then, the client sends the entire
blank back to the server to commit it into the paper, in raw form. This
is a detriment to server performance. This PR puts paper blanks into a
global associative list that uses the `code` field as an index.
Printer toner color for some reason would check if the charges were
below 10, even though default cartridges only go up to 5. The value has
been changed to 2, which is still a high number. Toner cartridges are
scams.
Also photocopiers now have to hold actual paper and no longer
materialize it out of thin air. It's done similarly to paper bins, where
there is a starting integer value dictating how much paper is inside so
paper is lazily loaded into existence, as well as a paper stack list
that holds newly inserted paper. Photocopier paper starts out at 30 and
can go up to 60.
Additionally, the photocopier copying loop has been refactored to be a
lot more sane. The previous version ~~ab~~used timers for copying,
making a timer for each i interval to num_copies. I changed it to be a
proc that loops from i to num_copies, sleeping for a short amount of
time whilst playing a sound. This is a lot tidier and nicer since we
don't deal with timers, plus we get to play a printing sound too.
`make_thing_copy` now works by returning the copied object, or null if
something went wrong, so we know when to continue or exit.
This PR refactors UI code so entire blanks aren't sent to the client,
instead relying on the IDs for the blanks. Also, photocopiers now store
actual paper and also run out of it instead of materializing some out of
thin air.
Also, while I am already editing `blanks.json`, I added the Access
Request blank because people asked me to.
I can revert the config changes if it's too much of a hassle.
<details>
<summary>Screenshots/Me testing a printer for 5 minutes</summary>

https://github.com/tgstation/tgstation/assets/47710522/11c4b63b-7cfc-4425-96c6-970d4a5f51cahttps://github.com/tgstation/tgstation/assets/47710522/2f7a4a15-3400-49f3-9aca-c4d04c886bechttps://github.com/tgstation/tgstation/assets/47710522/14afe7d9-53ea-4d17-870f-1e90319284eb
</details>
<details>
<summary>Access Request form</summary>



</details>
## Why It's Good For The Game
Speeb. Also having photocopiers relying on an ingame stock of paper is
also very cool.
## Changelog
🆑 distributivgesetz
add: Photocopiers now use actual paper instead of materializing it out
of thin air.
add: Adds the "Access Request" form.
refactor: Greatly improve the reliability and performance of
photocopiers.
qol: Changed the blanks so they look nicer, whilst also fixing the
lawsuit request form.
qol: Nanotrasen's bureaucracy division has ""improved"" the quality of
their printer toner after many complaints from furious customers.
/🆑
## About The Pull Request
Just swaps the Hemo and Retractor steps to make it more in line with
other surgeries
## Why It's Good For The Game
This might just be me but I always forget that the order is different
and it throws off my muscle memory
## Changelog
🆑
qol: Abductor organ surgery steps shifted around to match other
surgeries
/🆑
## About The Pull Request
That's all it is, really. They went quiet because the logic check was
done backwards.
## Why It's Good For The Game
Wheelchairs making sounds when they're meant to is good.
## Changelog
🆑 GoldenAlpharex
fix: Wheelchairs now make noises when they're meant to again, and don't
make noises on the tram nor on conveyor belts
/🆑
<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
Was meant to just fix a runtime in the context screentips for
papercutters but now I've got several things fixed:
- Fixes context tips runtiming
- Fixes some context tips that just didnt ever appear
- Fixes the icons not updating when removing papers/blades
- Moves the blade to an overlay
- Adds a list of blocked paper types that don't fit: paperslips, NSpect
inspections, calling cards, pamphlets, and sparring contracts
- Fixes papers and blades not actually removing when removed
- Fixes being able to add papers when one is already inside
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->
## Why It's Good For The Game
Fixes
https://github.com/tgstation/tgstation/assets/76465278/c30127d3-24b0-4a1d-8272-76af68b24469
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->
## Changelog
<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and it's effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->
🆑
fix: fixed the context tips on papercutters
fix: fixes papercutters not properly updating their icons, removing
their stored papers/blades, and eating papers when one is already stored
/🆑
<!-- Both 🆑's are required for the changelog to work! You can put
your name to the right of the first 🆑 if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->
## About The Pull Request
https://github.com/tgstation/tgstation/assets/7501474/a2d83ce8-eba1-42d9-a1f8-9d73f7c40b21
Adds shuttle events! Stuff can now start to happen outside the shuttle,
either benign or spicy (but usually just fun to watch)!
## Why It's Good For The Game
The shuttle escape sequence is an important part of the game, uniting
about every player surviving player. Recently, #71906 has made the
escape sequence more forgiving as well as more interesting by
conditionally doubling the playing field. The area outside the shuttle
is still mostly empty though, except for the few people being spaced,
daredevils and the occasional epic space fight.
This PR adds adds some space events to spice up the outside of the
shuttle! This both gives people something too look at, making the escape
sequence feel less static and more lively, as well as give people a
reason to go outside and get the full experience of ~being decapitated
by a meteor~ swimming with the fishes!
<details>
<summary>Shuttle Events</summary>
**Friendly carp swarm**
Spawns a group of carp that flies past the shuttle, completely friendly
unless provoked.
**Friendly meteors**
Spawns a lot of strong meteors, but they all miss the shuttle.
Completely safe as long as you don't go EVA
**Maintenance debris**
Picks random stuff from the maintenance spawn pool and throws it at the
shuttle. Completely benign, unless you get hit in the head by a toolbox.
Could get you some cool stuff though!
**Dust storm**
Spawns a bunch of dust meteors. Has a rare chance to hit the shuttle,
doing minimal damage but can damage windows and might need inflight
maintenance
**Alien queen**
One in every 250 escapes. Spawns a player controlled alien queen and a
ripley mech. RIP AND TEAR!! Really not that dangerous when you realize
the entire crew is on the shuttle and the queen is fat as fuck, but can
still be fun to throw people around a bit before being torn to shreds.
**ANGRY CARP**
Once in every 500 escapes. Spawns 12 normal carp and 3 big carps, who
may just decide to go through the shuttle or try and bust through the
window if you look at them wrong. Somewhat dangerous, you could stay
away from the windows and try to hide, or more likely shoot at them and
weld the windows
**Fake TTV**
Lol
**Italian Storm**
Once in every 2000 rounds. Throws pasta, pizza and meatballs at the
shuttle. Definitely not me going off the rails with a testing event
**Player controlled carp trio**
Once in every 100 escapes. Spawns three player controlled carp to harass
the shuttle. May rarely be a magicarp, megacarp or chaos carp. I can't
honestly see them do anything other than be annoying for 3 seconds and
die
There are some other admin only ones: a group of passive carps going
directly through the shuttle and just being little shits, and a magic
carp swarm
</details>
Events are selected seperately, there isn't a crazy weighting system,
each just has a chance to run, and multiple could run at once. They also
don't immediately trigger, so people can get settled a bit, and to make
sure just waiting out the more dangerous ones is still a valid strategy.
## Changelog
🆑
add: Adds shuttle events! If shuttle escapes weren't exciting before
(doubtful), they definitely are now! I'm joking it's mostly an
atmosphere thing.
admin: Adds an admin panel to interact with shuttle events, under the
Events tab: Change Shuttle Events
fix: Objects spawned in hyperspace will properly catch hyperspace drift
/🆑
There's a few things I'd like to do later (another PR) (honestly anyone
can do them because I suck at follow-ups), because this is too big as
is:
- Hijack triggered shuttle events
- More events (got a lot of cool suggestions, but I'm putting most of
them on hold)
- Maybe stration announcements if some more dangerous ones get added
- Structures appearing next to the escape shuttle???
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
Currently you can put cargo's budget card into your PDA, go into NT Pay
and send over the budget to any pay token you want including yours. This
just adds a check to ensure you aren't using that kind of card as
withdrawal source.
## About The Pull Request
Fixes#60047
## Why It's Good For The Game
Hard del and bricking things are bad.
Guess it's still an issue that burning tropheys are a thing but Shrug
## Changelog
🆑 Melbert
fix: Fixed hard delete with Kinetic Crusher causing the projectile
function to brick
/🆑