## About The Pull Request
you can emag morgue trays disabling the alarm system
## Why It's Good For The Game
keeps your enemies dead :J
## Changelog
🆑
add: You can emag morgue trays to disable their life alerts.
/🆑
## About The Pull Request
Besides cleaning up code a little i changed all the bar lockers near
`boozeomats/all_access` to also be `all_access`. And also changed
freezer on Beach away mission to be free accessed like the freezers near
it.
## Why It's Good For The Game
Cleaner code, i guess?
Free beer.
## Changelog
🆑
add: Old bar on Metastation, tranquility emergency shuttle and Beach
away mission now have free access bar closets. Also freezers on beach
are now all access so you can now open them.
/🆑
## About The Pull Request
Adds the Syndicate Induction Kit for Nuclear Operatives.
The kit contains the following
- One Ansem pistol
- One each of 10mm AP/HP magazines
- An energy dagger
- A syndicate bowman headset
- A nuclear PDA and agent card
- A syndicate fabric space suit and helmet, alongside a jet harness
- Combat boots, turtleneck, fingerless gloves
- The Fission Mailed book
- And the most important part, the induction implant.
The induction implant will make anyone who is implanted by it a
Syndicate Operative. This will give them the syndie faction and the nuke
op datum, alongside the usual weird name nukeops get.
The implant will NOT work on anyone who is not an antagonist in some way
or form. Normal crew members do not gain benefits from implanting, and
in fact the implant disintegrating inside gives them toxin.
It costs a total of 10 TC, for what is more or less 25 TC of gear. The
value is totally up to change, it's probably way too low.
Uplink spacesuits are randomized between all their different colored
variants! Visual only.
## Why It's Good For The Game
It's cool and rewards teamwork. Traitors can team up with nukies, and if
they choose to do so they gain some basic gear (a free gun, a space
suit, the dagger) that isn't really even close to the degree of gear
real ops get. As a downside, their name becomes an extremely obvious
nuclear operative name, meaning if they want to be stealthy they either
have to never talk or purchase a voice changer.
Being able to just obtain a whole new member of the team for so little
likely seems bonkers, but my intention is to just encourage something
that's neat and interesting ingame without hopefully being *too*
impactful and strong.
Imagine stumbling upon a heretic and inducting them into the team. Or a
changeling, or a wizard? Running around hypnoflashing people to be nuke
ops and then giving them the kit?? There's a lot of fun moments that
could arise from this, but they're balanced by the fact that, well,
nobody ever saves TC for the station.
Something I can see becoming a problem is EVERY traitor buying syndicate
encryption keys to beg for an induction kit every time war is declared.
I'm not sure if this is going to be a huge issue, but I think I'd rather
just get this ingame and see if that does turn out to be a problem. If
it does, we can just make it so that traitors can't be inducted, as the
syndicate has already hired them for something else and doesn't want to
flare inter-faction tensions.
## Changelog
🆑
add: Adds the Syndicate Induction Kit for Nuclear Operatives, which lets
them induct any willing antagonist into the nuclear operative team for
10 TC.
add: Uplink spacesuits are randomized between all their different
colored variants! Visual only.
/🆑
## About The Pull Request
Reliable web traversal is now governed by a trait instead of a type
check.
Spiderlings have that trait.
## Why It's Good For The Game
Spiderlings are spiders and shouldn't get stuck in webs.
Turning this into a trait means that we can make more things apply the
trait in future if we want, without having to expand a list of allowed
mobs.
## Changelog
🆑
fix: Spiderlings no longer get stuck in webs
/🆑
## About The Pull Request
Removes the flag from the Death Sandwich which allows you to rename it
(and change its description) using a pen.
## Why It's Good For The Game
This sandwich kills you.
This is fine if it is called "Death Sandwich" and has the description
"Eat it wrong, or you die!" because people eating it know what they are
getting into.
It's less fine if someone has renamed it to "yummy sandwich" and it has
the description "mmm yummy tasty".
Memorising sandwich sprites to avoid being killed by a disease (as
punishment for not having a mullet and wearing jorts) should not be an
important knowledge check.
## Changelog
🆑
balance: The Death Sandwich can no longer be renamed
/🆑
## About The Pull Request
This makes posters, such as from the Poster Boy quirk or the syndicate
objective, able to fit back into the boxes the spawn in.
## Why It's Good For The Game
It just seems odd that posters can't fit back into the boxes they come
in, particularly when every other art supply fits just fine (and can
even be placed in the same boxes as the posters before you've taken them
out).
If it's this way for balance reasons then I don't want to argue that
change and will close the PR (or feel free to close it for me). But it
feels like it's just an oversight and I don't think it really has
balance implications?
## Changelog
🆑
qol: Posters can now fit back into the boxes they come in.
/🆑
## About The Pull Request
Title. I added one single space bar to the third-person display message
when you witness someone else lock or unlock a locker.
## Why It's Good For The Game
Before:
<img src="https://i.ibb.co/RCWTTcq/Closet-Space-Bar-Before.png">
After:
<img src="https://i.ibb.co/Wfm7hvR/Closet-Space-Bar-After.png">
Highlighting unrelated shoutout to my fellow based AI enjoyers.
Grammar is good.
## Changelog
No changelog necessary.
## About The Pull Request
Fixes a couple of things people have pointed out about golem
transformations.
- Diamond golems now stop being invisible when they attack or throw
something, they also turn invisible a bit slower.
- Using a bluespace knot takes 2 seconds instead of 3 seconds.
- Bananium Golems only slip you if they are lying down.
In order to achieve that last one I refactored the slipperiness
component to take an optional extra callback, and then killed a subtype
of it which could be replaced with passing in a callback. I tested it
and it seems to work the same as it used to.
These are largely how things were supposed to work and I just overlooked
them.
I am sure this won't be the last PR of a similar vein while people try
these out, provided that I actually hear anything they are saying about
it.
## Why It's Good For The Game
Diamond golems shouldn't be able to attack you while remaining invisible
and untargetable even if it is funny.
Clown golems aren't supposed to be able to slip you by swapping places
with you even if it is funny.
The bluespace hand was basically just worse than using the crystal and
not eating it, maybe still needs another buff after this one.
## Changelog
🆑
fix: Diamond Golems can no longer attack or throw things and remain
invisible.
fix: Bananium Golems are only slippery if you actually tread on them
(aka: while they are resting).
balance: Golem bluespace teleportation is slightly quicker.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
Setting `aSignal = null` wasn't the most proper way to make an anomaly
not drop a core, `drops_core` should've also been set to `FALSE`.
Changed it to set `drops_core = FALSE`. Also changed it to `QDEL_NULL`
the core rather than just null it. Adds a better stack trace and did a
minor cleanup thing.

