## About The Pull Request
Fixes#75451
Originally I just whitelisted them because they're structures that are
supported by their surroundings... but there's still the theoretical
scenario where it has expanded over a reasonably large chasm and then
becomes almost impossible to remove because you can't easily get at the
ones in the middle, and it would be "levitating" after you cut off
everything around the edge.
So instead this adds a trait which restores the original behaviour of
chasms where they delete stuff which falls into them and applies it to
Blobs and Kudzu.
## Why It's Good For The Game
It's a very niche scenario but "expanding structure falls into abstract
chasm storage" causes issues where it potentially keeps processing in
there and there isn't much you can do about it.
Maybe there's other stuff that commonly falls into chasms we'll decide
that we want to delete instead of keeping in pools now that you can just
slap a trait onto something to do it, future consideration.
## Changelog
🆑
fix: Blob and Kudzu tiles which expand into chasms will now be correctly
destroyed by the chasm.
/🆑
## About The Pull Request
This PR solves the problem with entering a server with a different (from
English) layout and not being able to use chat binds.
so far, alas, you need to re-login with the English layout.
https://i.imgur.com/WjixRVv.mp4
## Why It's Good For The Game
Resolves an issue for servers based on this build.
## Changelog
🆑 Vishenka0704
fix: fixed different from english keyboard layout to use tgui chat
/🆑
## About The Pull Request
The strength of the slurring effect drunkness applies on you now scales
based on how drunk you are.
Being "a little" drunk still changes your saymod, and makes you
occasionally slur your words...

But being "a lot" drunk kicks it up to 11

