<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->
## About The Pull Request
Fixes the knife offsets of pipeguns.
## Why It's Good For The Game
I completely forgot to fix this when I updated the pipegun sprites.
Oops.
## 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: Fixes the knife offset for pipeguns
/🆑
<!-- 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
Fixes#82301
It feels like im missing something here so if this isnt the right way to
fix this (deleting the overlays on the solar panels Destroy() ) please
tell me.
## Why It's Good For The Game
Bugfix
## Changelog
🆑 Seven
fix: Destroyed solar panels no longer drop their overlays
/🆑
## About The Pull Request
By fixes i mean the energy lost as heat is now directly proportional to
the amount of power these machines draw from the grid via
`charge_cell()` proc. The machines affected are as follows
- Cell charger
- Mechbay charger
- Recharge stations + cyborg charging fix(Fixes#82626)
The idea is simple. As the cell nears its charging completion it draws
less power from the grid to complete that last mile (for e.g. if the
cell is 0% charged the cell charger attempts to draw 100% of the cells
max charge from the grid but if the cell is already 99% charged it will
only attempt to draw 1% of the required power from the grid) and so it
only makes sense that the heat energy lost is also less & vice versa.
In other words the heat energy lost is directly proportional to the
amount of work done (via `charge_cell()` proc) so you get conservation
of energy & bug fixes which especially benifits borgs & mod suits at the
recharge station as it will attempt to first pump in whatever energy is
available from the grid and then compute energy lost as heat from it &
not the other way around.
For borgs we attempt to first charge its modules & then charge the cell
so you get an fully charged cell at the end
## Changelog
🆑
fix: cell chargers, mechbay port chargers & recharge stations heat lost
is directly proportional to energy drawn from the grid to charge their
respective cells
fix: cyborgs should charge more frequently & to their max capacity at
recharge stations
/🆑
## About The Pull Request
Fixes#82443
Fixes a runtime when using bloodrites on yourself. It was trying to
create a beam from the user to the user, and the beam datum cant handle
that.
## Why It's Good For The Game
Bugfix
## Changelog
🆑 Seven
fix: Fixed a runtime when using the cultist blood rites on yourself.
/🆑
While we try to have the datetimes of all vms synced to within 100ms of
eachother, via a cluster of time servers and intercepting all ntp
traffic in the vm lan towards the cluster, this isn't perfect and so
things putting time onto the database server should use the time at the
database server as much as it can.
To avoid confusion, i have renamed `SQLtime()` to `ISOtime()` to avoid
the likely hood its cargo culted onto database code again. ISOtime is
still a bad name, but there isn't a good name for this kind of time
format, like ISO8601, but human readable (so no `T` between date and
time and less other nonsense), with an assumption of GMT, thats not
SQLtime(), and SQLtime(). Suggestions welcome.
also byond's time procs can bug out because of how cursed they operate,
case in point, this year 2054 item that got inserted into the legacy
population table:

## About The Pull Request
Plainly: Expands the status effect API so their alerts can showcase
duration remaining.
https://github.com/tgstation/tgstation/assets/51863163/02eaad84-ebb7-4af9-9895-977c6e71acc4
## Why It's Good For The Game
I figure there are some status effects out there which really want the
player to know how long the duration is.
And right now, for 95% of them, you have to code dive to find out. This
is rather punishing for players who... don't code dive.
At the same time, there are effects which *do* tell you how long they
last, which leaves it up to the player to intuit when it'll run out.
This can get a bit silly during lag, and again, punishes new players.
That's not to say I think every status effect should report how much
duration is left: **For very common effects, like sleeping, it should be
left up to the player to guess.** Otherwise we lose a lot of paranoia
and feeling of helplessness. (Also keep in mind this only applies to
status effects with alerts associated.)
Hence why I only added it, largely, to the more "gamified" buffs and
debuffs - Things from (generally) one or two sources and with a static
duration, (or things which already informed the player how long they
last).
Notable ones include Fleshmend, Convulsing (from emag defib), Regen
core.
## Changelog
🆑 Melbert
qol: Some alerts, such as Fleshmend's, show their remaining duration on
their icon.
/🆑
Oversight on my part. I stuck c4 on a lizards brain and it didnt kill
them.
The deletion chain is somewhat awkward for humans. When deleting a
human, it deletes the organs but also removes them, which causes all
kinds of wacky effects on a deleting mob which is not great.
This is more akin to a band aid, but I need to take some time and focus
to sort through all the removal procs and make them qdel friendly
🆑
fix: Deleting someones brain kills them again
/🆑
## About The Pull Request
Once you gain a level in Athletics you will gain the ability to evaluate
the relative muscularity (in terms of unarmed combat) of your fellow
crewmates by examining them.
Various factors influence this;
- The damage dealt by your limbs.
- Your experience in the fitness skill.
- Various quirks, genetic mutations, and brain traumas.
In order to make this not an antagonist check, Changelings will now also
be able to copy your athletics skill level when they steal your DNA.
This is... admittedly a little weird, but this is a consequence of using
"skills" to represent a physical attribute I guess.
## Why It's Good For The Game
During the social experiment we sometimes call "April Fools Day" it
became apparent to me that our playerbase liked to watch a number go up,
a quality marked especially in those players who liked to have their
characters hang out in the gym.
Many of them made their characters repeatedly hang out in the gym and
work out even though doing this had no effect at all on the number they
were supposedly increasing.
I would like to give this joy back to them.
<sub><sup>Additionally I have heard that the ability to retain players
by stimulating their desire to see numbers increase is good for our
annual retention metrics.</sub></sup>
Ultimately this is a very silly feature but I think that there often
_can be_ a comparative aspect to bodybuilding and letting players be
competitive in terms of looking at each other's completely meaningless
numbers gives them something to base a story around.
Also I mostly only make silly features.
## Changelog
🆑
add: People who spend time improving their bodies are able to evaluate
the relative physical strength of those they examine as a kind of "power
level".
add: Changeling transformation copies the target's athletics skill
level.
/🆑
## About The Pull Request
- Cigarette particles are now particles rather than baked in
- Taking a cigarette out of your mouth release a big puff of smoke
https://github.com/tgstation/tgstation/assets/51863163/183b39e7-3367-43a1-b750-99e66838d60f
## Why It's Good For The Game
Looks better
## Changelog
🆑 Melbert
add: Cigarette smoke is now more smokey.
add: Taking a cigarette out of your mouth will let out a big puff of
smoke.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Title
## Why It's Good For The Game
typos... BAD?????????
## Changelog
🆑
spellcheck: Added a period to the end of the wendigo deathrattle
/🆑
## About The Pull Request
Blocks Rat Kings from using "Rat King's Domain" (the spell that spawns
dirt/vomit/oil and creates miasma) while ventcrawling.
Also blocks Rat Kings from summoning mice while in pipes; as far as I
can tell, this is just an oversight, as it previously created a mouse
stuck inside of the pipe without the normal chat message.
## Why It's Good For The Game
Rat Kings are supposed to build a lair of filth, a rat king visiting
every department in the distro pipes while spamming motor oil is boring,
lame, lacks any contextual sense that a rat inside a pipe could dirty
the floor above it, and doesn't really have any counterplay besides
begging atmos to up the temperature (which they realistically probably
will never do because it's a rat king not a xeno or a ling).
Ling spells are blocked while crawling so there's precedent for it.
## Changelog
🆑 PapaMichael
fix: Rat Kings can no longer trap mice inside of pipes by creating them
while ventcrawling.
balance: Rat Kings can no longer create grime and miasma while
ventcrawling.
/🆑
## About The Pull Request
This fix enables most of the clicks that have been disabled in the alt
click menu up to this point. However, I did have to cut out the pointing
thing it would do for right clicking. The only thing you aren't able to
do with the new alt-click menu at this point is dragging items onto each
other, pointing, and the shift-click context menu. Maybe we'll leave
that for another PR, because I think I'd have to rewrite core components
of TGUI for that?
## Why It's Good For The Game
Lets you perform almost all of the alternative and right click functions
on things you have alt-clicked the tiles for. I believe this outweighs
the benefits of pointing at stuff on a tile instead.
## Changelog
The alt-click item panel now lets you perform most of the alternative
click options.
🆑 Bisar
qol: Most of the alternate click modes (right click, control clicking,
shift clicking, etc) have been enabled in the alt-click item menu.
fix: You will no longer point at things you right-click in the alt-click
item menu.
/🆑
## About The Pull Request
~~removes protect objectives from spies,~~ actually just finds
objectives* fixing the 'nothing' or 'free objective' bug previously
present.
## Why It's Good For The Game
~~fix good until I can actually fix whatever's making protect objectives
not work. they aren't used anywhere else right now and work when
manually added after roundstart or with other active mobs around - I
suspect spies being a roundstart is the cause of this.~~
## About The Pull Request
/datum/glass_style/drinking_glass/hooch was being added 2 times, so I
just replaced the one with "aleglass" sprite to be /ale
## About The Pull Request
While reading traitor objective code for a project, I noticed that both
the Coroner and CE are not listed as potential targets for the 'Destroy
Heirloom' objectives. Looking into it, I noticed that the Coroner was
also not listed for the kidnapping objective. This fixes that.
## Why It's Good For The Game
Coroner should not be immune to traitory
And the CE should not be exempt from having their heirloom potentially
destroyed
## Changelog
🆑
fix: The Coroner and Bitrunner can now be selected as a target for
kidnapping and heirloom destruction objectives.
fix: The Chief Engineer is now a valid target for heirloom destruction
objectives.
/🆑
## About The Pull Request
fish huds were consistently hard deleting because their reference wasnt
being removed from the fisher's screen
## Why It's Good For The Game
fixes fish huds hard deleting
## Changelog
## About The Pull Request
Sometimes when you get a nonlethal instability consequence you will now
become crab
## Why It's Good For The Game
You should be abel to reach teh peak of evolution when messing with your
genetics
## Changelog
🆑
add: Chance to become crab on nonlethal DNA meltdown
/🆑
## About The Pull Request
client deletion isn't the only way to leave a mob
## Changelog
🆑
fix: fixed clients being seen as stuck doing tutorials in some cases
when changing mobs
/🆑
Co-authored-by: TiviPlus <572233640+TiviPlus@users.noreply.com>
## About The Pull Request
Being sacrificed by a Heretic no longer applies an incurable brain
trauma that gives you a phobia of Heretic-associated items.
Instead it does the following things:
- Removes 2-4 of your organs and leaves them behind on the sacrificial
circle, replacing them with "corrupt" organs with negative effects.
- Gives you an unremovable "curse" debuff which will cause you to
immediately cough a random organ out of your chest if you attack or are
attack by the person who sacrificed you, **if they are wearing a Focus
at the time.**
Corrupt Organs can be removed via surgery, although doing so is
dangerous.
A removed corrupt organ will often either immediately explode for a
small (but not insignificant) amount of burn damage to everyone nearby,
or it will animate itself as a haunted object and be a general nuisance
until subdued.
A patient dosed with Holy Water can always have their organs removed
without consequence.
Chugging Holy Water will also suppress most of the negative effects of
your corrupt organs.
The effects of Corrupt Organs are as follows:
- **Eyes:** All Heretics **and also a selection of additional random
people** are completely invisible to you. You can still see their
runtext (or "hear") them, but they otherwise cannot be seen. And as you
can't see them you also cannot click on them.
- **Tongue:** When you speak, your language will sometimes be replaced
by "Shadowspeak", understood only by Curators and Nightmares. This is
less of an impediment during Halloween because of the friendly
Shadowpeople.
- **Liver:** When you drink something, it will add extra reagents to
your sip from a pool largely composed of alcohol and hallucinogens.
- **Stomach:** Your hunger will deplete significantly faster if you do
not regularly ingest blood. (Fun fact: Did you know that a drinking
glass full of blood automatically relabels itself "tomato juice"?)
- **Heart:** You will continue to be intermittently tormented by
frightening hands.
- **Lungs:** You will intermittently cough out dangerous or unpleasant
gases.
- **Appendix:** Very infrequently you will vomit out several hostile
worms.
Most of these effects aren't present while you're dodging the spooky
hands in the Mansus realm.
Plasmamen never have their lungs replaced because they'd immediately
start choking on their internals and that is annoying. Ethereals _do_
have their hearts replaced so may be surprised to find that they don't
respawn when killed if they don't get a new one.
I would haved called them Cursed Organs but the Cursed Heart already
exists.
## Why It's Good For The Game
Nobody enjoys the Heretic phobia from any angle.
Phobias suck to deal with in general. and while being scared of all
Heretic stuff from that point on is mildly flavourful it's not very
interesting.
This alternative hopefully provides a more interesting answer (which
should provide more storytelling and interaction with other people) to
the problems that the original change intended to address:
Making sure that nonlethal sacrifices still feel significantly bad
enough that you're not going to volunteer, and as an extra layer of
protection to ensure that someone you sacrificed functionally ceases to
be a threat to you.
## Changelog
🆑
del: Being sacrified by a Heretic no longer gives you an incurable
phobia.
add: Being sacrificed by a Heretic will drop 2-4 of your organs on the
ground and replace them with "corrupt organs" with negative effects
which can be suppressed with Holy Water.
add: Players who have been sacrificed by Heretics will experience
additional and rapidly lethal consequences for attempting to fight
someone who previously sacrificed them, as long as that person is
wearing a focus.
/🆑
This uses a browser skin element to spy on the command bar and report
back to the server what verb is currently in it and how many characters
it has. it skips reporting if the text hasn't changed since the last
report.
im intentionally not providing the full text in the command bar to the
server, while designing the system so new verbs can be given typing
indicators by editing DM code, not html code.
The report rate is once a second but this could be lowered or tweaked.
Both the tgui say window being open and this system being active because
the command bar starts with `say "` is undefined behavior, mostly the
first one to end the indicator will just freeze indicators for the other
one until it too ends its current indicator session.
The system waits until something besides the `"` is in the argument to
say.
It is enabled for verbs `say`, `me`, and `whisper`.
I don't actually know if this is the case for tgui say. this is a one
line tweak anyways so let me know if this should be changed.
[(This pr closes a
bounty)](https://tgstation13.org/phpBB/viewtopic.php?p=726634#p726634)
🆑 MrStonedOne & Lilah Novi
add: Say commands typed in the command bar now trigger typing indicators
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
The labour camp shuttle paroles the user when they complete their
points. The station return message specifies which prisoner returned.
## Why It's Good For The Game
People shouldn't be looking like fugitives after completing their work.
## Changelog
🆑
qol: The labor camp shuttle properly sets people to parole after they
complete their work.
qol: The labor camp shuttle specifies which person returned to the
station.
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
Adds screen tips for anchoring sm shard
## Why It's Good For The Game
I worry each time I go to click this thing
## Changelog
🆑
fix: Supermatter shards now have screentips with a wrench in hand
/🆑
## About The Pull Request
Pretty straightforward, the wing sprites were not updating on the mob
after calling `open_wings()`/`close_wings()`. Additionally I reduced the
time between opening/closing for the flap emote to 0.35 seconds. It
matches up more with the sound effect that way, and in my opinion look a
bit more like a proper flap should. 2 seconds was really long.
And finally functional moth wings will make the moth flap sound too! As
they should.
---
More codey stuff:
I slightly refactored the way sounds play to be more object oriented
adding a new proc for it:
`/obj/item/organ/external/wings/make_flap_sound()`. This will make it
easier for people to add different sound effects for other types of
wings beyond just moth ones, should they so desire.
## Why It's Good For The Game
Moths can rejoice in more ways to express yourselves!
<details><summary>Flap emote</summary>

</details>
<details><summary>Wing emote</summary>

</details>
## Changelog
🆑
fix: moths with functional/flight potion wings get an animation when
they *flap once again, and it makes a sound
/🆑
poll_ghost_candidates can return null if nobody signs up, these weren't
properly checking for that case.
Also moved the Santa ghost role over to the proper subtype (not sure if
it was outright broken, but it'll now properly update the Santa's role
and trigger automatically.)
```
[14:41:54] Runtime in code/modules/events/ghost_role/sentience.dm, line 77: Cannot read null.vars
proc name: spawn role (/datum/round_event/ghost_role/sentience/spawn_role)
src: /datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience)
call stack:
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): spawn role()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): try spawning()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): start()
/datum/round_event/ghost_role/... (/datum/round_event/ghost_role/sentience): process(2)
Events (/datum/controller/subsystem/events): fire(0)
Events (/datum/controller/subsystem/events): ignite(0)
Master (/datum/controller/master): RunQueue()
Master (/datum/controller/master): Loop(2)
Master (/datum/controller/master): StartProcessing(0)
```
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>
## About The Pull Request
So while playing I had to get a bunch of unstable mutagen out of a
corpse's stomach before reviving it, and thus I tried to stomach pump
it.
This, however, never decreased the amount in the stomach, nor did it
actually create any vomit like it's supposed to.
Looking into it, the issue seems to be with this line:
0c562fd742/code/modules/surgery/stomachpump.dm (L49)
Which doesn't line up with the parameters `vomit(...)` takes:
0c562fd742/code/modules/mob/living/carbon/carbon.dm (L417)
`vomit_type = FALSE` isn't very helpful.
This mismatch seems to be due to the `vomit(...)` proc getting changed
quite a while ago, but in the process forgetting to update stomach pump
to use it.
Based on what I found looking into this, I replaced it with the
following:
```dm
target_human.vomit((MOB_VOMIT_MESSAGE | MOB_VOMIT_STUN), lost_nutrition = 20, purge_ratio = 0.67)
```
Where we don't use `VOMIT_CATEGORY_DEFAULT` as that includes
`MOB_VOMIT_HARM`, and we already have our own harm condition.
This fixes our issue.
Oh, we also fix a minor spelling issue, "brusing" to "bruising".
## Why It's Good For The Game
Makes stomach pumping actually work.
## Changelog
🆑
fix: The stomach pump surgery actually works again.
spellcheck: "brusing" to "bruising" in the message you get when failing
the stomach pump surgery.
/🆑
## About The Pull Request
Makes conveyor switches work for cyborgs again
## Why It's Good For The Game
The left/right click update broke it. Fixes#83078
## Changelog
🆑
fix: conveyor switches work for cyborgs again
/🆑
## About The Pull Request
Pressing E to quick equip would throw balloon alerts when it iterates
over storage that's full
Especially noticeable on round start engies because their toolbelt gets
checked
## Why It's Good For The Game
Less noise
## Changelog
🆑
fix: The quick equip 'E' hotkey shouldn't warn if one of your bags is
full anymore
/🆑
## About The Pull Request
Updates pipeguns with a brand new set of sprites. Also comes with pipe
pistols; plinkier versions of the pipegun.



Alters pipeguns away from utilizing shotgun/rifle ammunition towards a
bespoke junk round ammo. These shells are crafted similarly to current
improvised shells. This also removes improvised shells as a shotgun ammo
type. (these new shells aren't shotgun shells to begin with, they're
more like rifle bullets)
Crafting junk rounds produces an entirely unknown projectile in the
shell. You won't know what you get until you fire the gun. Almost in
every instance, however, the shot is beneficial towards killing things.
And they all do about the same amount of damage, so there is hopefully
never a round you didn't want to fire in the gun. Fighting someone with
a pipegun is usually predictable for what amount of damage it will do,
but any additional effects it might have is going to be an unknown
factor. They also brutalize borgs, which is a quality that improvised
shells had previously.
Pipeguns operate as they did before, and do roughly 40 damage per shot
with the majority of their ammo types (less than what they do currently
with .310). They only have one shell in the gun at a time, so every time
they're fired, they must be reloaded.
Pipe pistols do roughly 15 damage per shot, but hold more ammo than the
bigger pipegun. However, they're more likely to veer off-course.
There are regal versions of each of these weapons, and each are more
potent respective of their general rarity. Having one is going to be a
lot more noteworthy.
### Minor changes
Some more clothing items can carry pipeguns in their suit storage.
The icemoon hermit spawns with a heroic laser musket rather than a regal
pipegun (partially because it is too difficult for the hermit to get
more ammo for their gun, and also because the regal pipegun is a more
powerful weapon than previously)
## Why It's Good For The Game
It has been a few years since I added the pipegun, and time was never
particularly kind to it. There are alternative weapons now with
interesting mechanics of their own. The ammunition it used has changed
considerably. And it simply didn't ever feel like a 'junk gun' in a way
that was fun. The original mechanics added to give it that feeling were
just not fun to experience and were removed. So the pipegun has been
left as 'a shitty version of X'. Even the regal pipegun was, at the end
of the day, a shittier version of either a shotgun or cargo rifle.
It didn't feel right not having some kind of unique quality to using
these weapons that help them express themselves as unpredictable trash
weapons built inside of maintenance. But I expressly didn't want to make
it 'unpredictable' in a way that felt unfair on the person getting shot
either. So just giving it more damage was right out. As a compromise, I
reduced the overall lethality of the weapons while introducing a gimmick
that will appeal to those wanting to play out the role of a homeless
lunatic with a shitty homemade gun stalking maintenance. A 'chaos gun'
so to speak. Maybe that will appeal to people.
## Changelog
🆑
balance: Reworks pipeguns to use an unpredictable 'junk round'. You
won't know what you're shooting until you fire it.
add: Introduces a pistol version of the pipegun; the pipe pistol. It is
inaccurate and does significantly less damage, but more portable and has
more ammunition in the gun.
image: Updates the visuals of the pipeguns.
balance: Also improves the Regal varieties of these weapons. By a lot.
balance: More articles of clothing can be used to carry pipeguns in suit
storage.
balance: The Icemoon Hermit comes with a Heroic Laser Musket instead of
a Regal Pipegun.
remove: Improvised shells (the shotgun shell) has been replaced with
improvised junk shells (which don't work with shotguns but do work with
pipeguns).
/🆑
---------
Co-authored-by: Jacquerel <hnevard@gmail.com>
## About The Pull Request
All mineral turfs can be auto-mined by just walking into them if
piloting a mech. This PR mostly just reorganizes the action() to
accommodate it and add a new proc for listening to a signal.
## Why It's Good For The Game
Less work on your mouse finger.
## Changelog
🆑
qol: Mech drills can auto-mine by walking into rock.
/🆑
## About The Pull Request
Jacq has come up with the suggestion of adding a unit test to the
blackmarket. I agreed ~~and I think I deserve the NO GBP label because
both of these missing items are actually my fault~~.
## Why It's Good For The Game
Let's avoid issues like this in the future.
## Changelog
🆑
fix: Added the missing bulwark MOD module and the jawed fishing hook to
the black market.
/🆑
## About The Pull Request
**Edit: Since writing, this pr has been updated to address failing CI
based on code-general suggestions, invalidating the previous
descriptions. The previous descriptions has been included as spoilers
for posterity**
Right, so, this has gone from just a simple pride pin fix to realizing
CI fails with it to doing a more complex lasting fix based on
suggestions.
Recap time. Objects get reskinning set up if they have `unique_reskin`
set when `Initialize(...)` runs.
9145ecb7e1/code/game/objects/items.dm (L267-L269)
Because pride pins use a global list, we set it in `Initialize(...)`...
After we call the parent.
9145ecb7e1/code/modules/clothing/under/accessories/badges.dm (L196-L198)
Obviously this fails.
However, moving this *before* `Initialize(...)`, while fixing the issue,
causes CI to fail due to calling `register_context()` twice.
Why? Well, it's simple. We automatically call `register_context()` if we
have `unique_reskin` set, as seen above, but we *also* call it on
accessory `Initialize(...)` due to it having its own context.
0c562fd742/code/modules/clothing/under/accessories/_accessories.dm (L29-L31)
This causes it to try register the same thing twice, which doesn't
_break_ things, but it sure as hell isn't clean.
So talking about this with San in code general, we decided to try go
with the following:
We add two new procs, `setup_reskinning()` and
`check_setup_reskinning()`, and handle all this fuckery within those.
This lets subtypes override them with their own new checks or
differences in setup.
Then we override `setup_reskinning()` for `/obj/item/clothing/under` and
`/obj/item/clothing/accessory` to not register context again, and do the
same for `/obj/item/clothing/accessory/pride` but while also setting
`unique_reskin`.
This fixes it.
<details>
<summary>Previous implementation for posterity</summary>
Back from my short code break, time to fix some of the things I've been
annoyed by.
Firstly, I noticed pride pins could no longer be reskinned since the
alt-click refactor.
Looking into it, this seems to be because we now only register this on
`Initialize(...)` if `unique_reskin` has been set:
9145ecb7e1/code/game/objects/items.dm (L267-L269)
While due to using a global list we don't set this in the item
definition, but in `Initialize(...)` :
9145ecb7e1/code/modules/clothing/under/accessories/badges.dm (L196-L198)
Where we call the parent proc _before_ setting `unique_reskin`, and thus
not registering our ability to reskin.
So all we do is set this to our global list _before_ we call the parent
proc.
```dm
/obj/item/clothing/accessory/pride/Initialize(mapload)
unique_reskin = GLOB.pride_pin_reskins // Set before parent proc checks for it.
. = ..()
```
This fixes it.
</details>
## Why It's Good For The Game
Fixes pride pin reskinning.
Theoretically makes it easier to avoid this happening in the future, and
allows `setup_reskinning()` to be manually called in the case of values
being edited post-initialize.
<details>
<summary>Previous pitch for posterity</summary>
Fixes pride pin reskinning.
</details>
## Changelog
🆑
fix: Pride pins can be reskinned again with alt-click.
/🆑
## About The Pull Request
This fix makes it so the effect of you falling is always applied if you
receive the knockdown effect. Currently, you can make yourself immune to
being disarmed by shoves or any other effect that applies knockdown by
laying down. We've all seen the tactically crawling desword user using
this to avoid being disarmed. This fixes that.
No GBP because I got GBP for a separate PR that I tagged wrong
## Why It's Good For The Game
Lying down in the middle of a hand-to-hand fight flies in the face of
common sense. I'm working on another PR to rebalance being prone in
melee combat, but this itself is a simple fix of what seems to be a
long-standing exploit.
## Changelog
Receiving the effects of a knockdown will now always disarm you, instead
of only when you're not laying down.
🆑 Bisar
balance: Knockdown effects will know consistently disarm, instead of
failing to disarm if you're already lying down.
/🆑
## About The Pull Request
Spies can now use other spies' uplinks.
## Why It's Good For The Game
Every other antagonist in the game has a recovery method for their main
gimmick or has their main gimmick baked into their mind and thus cannot
be taken from them. This sucks ass for spies because they have zero
recovery so they're left with the broken ass freeform objectives that
don't green or redtext that maintainers and admins told me were bad for
Families but are suddenly okay here I guess.
Spies being able to jack and use other spies' PDAs means you can now
recover your primary gimmick by tracking down other spies, which
improves spy gameplay and also discourages sharing loot.
## About The Pull Request
Setting RD suplex skillchip as common chip. Adding Roboticist's
skillchip into RD. Skillchip's categories are global defines now
## Why It's Good For The Game
RD is literally the most skilled scientist and roboticist. CEO of all
Silicons. Why he doesn't have robo wires trait?
## About The Pull Request
Per request of MSO, drops the fallback icon generation for clients under
515.1635. Lootpanel warns about this anyways and you had ample time.

Saves some time from SSlooting.
## Why It's Good For The Game
Pushes players to use a better client
Saves some server cost from older clients
## Changelog
🆑
fix: Lootpanel now requires 515.1635 to generate most icons. TG support
for 514 ended May 1. Update your client to fix the icons.
/🆑
## About The Pull Request
This touches up on the bitrunning ghost roles that come with some maps,
namely Corsair Cove and Syndicate Assault.
The gist of it is: Ghost role spawners and Digital Anomalies (the random
event boss mobs) are now restricted from entering the VDOM safehouse,
and other areas where critical equipment is stored.
Here's an example from Syndicate Assault -- The X-ed out area is
considered "out of bounds" for digital anomalies/ghost roles:

Additionally, this also fixes the matter of pirate ghost role spawns
creating their own antag datum/pirate team, which would carry into the
roundend report. Since these are no longer legitimate pirate spawners
and are now specifically designed spawners for virtual domains.
Naturally, emagging the server jailbreaks all of these restrictions and
notifies any virtual entities.
The new subtype of spawners should also be scalable enough that new
VDOMs should be able to implement new ghost role spawners with ease.
## Why It's Good For The Game
It's one thing to have sentient mobs to fight, which can shake up the
otherwise somewhat static nature of bitrunning maps, but when players
are tossing equipment, spawncamping, or otherwise making it impossible
for the runners to fight them it ends up being unfun for everyone
involved. You can't get into a good fight with a bitrunner avatar if
their only recourse is to wipe the map and everything (YOU) in it.
This ensures a level of fairness between the (typically vindictive)
ghost roles of a VDOM and the players.
Also, pirate spawns don't make a new pirate team/datum. That's one of
the fixes I was aiming for with this.
## Changelog
🆑 Rhials
balance: Virtual domain ghost roles can no longer enter the
safehouse/"equipment" areas of a domain.
fix: Pirate virtual domain ghost roles will no longer make a pirate team
antag datum.
/🆑
---------
Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
Fun fact: This PR has been made a total of three (3) times because I
keep forgetting about it.
## About The Pull Request
The inspector's Fedora now uses regex. When saying commands, it is much
more generous on picking up trigger words, as it is now case insensitive
and ignores punctuation at the middle end as well as extra words.
For example, if the prefix is "go go gadget" and the prefix is "batong",
it will trigger with these phrases:
- Go go gadget... batong (Ignores punctuation after the prefix)
- Go go gadget batong! (Ignores punctuation at the end)
- Go go gadget batong bitch! (Ignores extra words at the end)
- Go go GADGET, BATONG (Ignores case)
Multiple items can also be deployed at once, if it is possible to put an
item in your hand. For example, you can assign two items to the same
word, and the first item will be put in your active hand and the second
would be put in your off hand.
## Why It's Good For The Game
Regex good. Removes infuriating situations where the entire phrase is
ignored because you didn't say it exactly, such as adding extra
punctuation or typing in all caps.
I tested this pretty extensively(tm) so it does work, and I tested some
dumb possible exploits as well and couldn't do them. Works with latest
version of /tg/.
## Changelog
🆑 BurgerBB
qol: The inspector's Fedora now uses regex. When saying commands, it is
much more generous on picking up trigger word.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>