## Why It's Good For The Game
Runtimes
## Changelog
🆑 Melbert
fix: Runtime from neutralizing "hollow" anomalies
/🆑
Fixes#75049🆑 ShizCalev
fix: Ghosts & camera mobs (ie blobs & AI's) will no longer set off
landmines.
fix: Jaunting mobs will now only set off landmines if they stepped on
them BEFORE jaunting.
fix: Flying mobs will no longer detonate landmines that were not first
stepped on.
/🆑

stack/init was adding stacks to the global list if they had LESS THAN 10
units, though the sniffer only looks for things >= 10 units. Flipped
bracket, gg. add() was also using += instead of |=, which resulted in
duplicate entries for the same object in the global list when adding
stuff to a stack.
🆑 ShizCalev
fix: The materials sniffer now actually works!
/🆑
## About The Pull Request
Now whenever an attack is blocked, the sound will play and deflection
with the item now plays sound too:
https://github.com/tgstation/tgstation/assets/42353186/1a0cc5b7-f2af-4d72-88d7-57cc11f5baa3
The parry.ogg was updated to a better-sounding one
https://github.com/tgstation/tgstation/assets/42353186/5ffc53d8-0b3c-4e6b-9256-b7b9735918bc
Every item now has a "block_sound" that can be set, it determines what
sound is played when you block an attack with it.
Cult items no longer have their own way of fuckery to play parry sounds,
now they use this system as well.
Now shield bash sound is 80% smaller after cutting out all of its noise
and silence.
## Why It's Good For The Game
Adds feedback on whether the attack was blocked or not, signalling both
to the attacker and defender that it didn't go through even if the
animation played, which is a great QoL. Same with the deflection sound
(although deflection is still pretty visible, the sound would not hurt)
New sounds add more flavour to the weapons, especially the energy sword,
giving it even more badassery.
Cutting down the noise from the shield bash sound has made it better to
listen and saved some kilobytes of information. And making every item
use the universal system for blocking sounds, removing cultist items'
own code for playing parrying sounds.
## Changelog
🆑 DrDiasyl aka DrTuxedo#0931
qol: Now blocking an attack will play a sound and display a spark
effect, giving back feedback
sound: parry.ogg was updated to a better-sounding version
sound: shieldbash.ogg no longer has noise and unnecessary silence
sound: New block_shield.ogg and block_blade.ogg for shields and energy
swords
code: Cultists items no longer have their own code for playing parrying
sounds
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
## About The Pull Request
1. Ensures the static list closet & crate paint job vars & the
`access_choices` list vars are initialized only once. Since they are
defined inside `Initialize()` they were initialized many times and need
to be set only once when null
2. Fixes#75313
Closets & Crates can be wrapped again
3. Fixes#75349
Personal closets can be claimed again by anyone without
ACCESS_ALL_PERSONAL_LOCKERS if it's currently unclaimed.
4. Fixes#75351
Wallet with combined access are accepted again
**Note:** To claim a personal closet swipe once to unlock it, then swipe
again to claim it
🆑
fix: closets & crates can be wrapped with wrapping paper again
refactor: closet & crate paint jobs static list vars, access_choices
static list var are initialized only once during init
/🆑
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
Safeguards against #74965 happening in the future.
Noticed a bunch of these were using ITEM_SLOT_HANDS. This is incorrect,
as the element already automatically updates held items. grep'd it to
catch future instances.
Likewise, a number of objects weren't passing slot_flags to the element,
meaning it wasn't actually updating those things properly when they were
being worn. I've simplified this so now the element will automatically
update all slot_flags, and passing an additional slot to the element
when being added is only needed for additional slots that might need to
be updated. This also means if slot_flags change, the element will now
update correctly as well.
🆑 ShizCalev
code: The update_icon_updates_onmob element will now automatically
update all slots in an item's slot_flags var. This does fix multiple
things that weren't updating properly. Passing a slot to the element is
now only necessary if you want to add additional slots to be updated.
/🆑
This PR makes a few changes to the Occupational Corruption Device, the
job-specific traitor item that allows you to summon a bureaucratic error
event. Largely untouched for years, even across the change from standard
to progression traitor.
It now triggers directly from the uplink, which means no more
self-deleting remote. Now, it functions like the comms blackout/grid
check "viruses".
This, however, led me to a major problem -- No remote means there is no
longer an "Occupational Corruption Device", abandoning the pun intended
by the original author.
To remedy this, the Occupational Corruption Device is now the "Organic
Capital Disturbance virus". Different words, same stupid acronym. (The
description is a bit more direct now too).
## About The Pull Request
The high luminosity eyes item was extremely out of date, broken, and
full of copy paste code from atom lighting. Which is a shame because
they were cool.
On top of all that it was using a special light effect that was not very
performant. I got rid of all that, hooked it into atom lighting as a new
light type, and gave it a new TGUI as well because the old ui prompts
were not great either.
You can now pick a color at random if you want. You can also set the
color and range before surgically implanting them. No more being forced
to go through the color picker when you just want to change the range.
Functionally they should pretty much should be the same as before with
some bonus features (see below).

Closes https://github.com/tgstation/tgstation/issues/61041
Closes https://github.com/Skyrat-SS13/Skyrat-tg/issues/14685
This is 100% completed. I just finished fixing the slight translation
bug when going from 0->1 range (see above gif) and that was the last
thing on my bucket list. I happy enough with this at this point in time.
---
EDIT:
I have decided to add in one last new feature, and that is...
independent settings for eye color.
<details> <summary>You can now set eye color independently if you
wish</summary>