Additionally, drunk slurring was separated into "generic slurring" and
"drunk slurring", the former which does not scale but less closely
resembles drunkness. Generic slurring is used in places such as
concussions, so this is an added bonus.
As a result of the split, I had to update mind restoration. Now it heals
all types of slurring, which does include cult slurs.
## Why It's Good For The Game
I, and many other people, always found it very annoying when you became
completely illegible from taking one sip of a drink. This seeks to amend
that by making low levels of drunkness still for the most part be
legible and sane. Average drunkness is roughly the same / equal to the
old slurring effect, while "very drunk" is even more illegible and silly
(which I find funny).
This has the added bonus of separating out "drunk slurring" and "generic
slurring", allowing effects to slur your words without going full ham on
drunkness (burping and "huhh"s).
## Changelog
🆑 Melbert
add: When you are drunk, the strength of your slurring now varies based
on how drunk you are. Being "a little drunk" only rarely slurs your
words, being average drunk is the same as the old effect, while being
very drunk now slurs your words even more.
add: Some non-alcohol sources of slurring, such as concussions, now give
"generic slurring" rather than "drunk slurring", which less resemble
being drunk (ie, no burping).
add: Mind restoration now heals ALL slurring, rather than only drunk
slurring (which includes cult / heretic slurring).
/🆑
## About The Pull Request
Adds elevator music into the game that is played by an elevator panel.
https://github.com/tgstation/tgstation/assets/42353186/1a801604-3990-46ae-a96a-b3766b102d62
It's done by using loop sound, with a Kevin MacLeod "Local Forecast -
Elevator" (UNDER CC ATTRIBUTIONS 4.0, and we anyway used some other
Kevin MacLeod music) chopped into 8 small pieces.
The elevator panel has a variable which allows playing music but can be
changed in the map editor if you don't want it to play at certain
places.
(It also doesn't ignore walls, this means you can't hear the music
through wall or when elevator is closed)
## Why It's Good For The Game
Gives elevators more flavour and love, especially when people mostly
prefer stairs to those "laggy crushing machines."
Because of this people might instead hop into an elevator just to hear
meme elevator music, which is relaxing and might create comedic
situations (although elevators don't move that fast)
## Changelog
🆑 DrDiasyl aka DrTuxedo
sound: Nanotrasen have started installing music players in the elevators
to boost workers' morale.
/🆑
---------
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
## About The Pull Request
Moves the genetic damage status effect's `qdel()` after making the
status effect's owner a gorilla.
Basically un-fucks the interaction, as it was accidentally fucked in
#74799, see
https://github.com/tgstation/tgstation/issues/74981#issuecomment-1546140751
## Why It's Good For The Game
Fixes#74981
## Changelog
🆑
fix: made gorilla transformation when affected by excess amounts of
genetic damage work
/🆑
## About The Pull Request
I thought, "Hey it'd be neat if glass stuff shattered when thrown
around, wouldn't it?" And thus, shattering became a component. Though it
only applies to any subtype of object, its still more than enough for my
purposes. Plates will still shatter as normal before, but if for any
reason a glass toolbox, or glass statue block, anything glass you get
the idea, is thrown? Shards everywhere. Oh no, our table, its broken.
## Why It's Good For The Game
Something shattering on impact from being thrown or dropped a zlevel is
hilarious, and it'd be even funnier to be able to extend this behavior
to other objects as well. Finally we can relive every comedy movie ever
where some construction workers drop a comically large glass object on
someone from two floors up.
Fixes#72165
First PR, first-time coder, this might be a doozy but _hopefully_
everything is fine.
## About The Pull Request
This fixes signers being able to speak with sign language while cuffed
or emotemute, bringing the feature back to how it was initially
intended.
This also fixes signers only being able to sign spells based on their
ability to speak. Before this PR, signers could cast spells with sign
language, but it was dependent on their ability to speak with their
mouth, allowing them to sign spells even if they would not be able to.
Instead, it has been changed to work so that one can sign spells only
when both of their hands are completely empty.
## Why It's Good For The Game
First of all, signers should probably not be able to speak when cuffed
or emotemute, I'm not sure when this broke but somewhere along the lines
it did and this is simply bringing it back to how it was supposed to be.
Second of all, spells were created long before sign langauge (I believe,
don't quote me on that), but sign language is just another language and
still can communicate the same. Furthermore, signing spells instead of
speaking them is overall more difficult to work with given the fact that
it won't work if you are holding items, restrained, have a limb disabled
or amputated, or are emotemuted. The one benefit that sign language
provides is being able to sign when otherwise mute, but this only really
applies in select cases. I feel the downsides definitely outweigh the
upsides in this case, and it will be more of a gimmick so that mute
players can still play antags like heretic.
## 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
i gave Psychologists access to the Coroner's office on lowpop so the
Psych and Coroner can replace eachother when the other is missing,
however I forgot to give Morgue access to the Psychologist so they can
do this.
## Why It's Good For The Game
Fixes my own oversight.
## Changelog
🆑
fix: Psychologists have Morgue access on lowpop, on top of their
existing Coroner office access.
/🆑
## About The Pull Request
Prior to this change, if you put an item on the griddle, it immediately
began to smoke, regardless of whether the griddle was on or not. Now
smoke will only appear when the griddle is turned on.
## Why It's Good For The Game
Graphic QoL for chefs
https://user-images.githubusercontent.com/10997188/236855447-8912a689-bec3-4cba-a6f3-45c428d7af29.mp4
## Changelog
🆑
fix: fixed griddle code so that the smoke over the grilling items
appears only when the griddle is on
/🆑
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.
/🆑
The outfit manager will now search more thoroughly for a user's ID when
attempting to change its trim. This prevents a runtime when attempting
this on a user with a PDA/Wallet/non-ID item in their ID slot.
The instance causing problems in my case was the nuclear operative
outfit -- Attempting to make a player a nuclear operative from the
player panel while they are wearing a wallet would fuck up the
outfitting process.
If you are wearing a wallet it will modify the trim of whichever ID is
in the wallet's first slot.
Removes coroner from being under service in the crew manifest and
latejoin meny
I believe it would also make it so getting banned from Service jobs
wouldn't ban you from coroner. (Don't know if that ban type would ever
be used)
## 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
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
adds orm access to the chaplain, curator, clown, mime, lawyer, and
psychologist
## Why It's Good For The Game
most of them didnt have it because they were part of the civilian
department which didnt have a lathe. they were moved to service a few
years back but we forgot to give them the access
someone just forgot about it when making psychologist lol
## Changelog
🆑
fix: adds orm access to the chaplain, curator, clown, mime, lawyer, and
psychologist
/🆑
## 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
Fixes#75153
Caused by #75050
`Note: the old limb gets sent to nullspace during try_attach_limb`
...This assertion is completely wrong, and I'm not sure where it came
from. Perhaps it's different on their downstream.
`try_attach_limb` does not care about limbs that occupy the same body
zone and will happy attach itself, giving you two left arms or two right
legs.
`del_and_replace_bodypart` handles this by deleting the existing limb,
`return_and_replace_bodypart` did not handle this whatsoever. So I added
that missing handling.
I'm not sure if we *actually want* `try_attach_limb` to disregard limbs
that occupy that slot already. It seems like weird behavior but also
consumers should probably know what they're doing in regards to that?
While I was here, I made both prosthetic related quirks use `special =
TRUE`. The application of these limbs are supposed to be quick swapping
no-side-effects, since it's done at mob creation, so it should be using
special.
## Why It's Good For The Game
Three arms is bad, okay?
## Changelog
🆑 Melbert
fix: Fixed Prosthetic Quirk not removing the limb before giving the
prosthetic
/🆑
## About The Pull Request
This PR changes the request consoles in the folowing ways:
- The request console's had some very old UI, so I decided to convert it
to tgUI.
- Cleans up and changes various variable names. Also removes a
historical comment (desouls the file)
- Sending an announcement now has a cooldown of 30 seconds like the
message console priority announcement
- Audio feedback on successful and erroneous message give a little audio
feedback
- Reply is now Quick Reply, which you do in a popup
I have half a mind to remove the long material list from the ORM, as
some people told me I should, but for now it stays.
<details>
<summary>Screenshots of the new UI</summary>



</details>
I originally planned to add mapping helpers, but decided to delay it
until a future PR.
## Why It's Good For The Game
TgUI is good and powerful.
## Changelog
🆑
refactor: converts the request console to tgui
/🆑
## 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>
This PR demotes the Psyker-gang from a pirate team to a fugitive hunting
team. For more information on Psyker pirates, please refer to #71650.
Stuff this also does in the process:
- Gives fugitive hunters their own subfolder in the fugitives antagonist
folder, moves some of their stuff into hunter-specific files rather than
interlacing it with the rest of the fugitive code.
- Moves the hunter backstories to defines, to make reading things easier
while I made this change.
- Exhaustively moves everything related to psykers from being
pirate-oriented to hunter-oriented (typepaths, locations where stuff is
defined, etc. There should be nothing left behind related to psykers in
anything pirate related). (Tell me if I missed anything somehow).
They still get their ship (they even get their own custom
psyker-friendly prisoner capsule). They still have a bunch of lethally
chambered firearms. They're the same gunrunning nutcases they were
before, just as bounty hunters.
To assist with basic tasks such as "getting to the station" or "figuring
out who the fuck we're supposed to be kidnapping", the psykers have
"acquired" a Seer to assist them. They can _try_ to coordinate the
psykers and lead them through situations where their impairments put
them at too great a disadvantage. If you're one of the psykers, make
sure to keep this guy alive at all costs!
Why are they called Shikaris instead of hunters? Mariam-Webster says
it's a Hindi word for some kind of hunter/tracker, and it sounded like
something a bunch of space-junkies would call themselves because they
think it sounds cool.
They now also come with a slightly different motivation, now that they
can't directly threaten the crew for money. Psyker hunters now arrive
tasked with a dirty kidnapping job, payment rendered in GORE.
## Why It's Good For The Game
Psykers aren't up to the challenge of being pirates. They're bogged down
by a number of fundamental issues that render them unable to do anything
expected of pirates. As it currently stands, they present about as much
threat as you would expect from three blind junkies with guns.
Removing them wholesale would be kind of lame. They can function as a
bunch of chaotic-neutral gun-toting space-maniacs, but for the purposes
of gameplay, keeping them as pirates would be a waste of their talents.
Moving them to a lower-stakes role not only moves them to a niche they
are more capable of filling, but gives players a more lax environment to
get a grip on playing psyker without being overwhelmed.
Giving them a seeing-eye role should bring a more unique dynamic to how
psykers are played (that is, some semblance of organization rather than
blind flailing), and should help get over the mechanical hurdles of
being a psyker until better solutions can be made. It shouldn't be too
big of an impact on balance considering the psyker gang only has three
spawns, while most hunter packs have 4+.
Increases the tonguespike damage.
impact damage: 15 -> 25
pain damage (leaving tonguespike embedded damage): 4 -> 15
cooldown time = 10 seconds -> 1 seconds
Decreases the chemspike damage
impact damage: 4? -> 2
pain damage: 4 -> 0
These values were eyeballed when I originally added them, fuck embedding
code, uuuh... these values make more sense. At the very least
tonguespike was nearly unusuable being a 15 damage item that pain-ticked
for a pitiful 4.
The cooldown was just unnecessary and killed unnecessary organ
regeneration strategies
Chemspike ticked for too much when it wasn't really meant to deal much
damage.
## About The Pull Request
Inspired by #74967 and #68459 , and the fact that Tramstation regresses
very often -
Adds a unit test, `required_map_items`, which ensures that certain
typepaths which should definitely be mapped onto every map is mapped
onto every map
It can also be used to ensure that items which should not be mapped in
multiple times are not, among other things.
I included a few examples -
- Min 1, max inf of each head of staff stamps
- Min 1, max 1 departmental order consoles
- Min 1, max inf comms console
- Min 1, max 1 Pun Pun
- Min 1, max 1 Poly
- Min 1, max 1 Ian
If, in the future, a mapper decides they (for some reason) do not want a
certain previously-required item on their map, the test can be adjusted
such that it allows excluding or something, but currently it should be
for items which require conscious thought about.
#### QA: Why not make this a linter?
I attempted to make this a linter before realizing two things
1. Someone might make a spawner which spawns the items, or they might
get placed in a locker, in any case this accounts for everything on init
2. Linters run on every map, non-station maps included
So I went with a test
## Why It's Good For The Game
#50468#61013#74967
Why is it always the CMO stamp?
## Changelog
Not necessary (unless I find a map missing something, then this will be
updated)
## 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
idea by hometownfunky
## Why It's Good For The Game
True gamers don't get hit
## Changelog
🆑
add: miners with style meter can now parry kisses
/🆑
## About The Pull Request
Alphabetises some lists, json, and type paths related to phobias
## Why It's Good For The Game
It's neat and tidy
## Changelog
Not player facing
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
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
Fixes:
- Crusher mark score applying to attacked corpses
- Parrying not working, in 2 different forms
- The style bar not being accurate with >= 600 style points
## Why It's Good For The Game
Bugs bad
## Changelog
🆑
fix: Style meter parrying works again
fix: Style meter bar now works correctly with very high style point
count
/🆑
## About The Pull Request
Hey there,
This was spoken about in #70492 (specifically
https://github.com/tgstation/tgstation/pull/70492#issuecomment-1278069607),
and I have been waiting for this to be implemented for some time. It
never got implemented, so I decided to code it myself.
Basically, **if the server host doesn't disable it**, you are free to
export your JSONs as a player, right from the stat-panel. It's a pretty
JSON on 515 versions, too!
It's right here:

Here's what the prettified JSON looks like on 515.

There's a cooldown (default to 10 seconds) between exporting your
preferences.
#### Why is this config?
It's because in the past, a server host could always just file-share the
.sav or .json or whatever to the player, but they would have to do the
explicit option of actually bothering to make the files accessible to
the player. In that same line of logic, the server operator will have to
explicitly make the files accessible. This is mostly because I'm not
sure how good `ftp()` is at being a player function and wanted to have
some sort of cap/control somehow in case an exploit vector is detected
or it's just plain spammed by bots, so we'll just leave it up to the
direct providers of this data to elect if they wish to provide the data
or not.
## Why It's Good For The Game
Players don't have to log into Server A to remember what hairstyle they
loved using when they want to swap to Server B! That's amazing actually.
I always forget what ponytail my character has, and it'll be nice to
have the hairstyle in a readily accessible place (after I prettify the
JSON for myself).
It's also more convenient for server hosts to make player data like this
accessible if they really want to, too.
If we ever add an _import_ feature in the future (which would have to be
done with a LOT of care), this will also be useful. I wouldn't advise it
though having taken a precursory look at how much goes into it while
trying to ascertain the scope of this PR.
## Changelog
🆑
qol: The game now supports export of your preferences into a JSON file!
The verb (export-preferences) should now be available in the OOC tab of
your stat-panel if enabled by server operators.
server: Exporting player preferences is controlled by a configuration
option, 'FORBID_PREFERENCES_EXPORT'. If you do not wish to let clients
access the ftp() function to their own preferences file (probably for
bandwidth reasons?) you should uncomment this or add it to your config
somehow.
config: Server operators are also able to set the cooldown between
requests to download the JSON Preferences file via the
'SECONDS_COOLDOWN_FOR_PREFERENCES_EXPORT' config option.
/🆑
## About The Pull Request
The prosthetic limb quirk chooses a random limb to make prosthetic at
roundstart.
It was extremely buggy with the way quirks are displayed and the way the
dummy preview works and would frequently carry over to other characters
and not update correctly.
<details>
<summary>Eventually you end up getting this if you switch enough times
</summary>

</details>
I started fixing the issue when I realized this really shouldn't be
shown on the dummy to begin with, because what you see on the dummy will
not necessarily be what you get at roundstart. It's misleading.
I did however leave part of the fix that I was working on, because I
think it is useful to be able to undo the quirk via adminnery.
Closes https://github.com/Skyrat-SS13/Skyrat-tg/issues/20791
## Why It's Good For The Game
## Changelog
🆑
fix: prosthetic limb quirk will no longer display a prosthetic on your
character preview because it is buggy and hardly ever matches what you
end up getting upon spawning
code: removing the prosthetic limb quirk will restore your original limb
/🆑
## About The Pull Request
This PR messes around with gunpoints a bit, with the purpose of making
them more viable in certain scenarios without making them obnoxious. The
biggest change is that gunpoints now require a 0.5 second do_after()
where neither the shooter nor the target moves, and immobilizes both of
them for 0.75 seconds if point blank, or half that if you're 2 tiles
away. Originally you were supposed to only be able to initiate a
gunpoint from point-blank, but #56601 seems to have removed that
requirement, so we'll run with it and just leave it as advantageous to
gunpoint closer up. The do_after() reinforces that it should be used as
an ambush tactic, and so you can't use it on someone who's actively
fleeing or fighting you.
Getting held up will now make you emit a shocked gasp sound, a la Metal
Gear Solid, which combined with the short immobilize will hopefully make
it more noticeable that someone's pointing a gun at you.
Holdups will now immediately give a 25% bonus to damage and wounds,
instead of having to wait 2.5 seconds to hit the double damage stage.
Finally, right clicking someone that you're holding up will no longer
shoot them. That just feels like good consistency.
## Why It's Good For The Game
Hopefully makes gunpoints a little more viable for when you want to
stick someone who's not expecting it up without them immediately jetting
off. In the future I'd like to ape Baycode and let the gunman have an
action that toggles whether the victim is allowed to move, so you can
order them to move to a second location without instantly shooting them,
but that'll come later.
## Changelog
🆑 Ryll/Shaps
balance: Holding someone at gunpoint now requires both the shooter and
the victim to hold still for half a second before activating, so you
can't hold-up people fleeing or fighting you. After that, it will
briefly immobilize the both of you, 0.75 seconds if adjacent, or half
that if you're two tiles away. Nuke ops are immune to the
immobilization, since they're ready to die anyways.
balance: Holding someone up will immediately apply a 1.25x damage and
wound multiplier, rather than waiting 2.5 seconds to hit 2x.
soundadd: Being held up will now make the victim play a sharp gasp
sound, a la Metal Gear Solid.
qol: Trying to hold someone up that you're already holding up will no
longer shoot them.
/🆑
---------
Co-authored-by: san7890 <the@san7890.com>
## About The Pull Request
There's a problem where people would try to rebuild a whiteship and use
an Ore Silo for it. However, it would automatically unlink everything
when moving, because it's checking for z level as soon as it changes z
level itself, before the Ore silo has 'moved' as well.
~~To fix this, I'm now only disconnecting ore silos when a shuttle
moves. This mostly does the same as before, but technically you can sync
an unwrenchable connected machine and bring it to space with you
(without using a shuttle) to stay connected, but I don't see this as a
problem, and my original point of the PR was to prevent Lavaland ORMs.~~
I decided against this, instead I've made it so machines that aren't on
a valid level (either both on the same z level or both on the station
level) will be considered 'on-hold', much like if the QM has set it to
hold through the silo directly. This means that machines no longer
disconnect from the Ore silo on moving, they just can't access the
materials in it. This affects gameplay in 2 ways:
1. You no longer need to resync when you bring the machine back
2. It won't unsync itself every time you move station z-level with its
silo (such as on a whiteship).
I also made disconnecting from an ore silo actually remove them from the
ore silo's list of connected machines.
## Why It's Good For The Game
Closes https://github.com/tgstation/tgstation/issues/69863
## Changelog
🆑
balance: Machines (such as ORM and Techfabs) will no longer unsync from
Ore silos when it moves Z-level, instead it will prevent materials from
being used, as if it was on hold.
/🆑
## About The Pull Request
A mob being enslaved to another is now logged in game logs. This hits
sentience potions, guardians, and Golems. This helps admins know through
logs who made/used what.
## Why It's Good For The Game
I was told that it's pretty hard to tell who made Golems because this
type of info isn't logged, so you can't check it post-round. This should
help admins with that.
## Changelog
🆑
admin: Enslaving mobs is now logged in game.log
/🆑
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>
## About The Pull Request
---
The Space Tram is currently spaced. This is a known issue with not the
map, but Trams in general. The Space Tram is a Space Tram to encourage a
fix. Until then, the Space Tram is a maint tram that's an actual hazard
but cannot directly kill anyone, including lizards. Enjoy the commodity
as you zip from secmaint to medmaint.
-------------------------------------------------------
I... really don't know if I should be proud of myself here. This whole
process has been akin to a fever dream and it has only been little over
a month since I first created the .dmm for this. What started as a
simple yet humble reimagining of Birdboat has turned into an entirely
new station, and blown past Metastation sized proportions. This has been
my most expansive project yet, and somehow it's also been my quickest.
So without further ado, I unveil Birdshot - Successor to Birdoat.
-------------------------------------------------------
**Due to recent cost expenditures on Icemoon projects, and a growing
need for orbital research stations, Nanotrasen has decided to pull
Birdboat Station out of mothball after nearly 5 years of abandonment.**
Since then, the station has seen a variety of changes at the hands of
the various vagabond lawless scum and villains that have decided to make
the abandoned station their home. Do not fret though, a Nanotrasen
Operation has secured the companies rightful property for corporate use
once again, though you'll need to be the stewards of the remaining
cleanup operation.
------------------------------------------------------
Now, as you might have guessed by now, Birdshot is heavily based on
Birdboat station. Many of the decisions here follow the original layout,
and what had to be modified or moved still tries its best to replicate
and imitate what bird being said. At least, that was the idea initially.
This has very much grown into its own beast and as such, while the main
inspiration has been Birdboat, there are a lot of new ideas thrown into
the mix that really give this station its own unique and deserving
identity. Maybe it's not perfect, but I've been inspired by @MMMiracles
own performance with Tramstation to keep working on Birdshot and
updating it with better and improved faculties. For now, though the
station is in a playable state, and that means I'm making a PR. If I had
to borrow the words of the good MMM, I would call this **Birdshot:
Season 0**

See the image in more detail here: https://imgur.com/iT5Vi8k
## Why It's Good For The Game
We've been with the same 5 maps for a while now. @san7890 jokingly said
that I could sacrifice Metastation back in November if I remade Birdboat
but modern. Obviously that wasn't going to happen, yet I was spurred on
by the idea. When I began this in earnest early this January, @EOBGames
said that a Birdboat sized map would replace Kilostation in the
rotation. Interestingly we're not a small map anymore so I honestly have
no clue where this goes. Maybe that ephemeral 6th map slot that's been
rumored.
What I can say, is that Birdshot is wholly unlike anything else that is
currently in rotation. It's got an engineering section that feels way
too small for a station of that size, almost evocative of Cere. Cargo is
blessed with a Boutique that makes use of @Fikou's new mannequin dolls.
Command is outfitted with a Corporate Guest Suite, and Officials sent
from Nanotrasen can embark from their ferry into the safety of their own
Corporate Dock. Elements of Cerestation are present, yet not in a way
that makes traversal annoying. Furthermore we have **2 Trams** (that I
have yet to get functional but we'll get there) on Birdshot, that's
right 2. One Security Prison Tram, and then other, a Space Tram. Both
Novel in their own ways. Departments on Birdshot twist and turn, and
there's an abundance of Maintenance Tunnels to cut through everything,
for the brave and the bold that is. And there's plenty left to discover,
but I'd rather let Birdshot speak for itself. I'm proud of this one.
If you want something new, this is something that is almost the complete
opposite of Chilled Station - Explicitly Designed to send you back to
the metal death trap that is: **Space Station 13.**
## Changelog
🆑
add: Birdshot station has been pulled out of Mothball.
add: New station areas and places to visit. A Mix of Kilo and Delta
maints with winding shortcutting paths.
add: A host of new shuttles to support this bold endeavor to reclaim
something that really shouldn't be reclaimed.
add: Two Trams, Two Trams.
add: For the last time Bob, the gaping hole is a **feature.** Use the
breach shutters or have the virologist make starlight.
add: A smiling salute to stations past...
add: Secrets.
/🆑
---------
Co-authored-by: Zytolg <theoriginaldash@gmail,com>
## About The Pull Request
A re-open of https://github.com/tgstation/tgstation/pull/66326 with
Fikou's permission
Adds the style meter, it can be bought from the mining vendor for 1500
points, it is an attachment to your glasses.
The style meter creates a display on your hud, with your recent actions,
like attacking enemies, killing them, mining ore etc. Actions like
spinning or flipping increase your score multiplier, making you get more
points.
Your style meter affects how much ore you get from mining rocks. By
default with the meter, you get 20% less ore, but at the highest, you
can get 1.2x the ore from mining. In addition, on B-tier or above, you
can "hotswap" items, by attacking an item in your backpack with one in
your hand (should it fit and all that). Also features a leaderboard for
highest style point count!
New streamable: https://streamable.com/eewi6l
The following are sources of points:
- Killing things
- Killing big things
- Killing small things
- Punching things
- Melee'ing things
- Mining rocks and ores
- Having matrix traps detonate
- Hit, defuse, and detonate gibtonite
- Detonate crusher marks
- Scan geysers
- Parry projectiles (others or your own)
Oh, right. While wearing the style meter, you're able to parry any
lavaland-based projectile by clicking on it or the tile it is on, which
reflects it back in a 7 degree arc, making it 20% faster and 15% more
damaging. Usually not very easy.
Maybe-plan in the future for some syndicate variant of this (with bullet
parrying and appropriate style sources, etc.), but not for this PR
Thanks to Arcane, multitooling the style meter will make it play some
sounds on rank-up.

https://streamable.com/nheaky
Parrying in action
## Why It's Good For The Game
Makes miners bring more ore in a fun way.
## Changelog
🆑 Fikou, Zonespace, Arcane for voicing
add: The mining vendor now has a style meter. This meter gauges your
style points and uses them to improve your ore yield.
/🆑
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
## About The Pull Request
### Divine Archer 🏹

Adds a new chaplain weapon and suit of armor, the divine archer. It's an
orderable set of armor, but provides less armor than the rest, but you
get more pieces of armor (boots, bracer, undersuit).
The divine bow comes with a quiver that holds holy arrows. The holy
arrows come with bane support, dealing critical damage to revenants.
### Bow Features ⭐
- arrows can now be dipped in poison
### Bow Improvements 🔧
- bows now drop their arrow when you put them on your back while nocking
a bow
- bows give feedback for trying to draw without a nocked arrow
- codewise, bows support subtypes much better. They still have
hard-sprited loaded arrows, but one day that'll change.
## Why It's Good For The Game
Yeah, we could add null rod #2342 that does almost the same as the
others, or we could have a unique bow weapon!
Player Dev Project thread:
https://discord.com/channels/326822144233439242/1093521091957370940/1093521091957370940
## Changelog
🆑 tralezab code, Drag for the commission and player project, cre#0484
for their spritework
add: Divine Archer Armor and Weapon
qol: Bows give more feedback when you're doing something wrong, like
trying to draw without a nocked arrow
code: Sorted files, cleaned bow code up to allow subtypes
/🆑
## About The Pull Request
Are YOU annoyed about never finding the fucking mats you need? Slap some
cable coil on an analyzer and find that untouched sheet of iron and or
glass. It's a pinpointer for basic sheets.
## Why It's Good For The Game
Originally I meant to give this as something borgs might want, but I
realized they really won't have a great time using it and the situation
is more about botanists not being asked, and not knowing how to grow
lots of iron, repeat for all other departments. Awareness problems!!!
But I still like the item as a miscellaneous craftable.
## Changelog
🆑
add: Craftable Material sniffers
/🆑
---------
Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com>
## About The Pull Request
- Makes captain outfit more runtime resilient
- The initial reason for this PR was that the captain's outfit was not
very resistant to the case that something else changes the outfit's left
hand before `post_equip`. It would runtime due to assuming the left hand
is always the unique banner, and also cause no banner to be spawned.
- Adds a macro for accessing the map config job changes, to reduce
boilerplate.
- While I was fixing the above bug, I noticed that we had pretty bad
boilerplate copy pasted around for accessing job config changes. This
code is not ran so often that the job config needed to be cached
locally, nor was all this safety very necessary. So I added a wrapper to
handle it for the end user.
## Why It's Good For The Game
More runtime resistance is always nice, allows for future coders (or me)
to tread the area without worry.
## Changelog
🆑 Melbert
fix: Fixes rare occasions in which the captain can fail to spawn with
their banner on certain maps if their left hand was holding something
else.
/🆑
## About The Pull Request
Now the stargazer does more damage to people in the area and prioritizes
mobs attacking them instead of random circuit bots 7 tiles away. It will
also slowly heal you. Makes some abilities create more carpet fields
when ascending. Increases combo times when ascending. Also makes the
Star Gazer die only when the owner dies. Star Gazer will explode when it
does die. Star Gazer has a damage aura that does heal the owner.
## Why It's Good For The Game
I have seen a lot of people complaining that the cosmic ascension isn't
good and not worth getting so I thought I would make it a little better.
## Changelog
🆑
balance: Star Gazer now explodes when it dies.
balance: Star Gazer will only die when the owner dies.
balance: Star Gazer will attack the most recent enemy that attacked him
when on autopilot.
balance: Star Gazer has an aura that slowly damages people and heals the
owner.
balance: Cosmic Ascension now buffs some spells.
/🆑