</details>
The eye color does not modify the light color in any way when set in
this manner, but it can be used for cosmetic purposes.
Kind of makes the item more like cybereyes from cyberpunk, which I think
are pretty neat!
</details>
### What I've done, in more detail:
- refactored high luminosity eyes so they use the atom lighting system
instead of the way they were doing it before
- the new light type, `MOVABLE_LIGHT_BEAM` behaves similarly to
directional lights, with some slight differences. it reuses the same
lighting overlay sprites but scales them vertically to produce a more
focused effect. The result can be seen above. This is in contrast to the
old way, which spawned `range` number of individual 32x32 overlays and
moved them around. This way should perform better as well as be more
maintainable.
- added a new TGUI interface for high luminosity eyes with buttons for
range, a text field for a color hex, a color picker and randomizer
- made the eye overlay emissive when the light is turned on
- range goes from 0 to 5. at range 0, the light overlay is turned off
and you are left with just the emissive eyes.
- added a cosmetic functionality to this item that lets you change the
color of your eyes independently of the lighting (and each other)
- fixed a bug with directional flashlights sometimes not updating their
lighting overlay if you pick them up without changing your direction
---
### Other Misc Fixes
Being able to dynamically set range back and forth exposed some logic
issues that had existed with directional light overlays and I have fixed
those. That is why there are some edits in that file that may not appear
readily obvious why they are there.
Apart from that, two other bugs that come to mind:
1) eye code was supposed to keep track of the eye color you had before
you got new eyes, but it was overwriting that every time you ran
refresh().
2) lighting was supposed to be turning off the light when range is set
to 0, but it was not doing that properly.
And of course besides that, there may have been a few instances of
finding typos/tidying up code
## Why It's Good For The Game
The code for this was like 6 years old and in desperate need of
updating. Now it works, and has a nicer UI.
## Changelog
🆑
fix: high luminosity eyes light overlays now follow the user correctly
qol: high luminosity eyes now have a tgui menu so you no longer have to
go through the color picker every time you want to change the range.
they also have a new setting that lets you change the color of your eyes
independently of the light color. You can now have cybernetic
heterochromia if you want
fix: directional flashlights when picked up will now always update their
cast light direction correctly no matter what dir you are facing
refactor: refactors high luminosity eye code to better make use of the
atom lighting system, adding a new light type 'MOVABLE_LIGHT_BEAM'
/🆑
## About The Pull Request
- Fixes a runtime from foam being created inside plasmamen, instead of
at the plasmamen's loc, from the clown plasmaman suit

- Adds a stack trace for mobs having foam created inside of them
- So, in the past foam would runtime if created in a non-turf at all,
mobs or otherwise. I changed it so it creates a more helpful stack
trace.
- While tackling this, however, I realized that we may want to support
foam in non-turf, non-mob locs? Like closets? That is to say, if you
release a foam reaction while stuck in a locker and it floods the
locker, it would stay in the locker until it is opened, and affect other
people in the locker itself? Unsure, so I left it as an option, albeit
it may not function entirely correctly.
- This may also false-positive in some places, such as a mob within mob.
I'm unsure if it should have its own case, or of it should act like
closets are implied to do above? But that may produce some silent
errors. So eh.
## Why It's Good For The Game
Less runtimes, more intended code.
## Changelog
🆑 Melbert
fix: Fixes a runtime with plasmaman clown suit lube spray
/🆑
<!-- 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
So they just had list from 6 coins and not random picking of coins, so
now its random.
It will also spawn chococoin because it's a coin too.
But won't spawn `coin/gold/debug` because it's debug and eldritch coin
because comxy asked about it.
Added chococoin to `/obj/effect/spawner/random/entertainment/coin` and
holdables list of wallet.
<!-- 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
Random is funny.
<!-- 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. -->
🆑
add: Indusrial Gold and Regenerative Gold extracts now spawn random
coins and not just list of 6 coins. But no mythril as it has miserable
chance to have summoning effect which have even more miserable chance to
spawn something dangerous and not just mice.
add: Chococoin now has a chance to spawn wherever the coins are used to
spawn (wallets, greed ruins, deltastation bar)
/🆑
<!-- 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. -->
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
I played some as coroner, and realized there were a few things that were
either errors in the original PR, left out, or that could be added to
improve the feel of the job a little more. It ended up covering a fair
bit of ground, with a number of changes, but i'll go over the biggest
parts here:
First up! jumpsuits and jumpskirts! the medical doctor job, despite
starting with scrubs, still has a jumpsuit and skirt available in the
medidrobe. So, i added a pair for coroners to the mortidrobe, enjoy!
(and thanks to the kind morgue skeleton for modeling these with me!)
also, you may notice some black pixels on my head - that's because i
added a black scrubcap to the mortidrobe as well! the sprites were done
for this already, so when i noticed it was absent i opted to include it
here, for consistency with the other scrub types in the game.
next up, we have the other addition of this PR, the coroner's medkit
this is mainly for storing and consolidating coroner job items, in a
flavorful and interesting way. the coroner spawns with the larger
variant, that has more storage, but can still only hold up to small
items. it also includes a few more flavor items, that the compact
version lacks. the smaller version can be obtained in the autopsy kit
from cargo, and one more is available in the mortidrobe.
smaller changes:
i fixed some weird transparent pixels on the autopsy scanner itself, and
cleaned up some incorrect shading on the obj icon for the black scrubs.
before and after here:
i also gave the coroner their own type of pda, since they were
previously inheriting the medical one. this one matches their color
palette! in addition to this, i swapped the botkeeper app they
previously had for plexagon crew manifest.
Lowers the cooldown from 25 seconds to 15 seconds
Lowers the power drain from 25 to 20
Sonar visuals now move for the duration of their existence (see below)
The anomaly research ruin spawns bluespace anomalies, but those
anomalies can teleport without bumping if you just walk past them. This,
combined with the ruins plasma river, makes them unfairly lethal for
explorers
## About The Pull Request
This PR is actually 2 parts, one that fixes runtimes with crates & the
other that allows secured closets to be crafted
along with a secured suit storage unit
**Crate Fixes**
Fixes#74708
The problem starts here
f117834208/code/game/objects/structures/crates_lockers/crates.dm (L31-L34)
Not only does this if condition look ugly but it's highly error prone
because one single call to `update_appearance()` can cause this to fail,
and sure enough if you look at the parent `Initialize()` proc it calls
just that
f117834208/code/game/objects/structures/crates_lockers/closets.dm (L81-L88)
Since we know the appearance is guaranteed to be changed in some way
before the if condition gets executed let's check what the final state
of the crate would be before this if check
f117834208/code/game/objects/structures/crates_lockers/crates.dm (L54-L56)
We see that the final icon state depends on the variable `opened` so if
we want to place/spawn a crate that is opened at round start we have to
ensure that `opened = TRUE` so the `if(icon_state ==
"[initial(icon_state)]open")` succeeds and does its job correctly.
Sadly we did dum shit like this
```
/obj/structure/closet/crate{
icon_state = "crateopen"
}
```
throughout the entire code base, we thought backwards and were only
concerned in making the closet look open rather than setting its correct
variables to actually say that it is opened. because none of these
crates actually set `opened = TRUE` the final icon state becomes just
"crate" NOT "crateopen" therefore the if condition fails and we add the
component
f117834208/code/game/objects/structures/crates_lockers/crates.dm (L36-L37)
with the wrong parameters, so when closing the closet after_close()
removes the component with the wrong arguments
f117834208/code/game/objects/structures/crates_lockers/crates.dm (L81-L84)
that is does not unregister the signals and readds the component i.e.
re-registers the signals causing runtime.
The solution just do this
```
/obj/structure/closet/crate/open[mapping helper]
```
To clearly state that you want the closet to be open, that way you don't
have to memorize the icon_state for each different type of crate, it's
consistent across all crates & you don't get runtimes.
And that's exactly what i did everywhere
Another issue that is fixed is "Houdini crates" i.e. crates which are
open & appear empty but when you close & reopen them magical loot
appears, Go ahead walk upto to cargo and find any empty crate that is
open and do this
Fixes#69779https://user-images.githubusercontent.com/110812394/232234489-0193acde-22c8-4c19-af89-e897f3c23d53.mp4
You will be surprised, This is seriously harmful to players because they
can just walk by a crate that appears to be open & empty only to realize
later that it had some awesome loot. Just mean
The reason this happens is because of the Late Initialization inside
closets
f117834208/code/game/objects/structures/crates_lockers/closets.dm (L85-L86)
What late initialization does is suck up all stuff on its turf
f117834208/code/game/objects/structures/crates_lockers/closets.dm (L97-L100)
In theory this is supposed to work perfectly, if the closet is closed
move everything on the turf into the closet and so when the player opens
it, they all pop back out.
But what happens if the closet is opened before ` LateInitialize()` is
called? This breaking behaviour is caused by object spawners
f117834208/code/game/objects/effects/spawners/random/structure.dm (L94-L100)
And maint crates
f117834208/code/game/objects/structures/crates_lockers/crates.dm (L141-L143)
These 2 spawners open up the crate based on random probability before `
LateInitialize()` is called on the crate and so what happens is the
crate is first opened and then stuff on the turf is sucked in causing an
open but empty crate to appear.
The solution is simple just check again in ` LateInitialize()` if our
crate is still closed before we proceed.That's fixed now too
**Code Refactors**
1. Introduced 2 new signals COMSIG_CLOSET_PRE/POST CLOSE which are the
counter parts for the open signals. hook into them if you ever need to
do stuff before & after closing the closet while return BLOCK_CLOSE for
COMSIG_CLOSET_PRE_CLOSE if you want to block closing the closet for some
reason
2. 2 new procs `before_open()` & `before_close()` which are the counter
parts for `after_open()` & `after_close()`. If you need to write checks
and do actions before opening the closet or before closing the closet
override these procs & not the `open()` & `close()` procs directly
**Secured Craftables**
This is just a reopened version of #74115 after i accidently merged
another branch without resolving the conflicts first so i'll just
repaste everything here, since crates & closets are related might as
well do all in one
1. **Access secured closets**
- **What about them?**
**1. Existing System**
If you wanted to create a access secured closet with the existing system
its an 4 step process
- First construct a normal closet
- Weld it shut so you can install the airlock electronics
- Install the electronics [4 seconds]
- Unweld
This is a 4 step process which takes time & requires a welding tool
**2. New system**
Combine the 4 steps into 1 by crafting the secure closet directly

- **Bonus Features**
**1. Card reader**
The card reader acts as an interface between the airlock electronics &
the player. Usually if you want to change access on a locker you have to
- Weld the closet shut
- Screw driver out the electronics
- Change the settings
- Install it back
- Unweld
With a card reader there is no need of a welder & screwdriver. You can
change the access of the locker while its operational
**How do i install the card reader?**
1. Weld the closet shut
3. Insert card reader with hand
4. To remove the card reader use crowbar or just deconstruct the whole
closet with a welding tool
5. Unweld closet
**How to change its access?**
This will overwrite the settings on your airlock electronics. To do this
1. make sure the closet is first unlocked. This is important so that no
random person who doesn't have access to the closet can change its
access while its locked. It would be like giving the privilege of
changing your current password without first confirming if you know the
old password
2. attack/swipe the closet with your PDA. Make sure your ID card is
inside the PDA for this to work. You can also just use your ID card
directly without a PDA
3. You will get 3 options to decide the new access levels

They work as follows
- **Personal**: As the name implies only you can access this locker and
no one else. Make sure to have your ID on you at all times cause if you
loose it then no one can open it
- **Departmental**: This copies the access levels of your ID and will
allow people having those exact same access levels. Say you want to
create a closet accessible to only miners. Then have an miner choose
this option and now only miners can open this closet. If the Hop sets
custom access on your ID then only people with those specific access
levels can open this closet
- **None**: No access, free for all just like a normal closet
**Security:** After you have set the access level it is important to
lock the access panel with a "multi-tool", so no one else can change it.
Unlock the panel again with the "multi-tool" to set the new access type
**2. Give your own name & description**
To rename the closet or change its description you must first make the
closet access type as personel i.e. make it yours, then use an pen to
complete the job. You cannot change names of departmental or no access
closets because that's vandelism
**3. Custom Paint Job**
Use airlock painter. Not intuitive but does the job.

**4. Personal closets**
Round start personal closets can have their access overridden by a new
ID when in it's unlocked state. This is useful if the last person has no
use for the closet & someone else wants to use it.
- **Why its good for the game?**
1. Having your own personal closet with your own name & description
gives you more privacy & security for your belongings so people don't
steal your stuff. Personal access is more secure because it requires you
to have the physical ID card you used to set this access and not an ID
which has the same access levels as your previous ID
2. Make secure closets faster without an welding tool & screw driver
3. Bug fix where electronics could be screwed out from round start
secured closets countless times spawning a new airlock electronic each
time
2. **Access secured freezers**
- **What about them?**
The craftable freezer from #73942 has been modified to support secure
access. These can be deconstructed with welders just as before

- **How does it work?**
The access stuff works exactly the same as secure closets described
above. You can rename & change description with pen just like the above
described secure closets. No paint job for this. Install card reader
with the same steps described above.
- **Why it's good for the game?**
1. Make access secured freezers faster without a welder and screwdriver
2. Your own personally named & locked freezer for storing dead bodies is
always a good thing
4. **Access secured suit storage unit**
- **What about them?**
Suit storage units now require airlock electronics for construction. The
access levels you set on it will be used to decide
1. If a player can unlock the unit
2. If the player can open the unit after unlocking
3. If the player can disinfect whatever is inside
By default all round start suit storage units have free access
- **Install card reader**
Provides the same functionality as secured closets described above. To
install it
1. Open its panel with a screw driver
2. Add a card reader to it with hand
3. Close the panel
When you deconstruct the machine the card reader pops back out
- **Why it's good for the game?**
1. Having your own access protected and named suit storage unit so
random people don't steal your mod suits? Who wouldn't want that.?
Provides security for department storage units.
2. If you have the unit locked then you cannot deconstruct the machine
with a crowbar providing additional security
3. Fixes#70552 , random people can't open/unlock the suit storage unit
without access. You can set personal access to make sure only you can
access the unit
## Changelog
🆑
add: Access secured closets. Personal closets can have their access
overwritten by an new id in it's unlocked state
add: Access secured freezers.
add: Access secured suit storage units.
fix: Suit storage unit not having access restrictions.
fix: airlock electronics not properly getting removed after screwing
them out from round start lockers
fix: round spawned open crates run timing when closed
fix: open crates hiding stuff in plain sight
fix: open closets/crates sucking up contents during late initialize
causing them appear empty & open
/🆑
---------
Co-authored-by: Tim <timothymtorres@gmail.com>
## About The Pull Request
Resprites stock parts to bring them up to date, changes manipulators to
servo motors as I couldn't make manipulators work well at this scale.

(Power cells sold separately)
## Why It's Good For The Game
The old stock parts are dated, in some cased quite ugly, and in the case
of manipulators a ball of assorted pixels. Incidentally removed a couple
of single letter var names.
## Changelog
🆑
image: Stock parts have been resprited.
code: Manipulators have been renamed to servo motors, all related types
have been repathed to match.
/🆑
This PR implements this design document:
https://hackmd.io/@Y6uzGFDGSXKRaWDNicSiEg/BkRr176st
Put briefly, this will remove every existing golem subtype and
consolidate golems into a single species with cool new sprites.
NOT implemented from that PR is the ability to eat Telecrystals, I
couldn't come up with an appropriate visual that can stack with the
existing ones, but that should be a reasonably trivial add for a future
artist & developer.
New Golems have a food-based mechanic where their hunger decays pretty
quickly and can only be replenished by eating minerals. They start
moving slower as they get hungrier, until eventually they become
completely immobilised and need to be rescued.
Eating different kinds of minerals will visually change your sprite and
give you a special effect in a similar way to old golems, but temporary.
While transformed, you can't eat any other kind of mineral which would
transform you (but can still consume glass).
To see the full list of effects, look at the hackmd above.
In service of these sprites working I have refactored the
`species/offset_features` feature by killing it and delegating that
responsibility to limbs instead. Rather than applying an offset to items
due to your species, it is due to your weird head or arms. This makes
overall more sense to me, but it inflates the code changes in this PR
somewhat.
It doesn't make a lot of sense to atomise unfortunately because that
code also seemed to be entirely unused until I tried to use it in this
PR, so you wouldn't be able to tell if my changes broke anything. I
might make a downstream sad by doing this.
All of the actual numbers in this PR are made up and only loosely
tested, it will need some testmerges to gather feedback about whether it
sucks or not.
Other relevant changes:
I reworked how bioscrambling works based off bodypart bodytypes, to
automatically exclude golem limbs in either direction. There's really no
way to have those work on humans or vice versa. Organs still fly though.
## About The Pull Request
Apparently paint cans were never decrementing their `paintleft`
variable. They do this now, plus an error message for the funny
multicolor paint can when you try changing the color while it's empty.
Fixes#75110 by decrementing the variable.
This also makes sure clown borgs aren't hampered by their inability to
just get a new paint can by making their specifically infinite use.
## Why It's Good For The Game
Apparently paint cans were supposed to be limited use in the first
place, considering they had a `paintleft` variable that was never
decremented. We could also look at a few different options for refilling
these cans in the future that could further the creativity available
with them.
## Changelog
🆑
fix: Paint cans have become limited use as intended by the gods of code
fix: Clown borgs get unlimited paint, as a treat.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
## About The Pull Request
HackMD: https://hackmd.io/RE9uRwSYSjCch17-OQ4pjQ?view
Feedback link: https://tgstation13.org/phpBB/viewtopic.php?f=10&t=33972
Adds a Coroner job to the game, they work in the Medical department and
have their office in the Morgue.
I was inspired to make this after I had played my first round on
Paradise and messed around in there. The analyzer is copied from there
(https://github.com/ParadiseSS13/Paradise/pull/20957), and their
jumpsuit is also mostly stolen from it (i just copied the color scheme
onto our own suits).
Coroners can perform autopsies on people to see their stats, like this

They have access to Medbay, and on lowpop will get Pharmacy (to make
their own formaldehyde). They also have their own Secure Morgue access
for their office (doubles as a surgery room because they are edgelords
or whatever) and the secure morgue trays.
Secure Morgue trays spawn with their beepers off and is only accessible
by them, the CMO, and HoS. It's used to morgue Antagonists. Security's
own morgue trays have been removed.
The job in action
https://cdn.discordapp.com/attachments/950489581151735849/1102297675669442570/2023-04-30_14-16-06.mp4
### Surgery changes
Autopsies are a Surgery, and I tried to intertwine this with the
Dissection surgery.
Dissections and Autopsies both require the Autopsy scanner to perform
them, however you can only perform one on any given body. Dissections
are for experiments, Autopsies is for the paper of information.
Dissected bodies now also give a ~20% surgery speed boost, this was
added at the request of Fikou as a way to encourage Doctors to let the
Coroner do their job before reviving a body.
I also remember the Medical skill, which allowed Doctors to do surgery
faster on people, and I hope that this can do something like that
WITHOUT adding the potential for exploiting, which led to the skill's
downfall.
### Morgue Improvements
Morgue trays are no longer named with pens, they instead will steal the
name of the last bodybag to be put in them.
Morgue trays are also removed from Brig Medical areas and Robotics, now
they have to bring their corpses to the Morgue where the Coroner can
keep track and ensure records are properly updated.
### Sprite credits
I can't fit it all in the Changelog, so this is who made what
McRamon
- Autopsy scanner
Tattax
- Table clock sprites and in-hands
CoiledLamb
- Coroner jumpsuits & labcoats (inhand, on sprite, and their respective
alternatives)
- Coroner gloves
- CoronerDrobe (the vending machine)
## Why It's Good For The Game
This is mostly explained in the hackmd, but the goal of this is:
1. Increase the use of the Medical Records console.
2. Add a new and interesting way for Detectives to uncover mysteries.
3. Add a more RP-flavored role in Medical that still has mechanics tied
behind it.
## Changelog
🆑 JohnFulpWillard, sprites by McRamon, tattax, and Lamb
add: The Coroner, a new Medical role revolving around dead corpses and
autopsies.
add: The Coroner's Autopsy Scanner, used for discovering the cause for
someone's death, listing their wounds, the causes of them, their
reagents, and diseases (including stealth ones!)
qol: Morgue Trays are now named after the bodybags inside of them.
balance: The morgue now has 'Secure' morgue trays which by default don't
beep.
balance: Security Medical area and Robotics no longer have their own
morgue trays.
balance: Dissected bodies now have faster surgery speed. Autopsies also
count as dissections, however they're mutually exclusive.
/🆑
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
<!-- 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
I find it strange that you don't get anything if you just break tree or
rock with brute force. So you will now get something but with 0.6
multiplier.
I chose 0.6 multiplier so using tools are still preferable, but you
still get amount of recourses you can do something with.
<!-- 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
You can gather some materials if you have no tools besides the toolbox.
<!-- 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. -->
🆑
qol: Trees, rocks, grass and etc. now drop materials when destroyed.
/🆑
<!-- 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. -->
---------
Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com>
## About The Pull Request
Adds announce_to_ghosts()/notify_ghosts() calls to a bunch of different
things.
**THIS INCLUDES:**
- Powersink being activated/reaching critical (explosion) heat capacity.
- His Grace being awoken.
- Hot Potatoes being armed.
- Ascension Rituals being completed.
- Eyesnatcher victims.
- Ovens exploding as a result of the Aurora Caelus event.
- Wizard Imposter spawns.
- Rock-Paper-Scissors with death as the result of Helbital consumption.
- BSA impact sites.
- Spontaneous Appendicitis.
- The purchasing of a badass syndie balloon.
- The Supermatter beginning to delaminate.
This was everything that I could think of that would be worth announcing
to deadchat. These were all chosen with consideration to questions like
"how easy would it be to spam deadchat with this?" and "will observers
actually see the interesting thing happen, or just the aftermath?".
Not gonna lie, I've really become an observer main as of recently. Maybe
that's being reflected in my recent PRs. Who's to say? Deadchat
Announcement Variety Pack 2 will probably never come out. Sorry.
## Why It's Good For The Game
Gives deadchat a better indiciation of when/where something **REALLY
FUNNY** is about to happen. Draws attention to certain things that are
likely to gather an audience anyways, but sooner (for your viewing
pleasure). In simple terms, it helps the observers observe things
better.
Some cases, such as the aurora caelus or helbitaljanken, are occurrences
so rare that they deserve the audience.
## Changelog
🆑 Rhials
qol: Observers now recieve an alert when a powersink is activated/about
to explode.
qol: His Grace being awoken now alerts observers, to give you a
headstart on your murderbone ghost ring.
qol: Ascension Rituals being completed will also alert observers, for
basically the same reason.
qol: Arming a hot potato will now alert observers. Catch!
qol: Eyesnatcher victims will now notify observers, and invite them to
laugh at their state of misery and impotence.
qol: Observers will be notified of any acute references to The Simpsons
or other 20th Television America copyright properties.
qol: Wizard Imposter spawns alert observers, much like any other ghost
role event should.
qol: Playing Rock-Paper-Scissors with death will now alert the observers
and invite them to watch. Better not choke!
qol: Observers now get an orbit link for BSA impact sites. Why does it
keep teleporting me to the AI upload??
qol: Spontaneous Appendicitis now alerts deadchat.
qol: The purchasing of a badass syndie balloon now alerts deadchat. You
might not be any more powerful, but at least you have an audience.
qol: When beginning to delaminate, the Supermatter will alert observers
and invite them to watch the fireworks.
/🆑
## About The Pull Request
Added wedding cakes, which are sliceable into wedding cake slices.
Mechanically, they are just worse pound cakes - they require more
ingredients and provide less nutrients - but they are here for the
flavor. Sometimes a pound cake just doesn't suffice when you want to
roleplay a wedding.
Fair warning, I've not done a pull request here before, any advice
welcome.
<img
src='https://user-images.githubusercontent.com/102194057/235379312-2eaecffa-c48f-45b6-a3c6-09bf4bbff14a.png'>
## Why It's Good For The Game
Roleplayers like weddings, and what is a wedding without a cake? (This
PR was originally made for Skyrat but they recommended I take it
upstream).
## Changelog
🆑
add: Added wedding cakes
/🆑
---------
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
## About The Pull Request
Cardboard box MGS alert doesn't trigger on blind mobs.
## Why It's Good For The Game
Just makes sense I think
## Changelog
🆑 Melbert
balance: Blind people don't get alerted when someone in a cardboard box
pops out nearby
/🆑
## About The Pull Request
https://github.com/tgstation/tgstation/pull/74985#issuecomment-1523773626
Tests that all jobs that have `spawn_position > 0` at roundstart have a
location to spawn at.
Also changes the failure message for
`get_default_roundstart_spawn_point` to send to `log_mapping` rather
than `log_world`, as it is a map error and log world doesn't really help
anyone. This would've been sufficient for the existing unit test
`log_mapping`, but that unit test expects that the log has an areacoord
supplied, which we can't really do, given we're reporting a _lack_ of
something.
## Why It's Good For The Game
Stops maps from regressing and dumping people on the latejoin shuttle
roundstart.
## Changelog
~~Not necessary unless I find a map which forgot a landmark~~
🆑 Melbert
fix: Tramstation Robotics and RD now spawn in their departments
roundstart
fix: Birdboat detective now spawns in their office
/🆑
## About The Pull Request
This fixes the powersink always showing as being "very hot" under
certain conditions, since there was a missing set of parenthesis in the
observer/distance check.
## Why It's Good For The Game
Fixes a bug I found while making a QOL change that ended up being kind
of pointless.
## Changelog
🆑 Rhials
fix: Powersinks no longer always show as being very hot if you're too
close.
/🆑
## About The Pull Request
Continuation of #74770;
- Fixes some botched math due to the borg material storage datums using
a proprietary value per sheet (500 vs 2000)
- Restocking is now enabled by default when a borg enters a charger. It
can be disabled during the charge session, but will re-enable the next
time the charger is used.
- Moves the Metal and Glass storage datums to a new shared subtype.
- Restocking speed scales with the manipulator tier of the recharger; By
default, it is 1/8th the total metal/glass storage per cycle, and
increases to 1/5th with a tier 4 manipulator.
## Why It's Good For The Game
These were changes I meant to make before the last PR was merged.
## Changelog
🆑
fix: Fixed math on cyborg restocking
qol: borgs entering chargers now have the restocking feature enabled by
default. It can be disabled with a right-click while charging if you
don't want to eat the station's mats.
balance: Borg restocking speed now scales with the charger's manipulator
tier.
/🆑
basically ex_act's implementation on basic mobs would call parent and
then react to it's value, this is presumably to do the first check about
space vine mutations and whatever. the problem is that the `/mob/living`
implementation would itself also call parent, and that would always
return null because `/atom/proc/ex_act` doesn't have a set return value.
So, this simply would _always_ early return, with ex_act presumably
*never* working on basic mobs for at least four months now.
I decided to then change up the return values for pretty much all
implementations of `ex_act()` since there was no rhyme or reason to
returning null/FALSE/TRUE, and documenting why it's like that.
Just to make sure I wasn't breaking anything doing this (at least on
base implementations), I wrote a unit test for all of the three major
physical types in game (objs, mobs, turfs) because i am a paranoid
fuckar. we should be good to go now though.
## Why It's Good For The Game
i noticed this because placing c4's on sargeant araneus wouldn't
actually damage it whatsoever. now it actually does the stated 30
damage, but araneus has like 250 health so it doesn't actually matter in
the long run. whatever at least it does the damn 30 now.
also adds a unit test for this specific case as well as a range of other
cases to ensure this stuff doesn't silently break in this way anymore
Gives stairs `move_resist = INFINITY`, preventing anything with
above-average move force from moving them.
Currently, mobs with above average move forces, like Goliaths and
Megafauna will break stairs on their first use, not by destroying them
but by physically moving the stairs one tile.
While funny, this really does mess with a few maps, opens up easy grief,
and doesn't make too much sense.
Ladies, Gentlemen, Gamers. You're probably wondering why I've called you
all here (through the automatic reviewer request system). So, mineral
balance! Mineral balance is less a balance and more of a nervous white
dude juggling spinning plates on a high-wire on his first day. The fact
it hasn't failed after going on this long is a miracle in and of itself.
This PR does not change mineral balance. What this does is moves over
every individual cost, both in crafting recipes attached to an object
over to a define based system. We have 3 defines:
`sheet_material_amount=2000` . Stock standard mineral sheet. This being
our central mineral unit, this is used for all costs 2000+.
`half_sheet_material_amount=1000` . Same as above, but using iron rods
as our inbetween for costs of 1000-1999.
`small_material_amount=100` . This hits 1-999. This covers... a
startlingly large amount of the codebase. It's feast or famine out here
in terms of mineral costs as a result, items are either sheets upon
sheets, or some fraction of small mats.
Shout out to riot darts for being the worst material cost in the game. I
will not elaborate.
Regardless, this has no functional change, but it sets the groundwork
for making future changes to material costs much, MUCH easier, and moves
over to a single, standardized set of units to help enforce coding
standards on new items, and will bring up lots of uncomfortable balance
questions down the line.
For now though, this serves as some rough boundaries on how items costs
are related, and will make adjusting these values easier going forward.
Except for foam darts.
I did round up foam darts.
Adjusting mineral balance on the macro scale will be as simple as
changing the aforementioned mineral defines, where the alternative is a
rats nest of magic number defines. ~~No seriously, 11.25 iron for a foam
dart are you kidding me what is the POINT WHY NOT JUST MAKE IT 11~~
Items individual numbers have not been adjusted yet, but we can
standardize how the conversation can be held and actually GET SOMEWHERE
on material balance as opposed to throwing our hands up or ignoring it
for another 10 years.
## About The Pull Request
Health analyzer now shows off any embeds in the limbs, right under their
damage.

## Why It's Good For The Game
Currently the only way to tell there's an embed in a bodypart is by
examining them, and Doctors have their health analyzer to examine FOR
them. Knowing embeds is an important part of treatment, so I think it's
justified to have the analyzer show them this info.
## Changelog
🆑
qol: Health Analyzers now show embeds in bodyparts on examine.
/🆑
## About The Pull Request
Adds the Death Sandwich to the game, the ultimate form of
bread-conveyed-meat-based consumables.

And remember;
Eat it right, or you die!
## Why It's Good For The Game
I'm genuinely surprised we don't already have a meatball sub in the game
also I love humor food, and I doubt my edition of the Eggcellent
Challenge would ever be merged if I tried to do so, so this is the next
best thing.
## Changelog
🆑 Wallem
add: The ancient recipe for the Death Sandwich has been rediscovered
buried in the deepest depths of an erupting volcano.
/🆑
## About The Pull Request
I decided that Service Borgs had been left in the dust for too long, and
that since they're named 'Service' cyborgs and not 'Bar' cyborgs I'd
give them upgrades to let them assist in the kitchen. To do this I've
made 4 upgrades.
First up, rolling table dock, to provide mobile service. Nothing worse
than offering someone a drink in a hallway and having to drag them to
the nearest table or having to drop it on the floor. That's poor
service.
Secondly there's a condiment synthesizer, which can produce solid
condiments like flour, cornmeal, salt, coco powder, etc.
Thirdly a kitchen toolset, a knife that can switch to a rolling pin. The
blade dulls when not used for cooking.
Fourthly, A service apparatus, which can pick up food, oven trays, soup
pots, plates, bowls and paper.
The upgrades are locked behind a new techweb node, Cyborg Upgrades:
Service.
This node is locked behind the same nodes as the janitorial cyborg
upgrade node.
And outside the upgrades, I've also given the cyborg a rag so it can
finally clean it's glasses and tables. I've also given it a money bag,
to store the profits. This gives cyborgs an opportunity to save up for
getting on the deluxe shuttle. Or giving people a new target to hold up
and shake down for their hard earned money. Please don't law 2 them into
giving you their lunch money. Or do.
I've also enabled the RSF to print a few more things. Plates, bowls,
plastic cutlery and paper cups.
I've also enabled borgs to open and close the oven. Alas, they still
can't pick up food or the oven trays from the oven, since the oven is
sticky in a manner.
I've also added a little bit more to the borgshaker, and moved sugar
from the borgshaker to the condiment synthesizer.
And not only the borgshaker, but the emagged shaker too. The emagged
shaker has been given blood and carpotoxin. And you may ask 'Why those
two ingredients?' Both can be used like fernet, both for nice things,
and harmful things, staying in line with fernet. Blood can be used to
mix drinks or be used for food, or for disease, since the borg or anyone
with access to milk and water can easily produce virus food. Meanwhile
carpotoxin is well, a rather weak toxin but can also be used to make
imitation carpmeat. This'l give more reason to also consider the borg
for emagging, or giving illegal tech, instead of just speedlining for
the nearest engineering borg or medical borg.

The Condiment Synthesizer uses the same UI as the medical hypo, due to
it's ingredient list being low in comparison to the shaker

I've been trying to figure out how to get an item to allow the borg to
open the cooking menu when used inhand/inmodule. But I can't figure that
one out, sadly. Nor how to let the Service Apparatus pick up trays from
the oven.
So for now, service borgs will have to settle for simply assisting in
the kitchen.
## Why It's Good For The Game
Allows Service Cyborgs the tools to help in the kitchen, and elsewhere
too.
## Changelog
🆑
add: Damp rag and Money bag to service borg
add: Service borg upgrades, with accompanying tech web node
add: Sprites for kitchen toolset, and service apparatus
balance: The RSF can print a few more things, paper cups, seaweed
sheets, plates, bowls, plastic cutlery and standard decks of cards.
balance: Sugar moved from borgshaker to condiment synthesizer. Berry
juice, cherry jelly and vinegar added to borgshaker. balance: Both
shaker and synthesizer can also be adjusted to give 1 unit at time, so
it goes 5, 10, 20 then 1, and back around.
balance: Adds blood and Carpotoxin to the emagged borgshaker.
fix: Money bag was missing a description, it now has one.
/🆑
Golems can now redeem points from their ORM. There's a check for bank
job, so only the blank ID cards golems get will work. Miners
theoretically can use one of the cards to get points themselves, but
then they need to carry that card around and get all points through it,
because their starting ID cannot claim it.
## About The Pull Request
Changes the extinguisher cabinet icon, letting you see the contents
without opening it. Also added advanced and crafted extinguisher
sprites.

## Why It's Good For The Game
It looks better and more functional.
## Changelog
🆑
image: extinguisher cabinet has new sprites
/🆑
## About The Pull Request
Fixes that you could spam open books.
Changed that toy version of codex cicatrix didn't have a proper
animation.
And you also can close it in your hand now.
Also fixed some minor typos.
## Why It's Good For The Game
Book looks like book now.
## Changelog
🆑
fix: You can't spam open codex cicatrix now.
qol: You can close codex cicatrix in your hand now! Also toy codex
cicatrix has proper animation now.
/🆑
## About The Pull Request
Removes Kilostation from the game.
Since I know this is bound to be a touchy subject (the map has its fans,
after all), I feel I need to explain the situation and why this decision
has been made.
While working on mapping for TGStation, there's an inherent struggle
between what's good for mappers, and what's good for coders. On the
mapping side, we want as many maps as we reasonably can have in the
repo. On the code side, every map added introduces a new layer of
complexity for adding new features. While we're attempting to make
strides in improving cooperation between the two teams so we can handle
both many maps and lots of new features, in the here and now this means
that we find ourselves limited in how many maps we can maintain at once.
With this in mind, we find ourselves in a conundrum when new maps come
along. While it would be nice to accept everything new without needing
to remove anything else, the above problems force us to stick to a
limit. Via a fair amount of discussion on the maintainer team, this was
set to 6 recently, which we reached when Northstar was merged, and
meaning that a removal was required for any new maps.
As for why the decision was made to take Birdshot over Kilo, I believe
it is better for us to have a map that has room to grow and an active
creator. As much as I was personally a Kilo enjoyer, the map has
consistently proven to be problematic for new code additions due to its
scale, and it receives little maintenance outside of the bare essentials
as a result. With all this in mind, it comes out as the obvious choice
for removal in this case. Of course, nothing stops it from coming back
in future if any of the above changes.
## Why It's Good For The Game
TL:DR: In order to keep the maintenance budget down, we need to remove a
map for the sake of new blood, and in this case Kilo was the simplest
choice.
## Changelog
🆑
del: Kilostation has went back to its home planet. It served us
faithfully for nearly 3 and a half years. May it rest in peace.
/🆑
---------
Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
If I could've made this more atomic, I would have in a heartbeat, trust
me.
## About The Pull Request
Hey there. People were mocking us for having spiderlings still be a
subtype of `/obj/structure`. I decided to take a lot of time to fix
that. A lot of behavior it was implementing was just pseudo-mob stuff,
so it was actually easier than it looked for the raw conversion. A lot
of the footwork on spider stuff in the basic framework was already done
previously by Jacquerel, so that was pretty nice.
However, there are two new things that weren't introduced in the code
that had to be put in.
A) A component to handle growth and differentiation into a mob. This may
have already existed, no clue. If it does (and it's NOT
evolutionary_leap), let me know.
B) AI Behavior to handle seeking out a vent, entering a vent, and then
exiting out of a different vent. I may have gone a bit wacky on the
code, but it certainly works as expected (spiderling goes in one vent,
exits the other). Let me know if you can think of a way it can be better
optimized, but it was deliberately written to be very failsafey in case
shit goes yonkers.
One fundamental difference between structure spiderlings and basic mob
spiderlings (beyond the AI and not just a random prob() check for
movement) is the fact that they had vent movement coded in... but we
_really_ don't need stuff like that for our intents and purposes. If the
range turns out to be too OP in the current framework, we can always
change it up a bit, but also there's a _lot_ of vents we can end up in
the station (my testing had one spiderling end up in the AI sat to get
obliterated).
## Why It's Good For The Game
Spiderlings aren't structures! They behave like a mob should! Players
can possess spiderlings! They work seamlessly with differentiating into
a giant spider! Better AI! More room for people to add into this very
under-utilized buggers!
## Changelog
🆑
refactor: Spiderlings are now basic mobs, report any complete
weirdness/deviation from known behavior. They should be a lot more
intelligent now though.
add: AI Spiderlings are super fragile, but they're also super fast,
especially when they get into a vent. Once they're in circulation, they
could end up everywhere! Maybe in the armory, maybe in a locked closet
in maintenance. Be sure to be vigilant and splat them whenever you can
to save the station from a whole lotta heartache!
/🆑
---------
Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com>