Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updates 24.10 - 14.11 #5213

Merged
merged 118 commits into from
Dec 7, 2024
Merged

Updates 24.10 - 14.11 #5213

merged 118 commits into from
Dec 7, 2024

Conversation

Iajret
Copy link
Collaborator

@Iajret Iajret commented Dec 6, 2024

ПРы апдейтов с ТГ с Новы, а именно и в таком порядке:
NovaSector/NovaSector#4611
NovaSector/NovaSector#4335
NovaSector/NovaSector#4620
NovaSector/NovaSector#4636
NovaSector/NovaSector#4649

История сохранена там, где это было возможно (только в третьем ПРе). Чейнджлоги должны быть включены.

FlufflesTheDog and others added 30 commits December 6, 2024 23:40
* some code organization for playsound(smth, pick('... (#87211)

* Automatic changelog for PR #87211 [ci skip]

* Adds retool kits, a series of cosmetics for the protokinetic crusher (#87252)

* Automatic changelog for PR #87252 [ci skip]

* Improves armrest code for chairs, fixes bronze chairs not spinning around (#87225)

Closes #87222
armrest code doesnt have to be copied thrice if it can be on chairs with
a var to control if its actually used

:cl:
fix: Bronze chairs will automatically spin once more
/:cl:

* Automatic changelog for PR #87225 [ci skip]

* Industrial scanning sound (#87189)

## About The Pull Request
For:
- gas analyzer
- scanner gate
- plant analyzer
- t-ray scanner
- slime scanner
- scanning mining geysers


https://github.com/user-attachments/assets/24fde731-e567-483b-b88e-6f7fcbacf52a
## Why It's Good For The Game
it sounds nice
## Changelog
:cl: grungussuss
sound: added new scanning sound
/:cl:

* Automatic changelog for PR #87189 [ci skip]

* [NO GBP] Plasmamen no longer self-immolate while in stasis (#87257)

## About The Pull Request

I forgor because spec_life is not called in stasis but life is

## Changelog
:cl:
fix: Plasmamen no longer self-immolate while in stasis
/:cl:

* Automatic changelog for PR #87257 [ci skip]

* Updates hallucination treatment tips (#87253)

* Automatic changelog for PR #87253 [ci skip]

* Places lavaland ambi attribution in the correct folder and corrects it [no gbp] (#87196)

## About The Pull Request
states that it's spliced and puts it in the correct folder
## Changelog
nothing player facing

* gives the portable gravity generator an open state (#87261)

## About The Pull Request


![image](https://github.com/user-attachments/assets/c2833aa6-ec43-47fb-ae19-fbff46374264)
(The portable gravity generator has an open/screwdrivered icon state now
instead of disappearing when screwdrivered.)
## Why It's Good For The Game
i think being able to see the machine i'm working on is a good thing
actually

## Changelog

:cl:
fix: Portable gravity generators no longer turn into a floating pair of
status lights when screwdrivered open.
/:cl:

Co-authored-by: Hatterhat <[email protected]>

* Automatic changelog for PR #87261 [ci skip]

* Lionhunter rifle can no longer be used to teleport to the debug room (#87268)

## About The Pull Request

Closes #87265

## Changelog
:cl:
fix: Lionhunter rifle can no longer be used to teleport to the debug
room
/:cl:

* Automatic changelog for PR #87268 [ci skip]

* Fixes electrified chair overlay layering (#87228)

## About The Pull Request

Closes #87221 by changing overlay layers when a mob is buckled to the
chair.

## Changelog
:cl:
fix: Fixed electrified chair overlay layering
/:cl:

* Automatic changelog for PR #87228 [ci skip]

* Add screentips to envirosuit helmets (#87285)

* Automatic changelog for PR #87285 [ci skip]

* Fixes a typo in examining a bleeding wound on a corpse (#87310)

* Automatic changelog for PR #87310 [ci skip]

* Fixes message upon examining an already dissected corpse using your pronouns instead of theirs (#87300)

## About The Pull Request

Someone told me that it was kinda weird how it used different pronouns
for the already dissected message, so I looked into it, and lo and
behold:

https://github.com/tgstation/tgstation/blob/10dffbf82b73b1e61dbcc4f4c2879e2f3edf9dfb/code/modules/mob/living/carbon/examine.dm#L271-L272
It used user pronouns rather than the corpse's pronouns.
Wild.

Anyhow, swapping it to like. Not Do That. Seems to fix this just fine.
## Why It's Good For The Game

Fixes jank.
## Changelog
:cl:
fix: Message upon examining an already dissected corpse now uses their
pronouns and not yours.
/:cl:

* Automatic changelog for PR #87300 [ci skip]

* Drops two droppers in Wawastation xenobio (#87295)

## About The Pull Request

Title; also shuffles the table they're on a bit so that it look a bit
better

## Why It's Good For The Game

Reported in a comment to #87096 but otherwise it's for consistency with
other maps. Only dropper available to RnD roundstart was somewhere in
their lobby, which is inconvenient to grab for the secluded caste of
xenobio mains. Why two? Uh, two grinders, two bits of plasma, two
consoles... it's zen, I tell you.

## Changelog
:cl:
map: Wawastation xenobio now has two droppers
/:cl:

* Automatic changelog for PR #87295 [ci skip]

* Fixes a large amount of bugs caused by ghost polling returning empty lists instead of null (#87291)

## About The Pull Request

Closes #86760

## Changelog
:cl:
fix: Ghost polling/events no longer runtime or freak out when nobody
signs up for them
/:cl:

* Automatic changelog for PR #87291 [ci skip]

* revs pass out upon deconversion again (#87282)

## About The Pull Request

Re-adds revs passing out for a few seconds upon deconversion.

## Why It's Good For The Game

When https://github.com/tgstation/tgstation/pull/76728 adjusted the
outcome of rev victory, it may have accidently made an undocumented
change wherein revs no longer pass out upon deconversion. I asked on
discord and was advised to submit this as a fix. With thanks to
mrmelbert for basically telling me how to fix this.

Fixes https://github.com/tgstation/tgstation/issues/81235

## Changelog

:cl:
fix: revs once again pass out upon deconversion
/:cl:

---------

Co-authored-by: jimmyl <[email protected]>

* Automatic changelog for PR #87282 [ci skip]

* Nullblades and proto-kinetic crushers use the check_behind() proc rather than get direction themselves. (#87287)

## About The Pull Request

What it says in the title.

## Why It's Good For The Game

This is functionally identical, but a little more robust about what
counts as 'behind'.

## Changelog
:cl:
code: Nullblades and proto-kinetic crushers use the new proc for
checking valid directions to backstab.
/:cl:

* Automatic changelog for PR #87287 [ci skip]

* Too far message is a failstate (#87302)

## About The Pull Request
When the message changes to `"They say something, but you are too far
away to hear them."`, it is now considered a fail-state and will return
FALSE on proc/Hear()

## Why It's Good For The Game
It's currently considered a success (original message is sent) if the
user is not blind/deaf. May cause troubles in the future (already does
on the downstream).

## Changelog
Currently, players shouldn't notice a difference.

* [i ded] Jean shorts are correct clothes for the death sandwich (#87280)

## About The Pull Request

If you know the underlying reference behind the death sandwich, you
would think the jean shorts from the clothesmate would allow you to eat
it right. This is not the case, because it checks for exactly one
specific type. This is inconsistent with the source material, as there
is more than one kind of clothing in this game that includes jean
shorts.

## Why It's Good For The Game

i ded why reference not work like it do in source

## Changelog

:cl:
qol: All forms of jean shorts now count for eating the death sandwich
right
/:cl:

* Automatic changelog for PR #87280 [ci skip]

* Removes tape recorder's examine line about a closed wire panel (#87283)

## About The Pull Request

Closes #87270
it doesn't even have wires why was this even a thing

## Changelog
:cl:
fix: Tape recorders no longer deceptively claim to have wires or a wire
panel in order to lure in unsuspecting assistants
/:cl:

* Automatic changelog for PR #87283 [ci skip]

* Optivorbis lossless compression for the sound folder (#87191)

## About The Pull Request
used:
 https://github.com/OptiVorbis/OptiVorbis
and a script provided by gpeckman to run it through the entire sound
folder:

https://discord.com/channels/326822144233439242/326831214667235328/1294688179919523862

### Comparison:
before: 

![image](https://github.com/user-attachments/assets/3a46496c-ab8d-4484-856b-161e6ab5c7b9)
after:

![image](https://github.com/user-attachments/assets/6d9a5883-4c02-4989-a638-2c85b1f7b7ec)
with a total reduction of 9%

## Why It's Good For The Game
takes up less space - downloads faster!
## Changelog
:cl: grungussuss and gpeckman
sound: the sound folder has been optimized to take up less space
/:cl:

* Automatic changelog for PR #87191 [ci skip]

* [NO GBP] Fixing a small, tiny issue with mob resizing on init (#87021)

## About The Pull Request
The way `current_size` works is that it's multiplied by whatever
argument it's used on `update_transform`, so if we have an initial
current_size of 0.9 for a mob, we end up multipling that by itself and
end up with the wrong value of 0.81 for a mob that's has been resized to
be 10% shorter and thinner.

## Why It's Good For The Game
Mistakes were made.

## Changelog
/:cl:
fix: Miss Tiggles is no longer spawned by gold sime cores.
:cl:

* Fundamentally Evil People/Undead are burned horribly by Mending Touch. Chaplains are not shaken by discovering EVAAAAL! Pacifist safe! Evil unsafe! Empaths beware! (#87187)

## About The Pull Request

At a baseline, Mending Touch now burns anyone who is undead or
fundamentally evil.

Pacifists can still heal evil people, but avoid touching the undead with
the healing hand.

Evil people psychically crush empaths, so long as they're not undead.
Evil people can heal other evil people and undead (includeling evil
chaps)

Undead can heal as normal, including other undead, but not evil people
(its not a mutual friendship)

Chaplains incinerate potential targets especially well using mending
touch. Chaplains and spiritualists even shout out their god's name as
they do so. (but only chaps get the extra damage)

Empathic Chaplains are not shaken by identifying evil people. **THEY
JUST SEE A NEW TARGET TO SMITE FOR THE CRUSADE.**

## Why It's Good For The Game

**Consistency:** Undead are negatively impacted by healing effects of a
similar nature. Rather than make a whole new mutation to heal undead,
instead, we apply some different rules to allow undead or evil people
the opportunity to apply and have applied different effects based on
their status.

**Evil people are already arbitrarily shafted by niche aspects of the
game for fun:** It'd be funny if a well meaning medical staff member
tries to use mending touch on an evil guy and they just burst into
flames instead. Why? They took the quirk to screw over empaths and
nothing else.

**Undead are immensely uncommon:** This isn't going to come up much
whatsoever given that undead are almost unseen outside of Halloween.
~~What do you mean that's a few weeks away?~~

**Dumb Bullshit:** Empaths and Evil people are diametrically opposed for
silly reasons. If Empaths still hurt undead, it stands to reason that
evil people heal them out of pure spite. The two sides hurt one another
with the mutation.

**Chaplains smiting people is funny:** Chaplains aren't the main users
for the mutation, its mostly for medical staff, but they damn will seek
it out a lot of the time to augment their existing healing powers. Since
this is a feature about moral self-righteousness, its now especially
funny for chaplains to be either one of the quirk holders primary enemy
if they're on the opposing side.

## Changelog
:cl:
add: Mending touch now has additional effects based on whether or not
the target or user is evil, an undead or an empath. Don't use mending
touch on evil people or undead, or they might go up in flames. Though
evil people can get back at empaths specifically and heal udnead as
normal.
add: Chaplains engulf people using mending touch's harmful reactions to
diametrically opposed entities especially well. Because of religious
zeal, of course.
add: Empath chaplains ignore the fear consequences of examining an evil
person. They instead get additional information about what to do to
these people if the need arises.
/:cl:

---------

Co-authored-by: carlarctg <[email protected]>

* Automatic changelog for PR #87187 [ci skip]

* Fixes birdshot emitters being disconnected from SMES (#87279)

## About The Pull Request

A single cable was missing, leading to emitters (and some rooms in
atmos) being disconnected from the main SMES.

## Why It's Good For The Game

Emitters should be able to be fired at roundstart.

## Changelog

:cl:
map: Birdshot's Emitter Room should no longer be disconnected from the
grid at shiftstart.
/:cl:

* Automatic changelog for PR #87279 [ci skip]

* Master-overlayed screen alerts (i.e aura healing) now use appearance cloning instead of directly overlaying the master (#87281)

## About The Pull Request

This reworks the `/mob/proc/throw_alert(new_master = ...)` to use
appearance cloning instead of just directly adding the master atom as an
overlay.

There's several advantages to this:
- We don't have to change anything about the original target at all
- Setting the plane/layer, adding the overlay, then resetting it to
before (as it does without this PR), feels like an awful hack ngl.
- We can ensure the target is always facing south, and has no pixel
x/y/z shift.

<details>
<summary><h3>Proof of testing / screenshots</h3></summary>

I had the healing rod holder standing on a table when the alert was
added, to ensure that the pixel_x/y/z reset worked.

![2024-10-17 (1729221218) ~
dreamseeker](https://github.com/user-attachments/assets/664abbef-d543-4d13-99ec-3264e05edfd8)
![2024-10-17 (1729221245) ~
dreamseeker](https://github.com/user-attachments/assets/6073dcd4-75e0-404a-bea1-6bea5fbd7591)

</details>

## Why It's Good For The Game

Ensures the aura healing alerts and such always look consistent - no
pixel offsets, always facing south, with more reliable code.

## Changelog
:cl:
refactor: Refactored how some screen alerts, such as aura healing, show
atom overlays.
/:cl:

* Automatic changelog for PR #87281 [ci skip]

* [NO GBP] Icebox Ruin Fixes (#87308)

Fixes active turfs on two of my icebox ruin maps by creating a
stonefloor icemoon subtype.

it fixes

:cl:

fix: fixed active turfs on two icemoon ruins.

/:cl:

* update our turfs

tg now provides an icemoon variant but not a lavaland variant anymore i
guess
also marcos

* Automatic changelog for PR #87308 [ci skip]

* green raptors no longer mine activated gibtonite (#87290)

## About The Pull Request
green raptors will now refuse to mine mineral walls containing active
gibtonite

## Why It's Good For The Game
this was leading to a significant number of unfortunate accidents and
frustrations from what ive seen, making them almost not worth using.

## Changelog
:cl:
balance: green raptors now refuse to mine mineral walls containing
active gibtonite
/:cl:

* Automatic changelog for PR #87290 [ci skip]

* PDA ringtones now show a balloon alert (#87278)

## About The Pull Request

This makes it so receiving a PDA message will give the holder a balloon
alert with their ringtone.

## Why It's Good For The Game

PDA messages are often ignored due to not being noticed, as many players
are more often focused on the main game screen (which runechat has
somewhat normalized) than the chat window. This makes things more
obvious that there's a PDA message.

## Changelog
:cl:
add: PDA ringtones now show a balloon alert to the PDA holder.
/:cl:

* Automatic changelog for PR #87278 [ci skip]

* Golem boulder breaking trait moved from species to limbs (#87271)

## About The Pull Request

Golem boulder breaking trait moved from species to limbs

## Why It's Good For The Game

SPECIES BAD

LIMBS GOOD

FUTUUURE

(this lets people with golem arms break down boulders which i think is
cooler)

## Changelog

:cl:
code: Golem boulder breaking trait moved from species to limbs
/:cl:

* Automatic changelog for PR #87271 [ci skip]

* capitalizes root beer (the reagent)'s name for consistency's sake (#87264)

## About The Pull Request
uh. title. capitalizes root beer's name in-code to be Root Beer, for
consistency with every other chemical


## Why It's Good For The Game
consistency in reagent naming schemes


## Changelog

:cl:
spellcheck: Chemical analysis now offers Root Beer the respect it
deserves (read: Root Beer is now capitalized like every other reagent).
/:cl:

Co-authored-by: Hatterhat <[email protected]>

* Automatic changelog for PR #87264 [ci skip]

* Added Policy & Binding to the Haunted Longsword (#86986)

## About The Pull Request

Closes #86864

Added a policy message and associated config i think to when a heretic
is soultrapped, allowing headmins to ~~ruin my feature~~ decide how
they're allowed to act.

Haunted longswords can be, and start, binded. Binded swords are weaker
than usual, being basically just talking cultist longswords. You can,
however, unbind them, which will heavily buff their stats, unlock their
powers, allow you use of a heretic's path spell, and let them attempt to
fling around and cast spells.

Reduced its throwing damage, turning it from a 3-hit-crit to a
4-hit-crit.

Binding and unbinding needs a bible, a ritual dagger, or an amber focus,
depending on what role you are.

Added type_english_list() which recieves a list of types and returns 'an
x, a y, and a z' strings.
## Why It's Good For The Game

> Added a policy message and associated config i think to when a heretic
is soultrapped, allowing headmins to ~~ruin my feature~~ decide how
they're allowed to act.

Policy messages are required for new antags and a good idea besides.
This slipped under the radar because of being bundled with a separate PR
and the muddiness of it being 'new', but it's here now.

> Haunted longswords can be, and start, binded. Binded swords are weaker
than usual, being basically just talking cultist longswords. You can,
however, unbind them, which will heavily buff their stats, unlock their
powers, allow you use of a heretic's path spell, and let them attempt to
fling around and cast spells.

There's been some problems caused by an unfortunate lack of visibility
on how the new sword is not necessarily your ally and may even
immediately attempt retaliation, for, you know, being killed and
sacrificed. To fix this, I've added a binding feature to it. The sword
starts bound, but is fairly underwhelming in this state. It's suggested
to talk to its wielders and tempt them into unbinding it, done by an UI
button, which will allow it to use its spells and possibly backstab
them, or help them in battle.

> Reduced its throwing damage, turning it from a 3-hit-crit to a
4-hit-crit.

The attacks were dealing too much damage, surprising hapless people
being hit by random flying swords, who didn't react until it was too
late.

This feature is still fucking awesome, and I spent some time wracking my
brain on how to fix the given issues, and came up with this system which
mantains and enhances the 'forbidden cursed sword' trope aspects of it
while also stopping it from being as much of a noob trap as it used to
be, Neutral antagonists that can help any side are cool and fun.

* Automatic changelog for PR #86986 [ci skip]

* Use `rust_g64.dll` / `librustg_64.so` on OpenDream (#87313)

## About The Pull Request

This makes it so running on OpenDream will always use `rust_g64.dll` /
`librustg_64.so`, instead of `rust_g.dll` / `librust_g.so`, for rust\_g.

## Why It's Good For The Game

Makes testing on OpenDream easier and less confusing, for the people who
wanna do that - as if you forget 64-bit rust-g, it'll clearly say you're
missing rust\_g***64***.dll, rather than somehow the included
rust_g\.dll being broken.

## Changelog

No player-facing changes - this is only relevant for testing OpenDream.

* TTS pitch now affects emote sounds (#87275)

Closes #87274
If TTS is enabled and supports vocal pitch, certain emotes will have a
far smaller frequency range but will become affected by your chosen TTS
pitch. Frequency equation is non-linear as pitch scales from -12 to 12

Makes vocal emotes a bit more immersive as now they'll fit your
character's tone.

:cl:
add: TTS pitch now affects emote sounds
/:cl:

* conflicts & modular stuff

* Automatic changelog for PR #87275 [ci skip]

* Fix condenser not simulating turf air (#87319)

* Automatic changelog for PR #87319 [ci skip]

* Fixes bolt of possession's previous owner's camera mob setup (#87288)

## About The Pull Request

Title; it's all handled by the camera mob's proc `add_friend()`, which
ticks off all the needed vars for the trauma and the camera mob to
function properly. It also enables logging of the sorry sucker hit by
the bolt becoming the "imaginary friend"! However it's logged as an
imaginary friend, not a magic bolt happenstance. Suggestions on how to
not snowflake that logging bit are welcome.

## Why It's Good For The Game

Fixes #65669

## Changelog

:cl:
fix: fixed bolt of possession incorrectly setting up the previous owner
of the victim's body, resulting in a fucked-up camera mob with no icon
or movement capability
/:cl:

* Automatic changelog for PR #87288 [ci skip]

* Gives jammers a secondary ability that allows to disable someone's radio mic (#87149)

## About The Pull Request

Radio jammers can now disable someone's radio mic, both in AOE (right
self-click on cooldown) and for on a specific target. For this to work
headsets had to be adjusted to require broadcasting to be active in
order to use their mic (it is now active by default and doesn't pick up
nearby speech automatically).

## Why It's Good For The Game

Jammers aren't very strong and this buff will allow for better stealth
gameplay, as you cannot tell that you've been jammed this way until its
too late as you still can hear others' speech. Requested by Mothblocks
on discord (thus no GBP label).

## Changelog
:cl:
add: Jammers can now disable players' radio microphones via a new
secondary ability, both for handhelds and headsets
/:cl:

* Automatic changelog for PR #87149 [ci skip]

* Fix a runtime with the different slime species getting a fish tail, cat ears, or a cat tail. (#87318)

* Speed potion improvements (#87322)

## About The Pull Request
I've added a trait for when a speed potion is applied to the object.
This allows me to remove some args and variables from riding and
ridable, and allow fish past 2000 units of weight to have speed potions
applied to them without the risk of the slowdown being reset the next
time `update_size_and_weight()` is called.

Speed potions now also affect drag slowdown.

## Why It's Good For The Game
Small code improvement, leading to a possible balance change.
This fixes #38623.

## Changelog


:cl:
balance: Speed potions now cancel drag slowdown too.
balance: Speed potions can be used on fish past 2000 units of weight.
fix: You can now speed up cardboard boxes with speed potions.
/:cl:

* Fixes a typo in ooze eating code (#87321)

## About The Pull Request
Closes #87314

![378125806-023117cf-0c4f-471d-b965-c4ac60eb9e07](https://github.com/user-attachments/assets/bc78e817-c3f7-45fa-bc84-2cdedb0e7b56)

## Changelog
:cl:
fix: Fixed a typo in ooze eating code
/:cl:

* Fixing a typo in the typepath for unconsumable doughballs (#87326)

## About The Pull Request
I've noticed this typographical error during a local test while spawning
synthetic doughballs.

## Why It's Good For The Game
Smal gremmar misteak.

## Changelog
N/A

* Grammar fixes for produce-based armaments (#87328)

## About The Pull Request

Bamboo Staff is lowcaps-ed, and also picks between one of various
mediocre puns to name itself on initialize

added 'armor' to the melon armors and removed a dirty british spelling
of the word in a description

lowcapsed watermelon helmets

## Why It's Good For The Game

normal items should not have caps names, it is both grammatically
incorrect, annoying, and inconsistent.

bo staves having may pun based names is funny*

## Changelog

:cl:
spellcheck: Grammar fixes for produce-based armaments
spellcheck: bo staves are very punny
/:cl:

* Automatic changelog for PR #87318 [ci skip]

* Automatic changelog for PR #87322 [ci skip]

* Automatic changelog for PR #87321 [ci skip]

* Automatic changelog for PR #87328 [ci skip]

* Adjusts the No ERP poster description to be more subtle and reference the lore. (#87153)

Co-authored-by: SmArtKar <[email protected]>

* Automatic changelog for PR #87153 [ci skip]

* Fixes usage of `\improper` on two donk pocket subtypes (#87348)

* Automatic changelog for PR #87348 [ci skip]

* Few spellchecks in fish organs and fish dishes I found (#87332)

* Automatic changelog for PR #87332 [ci skip]

* fixes broodmother harddeletes (#87324)

* Removes an unused hud and icons. (#87327)

Sentient diseases, thieves and space cops are no more. This PR cleans
bites of code and icons that belonged to them.

Leftovers and scraps to removed.

N/A

* Examining monster organs gives you a vague estimate of time until decay (#87266)

(alt. title: to hold a still-beating heart)
## About The Pull Request
You can examine monster organs to ~~check their vibes~~ get a really
rough estimate on how long you have to use them. The timer-related
message disappears when the timer is deleted, which occurs when the
organ is stabilized or when the organ decays.


![image](https://github.com/user-attachments/assets/76e9b53f-25c2-4822-b2a1-6b0504fd43ab)


## Why It's Good For The Game
sometimes you don't have a backpack full of stabilizer serums and you
need to know which cores to use and which ones to dump, i guess?

## Changelog

:cl:
qol: Nanotrasen employees have been given a quick primer on how
specialized fauna organs (brimdust sacs, rush glands, regenerative
cores) look in varying states of decay corresponding to lifespan (read:
you can now examine monster organs to get a vague idea of how long they
have left before decaying and becoming useless).
/:cl:

---------

Co-authored-by: Hatterhat <[email protected]>

* Automatic changelog for PR #87266 [ci skip]

* [NO GBP] Fix overlay lighting messing up alert overlays (#87362)

## About The Pull Request

Closes https://github.com/tgstation/tgstation/pull/87357

Adds a `IS_LIGHTING_UNDERLAY` define, and a `strip_light_underlays`
helper that uses it (thanks @Kapu1178 for the code)

### Before

![2024-10-21 (1729553782) ~
dreamseeker](https://github.com/user-attachments/assets/da2778f9-40e0-4760-85aa-a17a7d05f01c)

### After

![2024-10-21 (1729553540) ~
dreamseeker](https://github.com/user-attachments/assets/dd240c83-faf9-4e55-b913-58743aa764f0)

## Changelog
:cl: Absolucy, Kapu
fix: Fix overlay lighting (such as lanterns) messing up alert overlays,
i.e the rod of asclepius alert.
/:cl:

* Automatic changelog for PR #87362 [ci skip]

* fixes ore vents being tapped despite their drones dying (#87359)

## About The Pull Request
the vent defense minigames had a 100% win rate because of a small
mistake in the order of args passed to the proc

## Why It's Good For The Game
closes #87284

## Changelog
:cl:
fix: fixes ore vents being tapped despite their drones dying
/:cl:

* Automatic changelog for PR #87359 [ci skip]

* Removes big manipulator's use mode (#87391)

## About The Pull Request

Removes big manipulator's use mode due to how incredibly janky and
unstable it is in the background. We should not be spawning a human
every time an item is used.

## Why It's Good For The Game

This can cause extreme amounts of lag and almost crashed manny recently.

## Changelog
:cl:
del: Removed big manipulator's use mode
/:cl:

* Automatic changelog for PR #87391 [ci skip]

* [No GBP] Minor fixes to Haunted Trading Post, Garbage Truck & Lizard Gas (Lavaland) ruins, and MI13 Food Truck (#87026)

Haunted Trading Post
-
- Shock traps no longer trigger when Syndicate mobs move nearby. This
stops patrolling bots wasting the traps' charges.
- Employee lounge has had its items rearranged, to prevent the 1-in-8
chance of the shock trap in the room emitting sparks in just the right
direction to ignite the fuel tanks.
- Dedbots now become sparks and robotic debris when destroyed.
- Space outside the map has been replaced with turf passthrough. By
default this doesn't change anything, but this stops the map template
bringing space tiles with it if it's force loaded on planetary maps.

Garbage Trucks
-
-Space outside the map has been replaced with turf passthrough.

Lizard Gas (Lavaland)
-
- Asphalt turfs in the unroofed parts of the ruins now use planetary
atmos. Atmospheric mishaps (ie plasmafloods and fires from broken or
sabotaged equipment) will spread in a more intuitive pattern (ie they
will bunch up and bubble under the roof, instead of sticking to the
road)

MI13 Food Truck
-
- Removed a decal in a wall.
- Minor tweak to thruster sprites.
## Why It's Good For The Game
These are maintenance fixes on maps I've made. 
## Changelog
:cl:
balance: [Haunted Trading Post] Explosive trap in Employee's Lounge is
now less sensitive.
balance: [Haunted Trading Post] Shock traps will no longer be triggered
by Syndicate mobs.
fix: Dedbots now properly spawn post-death visual effects.
fix: [Lizard's Gas (Lavaland)] Atmos outside the gas station has been
tweaked, for realism.
fix: [MI13 Food Truck] Minor visual fixes.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87026 [ci skip]

* Finishes the reviews from #87187 that got missed before merge (#87363)

## About The Pull Request

As it says on the tin. This is just cleaning up some of the code from
reviews that got missed due to an early merge.

## Why It's Good For The Game

Oops. 

No real player facing changes since I doubt anyone has noticed anything
yet. They might during Halloween though so hopefully this is merged
before then.

* Fixes benches attempting to add a nonexisting armrest overlay (#87368)

## About The Pull Request

Benches produced an error overlay when you buckled to them, due to them
inheriting `has_armrest = TRUE` from sofas. This PR fixes that.

## Why It's Good For The Game

Closes #87364

~~There is also #87338 but that is a duplicate.~~  Closed.

## Changelog

:cl:
fix: Benches no longer produce an Error overlay when buckled
/:cl:

* Blob zombies inherit the faction of the blob spore when created (#87369)

## About The Pull Request

...which means that any blob spore with a different faction (i.e. gold
core spawned with a blood reaction have `FACTION_NEUTRAL`) will assign
the blob zombie its faction.

## Why It's Good For The Game

Fixes #66728

## Changelog

:cl:
fix: blob zombies inherit the blob spore's faction now, which means gold
extract-spawned passive blob spores won't make aggressive blob zombies
/:cl:

* Automatic changelog for PR #87368 [ci skip]

* Removes an empty frame from the in-aquarium monkfish icon (#87370)

## About The Pull Request

I have noticed monkfish's in aquarium icon had an extra empty frame,
making it blink rapidly. This PR fixes that.

## Why It's Good For The Game

Fix should not strobe.

## Changelog

:cl:
fix:  Monkfish no longer flash rapidly, while inside an aquarium
/:cl:

* Automatic changelog for PR #87369 [ci skip]

* Automatic changelog for PR #87370 [ci skip]

* Removes the unused GLOB.alcohol_containers (#87371)

## About The Pull Request

This PR removes the unused GLOB.alcohol_containers. It used to be used
by the alcoholic quirk, before it was changed to use a much more
sensible dictionary. The PR also updates the warning given when the
selected alcoholic container is null, to make it refer to the new
dictionary.

## Why It's Good For The Game

Its initialization code was unused, and also, spawned every single
alcoholic container in nullspace. This was done so originally because
`initial()` could not retrieve lists. With the new dictionary, this is
not needed anymore.

## Changelog

Nothing player facing

* Fixes invisible potted plants (#87373)

## About The Pull Request

#87207 changed potted plants list setup but forgot to change init code
to accommodate for it.
Closes #87366

## Changelog
:cl:
fix: Fixed invisible potted plants
/:cl:

* Automatic changelog for PR #87373 [ci skip]

* Fixes flamethrower exception when attacking with no tank (#87372)

## About The Pull Request

Resolves an issue where using a flamethrower without an attached tank
would cause an exception.
## Why It's Good For The Game

Fixes exception.
## Changelog
:cl:
fix: fixed an exception with firing a flamethrower without a tank
/:cl:

* Automatic changelog for PR #87372 [ci skip]

* Big manipulators can no longer pick up anchored, abstract or nodrop/dropdel objects (#87352)

## About The Pull Request

Being able to steal cyborg's weapons or someone's slapper hand is bad
No fun allowed on /tg/
Closes #87353

## Changelog
:cl:
fix: Big manipulators can no longer pick up anchored, abstract or
nodrop/dropdel objects
/:cl:

* Automatic changelog for PR #87352 [ci skip]

* Fixes embedded items not reacting to explosions (#87351)

## About The Pull Request
Closes #63414

## Changelog
:cl:
fix: Fixed embedded items not reacting to explosions
/:cl:

* Automatic changelog for PR #87351 [ci skip]

* fixes paraplegics appearing horizontal when riding animals (#87358)

## About The Pull Request
paraplegics were becoming horizontal upon riding some animals like
wolves, goldgrubs or raptors.

## Why It's Good For The Game
closes #83342

## Changelog
:cl:
fix: fixes paraplegics appearing horizontal when riding animals
/:cl:

* Automatic changelog for PR #87358 [ci skip]

* Ensure the master and failsafe controllers never have a `usr` (#87365)

## About The Pull Request

Let's just uh- yeah, controllers should not have a `usr`, at least right
now, and it can cause problems if it does - and running Recreate_MC via
the admin verb will result in the restarted controller having a `usr`,
which can cause weird problems. So, we set `usr` to null in first thing
both `/datum/controller/master/New()` and
`/datum/controller/failsafe/New()`

[MSO's cursed idea of using `usr` to track
subsystems](https://discord.com/channels/484170914754330625/484170915253321734/1298172060685828137)
will come later, maybe.

## Changelog
:cl:
fix: Fixed a potential rare source of strange behavior resulting from an
admin manually restarting the MC.
/:cl:

* Automatic changelog for PR #87365 [ci skip]

* Material tiles now have inhand sprites (#87347)

## About The Pull Request
Fixes material tiles having no sprites
closes #87346

![dreamseeker_cWKNeQ1vM9](https://github.com/user-attachments/assets/a45e7741-3254-4694-b507-221f10c4f0d9)
## Why It's Good For The Game
It makes the game look bad to have error sprites and messages going
around, also color coating is cool.
## Changelog
:cl: Hoolny
fix: fixes material tiles having no inhand sprites
/:cl:

* Automatic changelog for PR #87347 [ci skip]

* Fish Tail Filleting (and assorted fish organ tastes) (and allowing organs to define their own foodtypes and tastes) (#87334)

## About The Pull Request

I looked at the code for too long and now I want it to let me fillet the
things.

Anyhow, in this pr we simply allow organs to define their own food types
and tastes, and use this to make the fish infusion organs count as
seafood and have their own tastes.
Additionally, we give fish tails more food reagents, and allow them to
be filletable into their own quality fish fillets. These are quality
ingredients due to the... rarity of the... fish... they came from.

While it isn't a _hard_ requirement, this requires #87329 to operate at
its full potential. As it is, some of the tastes get blocked out by the
jank that fixes.
## Why It's Good For The Game

It's funny.
It's basically like, just a really large fish right?
Fish organs being seafood makes more sense.
Special tastes for organs is fun.
I just wanna fillet the fish tail and serve fish tail sashimi.
## Changelog
:cl:
add: Organs can now define their own tastes or food types.
add: Fish tails can now be filleted into quality ingredient fish tail
fish fillets, and have a fitting amount of food reagents on the whole.
balance: Fish organs are now counted as seafood, and have specific
tastes set.
/:cl:

* Automatic changelog for PR #87334 [ci skip]

* Silicons can now use dropped PDAs (but still cannot access Messenger) (#87343)

## About The Pull Request
- Removes the restriction from borgs and AIs opening PDA interfaces.
- Adds a restriction on Messenger if the PDA is being viewed by an AI or
Cyborg *and* the PDA is not a silicon-type PDA. Messenger is completely
unusable in this case.
- The AI's own PDA is unaffected, due to it being a silicon-type PDA.
Downstreams that give Borg PDAs the Messenger app should likewise be
unaffected. Though mainly unrelated to the PR, pAIs were also tested and
have not been affected.
## Why It's Good For The Game
Back before tablets and PDAs were squished together, silicons could
access tablets freely. TGUI PDAs were restricted from Silicons mainly to
keep parity with the old PDAs, of which Messenger is the major feature
that was ported over. Thus, I'm blocking Messenger specifically while
allowing the rest of a PDA's features to be unblocked.

As an aside, the old fluff text `It doesn't feel right to snoop around
like that...` was kinda terrible, since there are many times you do, in
fact, want to snoop. The AI trying to track down a known killer's
accomplice would want to snoop. The Malf AI that's trying to trick the
Captain would want to snoop. The prior owner of the PDA before they were
borged wouldn't even feel like it's snooping. So now it's a connection
refused thing, not an AI's feelings thing.
## Changelog
:cl:
balance: Borgs and AIs can now access dropped PDAs. The Messenger app
does not work over a remote connection, however.
/:cl:
Messenger interface when accessed remotely, by the by;

![image](https://github.com/user-attachments/assets/2df8ab39-97be-4472-bb18-528d79028c7b)

* Automatic changelog for PR #87343 [ci skip]

* Removes an unused proc `PermaSleeping()` (#87378)

* Refactors hat stabilizers into a component shared with plasmamen helmets (#87305)

Hat stabilization is now a component shared between MODsuits and
plasmaman helmets, only change this results in is attached helmets
applying their visor flags to plasmaman helmets (like it was with
MODsuits), but that should not have any impact envirohelms already cover
your face

Less copypasted code and maybe some day we can get hat stands.

:cl:
refactor: Refactored hat stabilizers into a component shared with
plasmaman helmets
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* conflicts

* Automatic changelog for PR #87305 [ci skip]

* [NO GBP] Fixes lattices causing spacemove jank (#87320)

## About The Pull Request
Lattices blocking space movement was handled on /atom/movable while my
comsigs were on /mob, thus making lattices overrule all force code. Mobs
now properly handle them via pushoff code.

## Why Is This Good For The Game
Lattices are very jarring to move along rn, this was not intentional.

## Changelog
:cl:
fix: Moving along lattices in space with a jetpack on no longer causes
your screen to jerk
/:cl:

* Automatic changelog for PR #87320 [ci skip]

* Add a separate preference for hearing AI VOX announcements (#87097)

## About The Pull Request

This adds a new preference, "Enable AI VOX announcements", which allows
you to toggle hearing the vocal AI VOX announcements.

Previously this was handled by the "Enable announcement sounds" setting,
but tbh having it lumped in with that sucks because it's very reasonable
to be okay with announcement dings, while not wanting to hear voxtest or
some shit.

## Why It's Good For The Game

I DO want to hear the normal announcement dings, but I ***never*** want
to hear the vocal AI announcements, and spamming "Stop Sounds" for every
single word to skip past it is annoying as hell.

## Changelog
:cl:
add: Added a separate preference for hearing vocal AI announcements
(also known as VOX), as opposed to lumping it into the "Enable
announcement sounds" preference.
/:cl:

* Automatic changelog for PR #87097 [ci skip]

* reduces volume of some sounds (#87410)

## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/87383
reduced volume of:
- lightningbolt.ogg
- lightningshock.ogg
- lightning_chargeup.ogg

### Old:


https://github.com/user-attachments/assets/8377ba03-461b-4d4c-8796-6eebe16a0a5c


https://github.com/user-attachments/assets/2e4b5ed2-ad04-4514-874d-51d0e47e26ca


https://github.com/user-attachments/assets/f6b59119-2a1f-4abd-b839-67248e86ec93

### New:


https://github.com/user-attachments/assets/7cdb9fcd-880b-49e8-b107-1afb642c5fb3


https://github.com/user-attachments/assets/ef056f98-63b1-478e-9e28-a1881eccb138


https://github.com/user-attachments/assets/d073fdf9-e887-46d7-b6cd-638251f8a053
## Why It's Good For The Game
it's way too loud 
## Changelog
:cl: grungussuss
sound: reduced volume of: lightningbolt, lightningshock,
lightning_chargeup sounds
/:cl:

* Rustle component no longer counts diagonal steps as two moves (#87400)

## About The Pull Request

Closes #87379
Also cleaned up the code and made the wearer be the source of the sound
for sanity purposes

## Changelog
:cl:
fix: Rustle component no longer counts diagonal steps as two moves
/:cl:

* Automatic changelog for PR #87410 [ci skip]

* Automatic changelog for PR #87400 [ci skip]

* teleporter turrets are no longer magical (#87397)

## About The Pull Request
they are bluespace and the description says so so they no longer are
stopped by antimagic

## Why It's Good For The Game
figure the real puzzle solution out noob

## Changelog
:cl:
fix: teleport turrets are no longer magical and will not be stopped by
antimagic
/:cl:

* ghosts don't get ambience cut off when changing areas (#87407)

## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/85568
## Changelog
:cl: grungussuss
sound: ambience no longer gets cut off for ghosts
/:cl:

* Automatic changelog for PR #87397 [ci skip]

* Automatic changelog for PR #87407 [ci skip]

* bouncy castles are on obj layer (#87398)

## About The Pull Request
title

## Why It's Good For The Game
they layer under gibs and it looks bad. i dont know why all structures
are on lower obj layer thats kind of strange.

## Changelog
:cl:
fix: bouncy castles no longer render under the gibs they spawn
/:cl:

* Silver extract food now transfers its slime trait to any processed slices (#87394)

…ices
## About The Pull Request

Closes #87123

When slicing food, it now checks if it has the yucky silver trait, and
if so it adds the trait to the slices
## Why It's Good For The Game

Bug

thjere really should be a consistency tag btw. for stuff that isnt a fix
but comes close, like adding moodlets to simple activities
## Changelog
:cl:
fix: Silver extract food now transfers its slime trait to any processed
slices
/:cl:

* Automatic changelog for PR #87398 [ci skip]

* [No GBP] Deluxe Vegan Donk Pockets now stay vegan when cooked (#87389)

## About The Pull Request
There was a missing line so cooking the vegan option defaulted to giving
you the meat-filled version instead.
## Why It's Good For The Game
bugfix
## Changelog
:cl:
fix: Donk-Rolls no longer turn into Deluxe Donk Pockets when microwaved.
/:cl:

* Radio noise will no longer play in hard crit (#87409)

## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/87377
## Changelog
:cl: grungussuss
sound: radio noise will no longer be heard in hard crit
/:cl:

* AI planning random speech doesn't ignore walls when making sound (#87408)

## About The Pull Request
closes https://github.com/tgstation/tgstation/issues/87384
## Changelog
:cl: grungussuss
sound: AI controlled mobs will no longer make sounds that ignore walls
/:cl:

* Outfits that put items in your hand now respect if the outfit is visual only (#87355)

On a downstream, we have an antagonist, that is a less competent
wizards. This antagonist's preview outfit has a beer bottle in their
hand, which has caused runtimes, as the bottle did not have any reagents
instantiated, and it tried check its length for sloshing. After putting
in a check for the `initial` argument of `on_equip`, I have noticed that
the problem goes deeper: the various procs that handle putting something
in your hand do not pass along if the items is put in your hand as a
preview or not. This PR adds a new optional var to these procs, ensuring
that unwanted behaviour during previews won't trigger.

I also swapped `visualsOnly` to snake case, as it looked inconsistent
with the rest of the code style.

Making the argument that ensures avoiding side effects during previews
work with all kinds of items is good.

:cl:
fix: if an outfit puts a reagent container in the preview dummy's hand,
it will not try to slosh
code: outfits putting items in your hand will respect the visual_only
argument
/:cl:

* Automatic changelog for PR #87394 [ci skip]

* Automatic changelog for PR #87389 [ci skip]

* Automatic changelog for PR #87409 [ci skip]

* Automatic changelog for PR #87408 [ci skip]

* Automatic changelog for PR #87355 [ci skip]

* Replace `/proc/trim_reduced` with the native BYOND `trimtext` (#87317)

## About The Pull Request

BYOND added a native `trimtext` proc in 515, which as far as I know,
does the same thing as the `trim_reduced` proc - trims whitespace off
both ends of a string, but `trimtext` should be faster, as it's a
builtin rather than implemented in DM.

Also, added a global `_trimtext` proc, for use from SDQL2 or Lua, as
it's a builtin and can't be `call()`'d.

## Why It's Good For The Game

Micro-optimizations my beloved - especially since I imagine this proc is
called quite a lot, even if it doesn't really have a performance impact
anyways, but it can't hurt.

## Changelog
:cl:
refactor: Refactored some text helper procs to use BYOND's native text
trimming proc.
admin: Added a _trimtext proc, for use with SDQL2 or Lua scripting.
/:cl:

* Automatic changelog for PR #87317 [ci skip]

* Changes w_class tooltips to explain where an item can be stored (#87399)

## About The Pull Request

Tiny to small items can fit into pockets, boxes and backpacks, normal
items only fit in backpacks and anything above does not fit anywhere.
Thanks to Fikou for pointing this out.

![image](https://github.com/user-attachments/assets/746afbdd-043a-4bdd-a268-0e6cfbaba60b)

## Why It's Good For The Game


![image](https://github.com/user-attachments/assets/495bc909-7b47-4057-958f-d5d92a1592f6)
This tooltip is kinda useless if you think about it a bit

## Changelog
:cl:
qol: Improved descriptions on size tooltips to explain where the item
can be stored
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Automatic changelog for PR #87399 [ci skip]

* Changes wall leaning into a component, makes windows leanable #2 (#87390)

Recovery of #85771, minus directional window leaning (because it looks
goofy)

:cl:
add: You can now lean on windows the same way you can lean on walls
fix: You no longer stop leaning on walls after clicking on anything
/:cl:

* Automatic changelog for PR #87390 [ci skip]

* Using SiliConnect to send a message to a cyborg now includes the sender's job (#87341)

## About The Pull Request
Does as title says. Doesn't take effect if the ID has no job listed.
## Why It's Good For The Game
Gives a bit more context about who is sending a message.
## Changelog
:cl:
add: Borgs now get the job title of someone sending them a message
through SiliConnect.
/:cl:

* Automatic changelog for PR #87341 [ci skip]

* Akimbo firing automatic guns no longer forces the offhand gun to fire even if dry on ammo (#87415)

## About The Pull Request

...preventing runtimes and playing dry click sounds correctly i think?
was that part of the issue caused by the runtime? iunno

## Why It's Good For The Game

Fixes https://github.com/tgstation/tgstation/issues/68161

## Changelog

:cl:
fix: fixed akimbo firing automatic guns runtiming on the offhand gun
when it's empty, possibly causing dry fire clicks to not play
/:cl:

* Automatic changelog for PR #87415 [ci skip]

* Adds a spraycan to robotics (#87412)

## About The Pull Request

This PR adds a single spraycan to every roboticist office, and a
screentip that should tell the player that they can restyle augments
with it, should they hover over one. This spraycan has a new sprite,
which is a small edit of the existing spray can, just wearing the
colours of the roboticist jumpsuit. The can's description also mentions
restyling robotic limbs.


![image](https://github.com/user-attachments/assets/e851a4a8-e916-41c6-850e-1d4814068d23)

This PR also fixes a bug: Peg limbs also brought up the restyling menu,
albeit, every radial button was empty, and clicking on one runtimes. Now
you can no longer do such a thing.

Future improvement: perhaps making augment restyling cheaper would be
nice, but I did not want to add that into this PR.

## Why It's Good For The Game

This is a rarely used feature, some folks thought it has been removed
when the augment painter has been removed from the game. Putting it in
front of the players will make it used more often, and might result in
new augment styles.

## Changelog

:cl:
add: Adds a roboticist spraycan, and adds one of them to robotics on
every map
qol: adds a screentip to spraycans that tells you that it can restyle
robotic limbs
fix: fixes peg legs bringing up the augment restyle menu
/:cl:

* Automatic changelog for PR #87412 [ci skip]

* Nanite projectiles respect immunity to the temperature type that the bullet looks for when doing its special effect trigger (#87303)

## About The Pull Request

Inferno nanite bullets respect TRAIT_RESISTCOLD before blowing up the
target.

Cryo nanite bullets respect TRAIT_RESISTHEAT before imploding the
target.

## Why It's Good For The Game

All those years ago when I added this feature, I completely neglected
the fact that despite a mob being immune to the effects of temperature,
their temperature can still be adjusted, and therefore, these bullets
could still proc their effects against those targets.

As an example, If a human is immune to cold and spends all their time in
the cold, they will have absolutely no idea that this could still take
effect on them, as none of the hud elements would even warn them about
this fact.

I do consider this a fix since I just completely didn't intend for it to
work that way. Sorry.

## Changelog
:cl:
fix: Nanite projectiles respect a targets immunity to any temperature
effects that the bullet might look for (cold immune targets against
inferno bullets/heat immune targets against cold bullets)
/:cl:

* Automatic changelog for PR #87303 [ci skip]

* penguins can now fish (and fishing ai expansions) (#87267)

## About The Pull Request
penguins are now able to fish! they will drill water holes in ice using
their beaks and catch fish from there. also expands the fishing ai a bit
to make it a bit more customizable. animals will now fish only when
they're hungry, otherwise there will be a cooldown between every fishing
attempt, defaulted to 45 seconds but can be edited depending on the mob.

## Why It's Good For The Game
makes the fishing behavior alot more generic, before it was only
compatible with lobstrosities but this makes it so it can be applied to
any mob. also reduces lobstrosity fishing frequency by a tad bit as they
were too spammy before.

## Changelog
:cl:
add: penguins will now fish from water holes
/:cl:

* Automatic changelog for PR #87267 [ci skip]

* Removes MOD chestplate and glove equip/drop sounds (#87403)

## About The Pull Request

Closes #87401

## Changelog
:cl:
sound: Removed MOD chestplate and glove equip/drop sounds
/:cl:

* Automatic changelog for PR #87403 [ci skip]

* fixes ai controllers resetting their targets post do_afters (#87426)

## About The Pull Request
mobs would disregard you for a bit if they went through a do_after, such
as goldgrub digging or medbots healing. this fixes that

## Why It's Good For The Game
fixes ai controllers resetting their targets post do_afters

## Changelog
:cl:
fix: fixes ai controllers resetting their targets post do_afters
/:cl:

* getting cocooned gives a better warning (#87420)

## About The Pull Request
just changes it from a small text to a bigger text so it's more
noticeable
## Why It's Good For The Game
you can get cocooned and not even notice it's happening to you
## Changelog
:cl: grungussuss
qol: getting cocooned gives a better warning
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Makes scanner gate scanlines mouse transparent (#87421)

Closes #87418
Also fixes an issue where scanlines are A) not present until someone
walks through them B) don't disappear when the gate is unpowered

:cl:
qol: Made scanner gate scanlines mouse transparent
fix: Scanner gate scanlines no longer appear only after someone walks
through them and are disabled when the gate is unpowered
/:cl:

* Adds launch option for OpenDream VSCode extension (#87393)

## About The Pull Request

Adds a vscode launch option to support the new (well, it's a few months
old now) OpenDream extension.

* suit storage units can now hold backpacks in their mod storage (#87406)

## About The Pull Request
what the title says
also changes their description to mention how they charge items inside
them, which is a cool thing that is completely unmentioned anywhere

## Why It's Good For The Game
previously if you wanted to put your suit, backpack and hat in a safe
place after putting on a modsuit you had to shove the backpack in the
auxiliary slot, so if you had a suit storage item that wouldnt fit in
the unit anymore, now with backpacks fitting the mod slot you can shove
them away there and retrieve when youre done using the modsuit

## Changelog
:cl:
qol: suit storage units can hold backpacks in the modsuit slot
/:cl:

* Evidence bag is a storage now; Detective's scanner now can scan items on their own person (#87331)

## About The Pull Request
Makes Evidence Bag a container - it was already container-ish but never
updated with storage code. Now you can open the container and do
something with the item inside, like scanning it!

Detective's scanner now can scan items that you hold or store - be it in
your backpack or an evidence bag in your another hand!

I was considering just making it drop the item on attack_self() and do
some code to make scanning the evidence bag also scan the item inside,
but I think making it a container is a better way.

## Why It's Good For The Game
Evidence Bag had you to have no free hands to drop an item to the
ground, if you didn't want to add your fibers/prints. That was
cumbersome.

Scanning items inside of evidence bag is cool.

## Changelog
:cl:
add: Evidence Bag is now considered a storage container with 1 slot.
Allows to use all features storage has, such as drag-and-drop the bag
onto a table.
add: Using Evidence Bag in hand now drops the item on the ground instead
of putting it in your hands. Don't mess with the evidence!
qol: Detective's scanner can now scan items on your person. You can now
pick up an evidence bag, open it like any other container, and scan the
item inside without removing it
/:cl:

* Fixes metastation cargo security outpost (#87259)

## About The Pull Request

Removes some random stuff that was placed on the floor of the outpost
for no apparent reason, adds access requirements to the security outpost
so assistants can't just come in and drag away the security locker, and
adds flooring to a plating that was missing it under a door.

## Why It's Good For The Game

Assistants having access to a security outpost to steal a security
locker for free isn't good, me thinks.
Fixes https://github.com/tgstation/tgstation/issues/87312
## Changelog

:cl:
fix: MetaStation's Cargo Security Outpost is no longer free to access by
anyone.
/:cl:

* Refactor for drone holder loving component (#87239)

## About The Pull Request
Refactors `/datum/component/holderloving` as a whole. It was registering
a lot of unnecessary signals and was doing too much in general(vars like
`can_transfer` simply isn't required)

Fixes
https://github.com/tgstation/tgstation/pull/87131#issuecomment-2403284265
properly by adding an extra `newloc` argument to
`temporarilyRemoveItemFromInventory()` which simply hints where we want
to move the object without actually removing it from the player.

Using this argument we can fix camera assembly construction code because
we now hint we want to move the gas analyzer into the camera and the
signal handler code for drones can correctly check for locs

## Changelog
:cl:
refactor: cleaned up how drone holds their tools from the toolbox.
report bugs on github
/:cl:

* Automatic changelog for PR #87426 [ci skip]

* Automatic changelog for PR #87420 [ci skip]

* Automatic changelog for PR #87421 [ci skip]

* Added a system to hide parts of hair when wearing hats (#87263)

## About The Pull Request

Added a system to allow clothing to apply a mask to your hair sprite,
using the same blend procs that hair gradients do. This allows us to
hide the upper part of people's hair without affecting portions below a
person's hat.

Currently this is only implemented on hardhats as an example. This is
the mask they use:

![Mask_Example](https://github.com/user-attachments/assets/aef11885-33e4-48b2-90de-d10447a34b0f)
This hides any hair above the brow line and above a 45 degree angle
along the sides of the head. For hats with a thinner or wider profile, a
thinner or wider mask could be made.

Alternatively, you could create a mask for a suit slot item that makes
it appear like long, draping hair has been tucked into the suit. You
could also color the mask to create items that change the color of a
person's hair, if you wanted to do that for some reason. If multiple
items of clothing have masks, they will all be applied in sequence.

Before:

![before](https://github.com/user-attachments/assets/e4f13255-c6dc-4eb7-8b75-ada84380a739)

After:

![after](https://github.com/user-attachments/assets/59e5db78-e5ac-455a-af5b-cb1b460f5f43)

Removing the hardhat will cause your afro to poof back out completely
unharmed.

## Why It's Good For The Game

It looks better than having tall hairstyles show up behind your
headwear, but it does not hide your hair completely.

## Changelog

:cl:
add: Hardhats now squish down excessively tall hairstyles while being
worn.
/:cl:

* Automatic changelog for PR #87406 [ci skip]

* Automatic changelog for PR #87331 [ci skip]

* Moves birdshot's drone dispenser to somewhere it can feasibly be found (#87262)

## About The Pull Request

![image](https://github.com/user-attachments/assets/cf976e68-af79-497b-966d-0bb9e77eea40)
Crams the birdshot drone dispenser into maints near robotics so it can
be feasibly reached by people within the science department and not in
the middle of bumfuck nowhere. Also gave it some mats nearby for
consistency's sake
## Why It's Good For The Game
Most people aren't gonna even FIND the drone dispenser since it spawns
in the far east of the map in this room

![image](https://github.com/user-attachments/assets/23d5aa37-1863-4dce-9380-3391f558d044)
Makes it more consistent with other maps having it close to robotics
## Changelog
:cl:
map: Moved Birdshot's drone dispenser closer to robotics
/:cl:

* Automatic changelog for PR #87259 [ci skip]

* Automatic changelog for PR #87239 [ci skip]

* Automatic changelog for PR #87263 [ci skip]

* fixes stationary medbots still searching for patrol beacons (#87427)

## About The Pull Request
eventhough medbots wouldnt move towards them, itd still keep searching
for beacons. this fixes that

## Why It's Good For The Game
fixes stationary medbots still searching for patrol beacons

## Changelog
:cl:
fix: stationary medbots no longer search for patrol beacons
/:cl:

* Automatic changelog for PR #87262 [ci skip]

* Automatic changelog for PR #87427 [ci skip]

* Update: replaces the singulo area with sm area (derelict) (#87047)

## About The Pull Request
Replaces the empty singularity chamber with a usable supermatter chamber

## Why It's Good For The Game

The derelict drone station since removal of singularity generators (i
assume it used to have a singularity generator) most likely lacks a big
goal.. other than total repair
this adds a supermatter shard to the material vault and a exploded
supermatter chamber
## Changelog

:cl: Nyozzl
Add: SM chamber to drone derelict station
/:cl:

![corner
1](https://github.com/user-attachments/assets/b1b8b434-efb8-438d-928b-f30459dc2c2a)

![corner
2](https://github.com/user-attachments/assets/75e832b8-f419-4f57-9572-e5419ecba275)


![image](https://github.com/user-attachments/assets/5dbb27a3-4c69-4454-a30a-fdb4489f607f)


![image](https://github.com/user-attachments/assets/dafbf4ee-f1d2-4b60-8e39-5472de95bde3)

---------

Co-authored-by: Ghom <[email protected]>

* Singularity_pull() standartize (#87304)

## About The Pull Request
Previous attempt - https://github.com/tgstation/tgstation/pull/87227

`/atom/proc/singularity_pull(obj/singularity/singularity, current_size)`
has first arg typed, but other procs were just referencing it as a
un-typed variable.

Since args are not standartized AND
`atom/proc/singularity_pull(obj/singularity/singularity, current_size)`
is out-dated, since it can be called by things that has
`/datum/component/singularity` - not just by
`obj/singularity/singularity` - This PR just adds args to every
`proc/singularity_pull()` as follows:
`proc/singularity_pull(atom/singularity, current_size)`

## Why It's Good For The Game
Standartization

## Changelog
No changelog needed

* (bounty) you no longer need ALL parts deployed to use a modsuit (limbless welcome!) (#86825)

you no longer need all parts deployed to activate a modsuit
in order to use a module it needs its required part deployed, eg
magnetic attachment = boots needed
passive effects from a module dont work unless the relevant parts are
deployed

video todo

fikou wants this and uhh i guess its better that the legless and the
armless are capable of using modsuits
however wearing a modsuit onearmed or onelegged properly still needs a
seperate PR

:cl:
balance: you no longer need all parts deployed to activate a modsuit,
you can use them limbless
/:cl:

---------

Co-authored-by: Fikou <[email protected]>
Co-authored-by: Ghom <[email protected]>

* conflicts- just use TG's code

* Automatic changelog for PR #86825 [ci skip]

* Fixes nuclear bomb/self-destruct overlays for deconstruction/lights, adds more examine text (#87428)

## About The Pull Request

hey turns out the overlays for this were not working for a good while,
probably ever since #67144 because that merged the procs for
deconstruct/lights overlay handling into one but didn't adjust the code
or something. this PR fixes that plus adds an overlay update during
toggling safety of the nuke so both overlays work as expected. also
fixes disarming of the nuke still showing the red armed lights.
also adds more to the decsription of the devices because why the hell
not (worst case if overlays break again people can examine the damn
thing to make sure)
![i am going to sleep
now](https://github.com/user-attachments/assets/3aa4b4c2-bf6a-4be2-b100-171221041465)

## Why It's Good For The Game

Fixes #68322
more feedback equal good

## Changelog

:cl:
fix: fixed nuclear devices not showing the overlays for deconstruction
states and lights for arming state pro…
* Death of mutant bodyparts AND external organs (#85137)

Removes mutant bodyparts and external organs from the game completely
Digitgrade behaviour was mutant bodypart for no reason

Cat ears now work with the bodyparts overlay system, same as all the
other external organs (since all their behaviour is now just on /organ

It doesn't remove all the /external types, but moves all behaviour to
/organ. I'll follow up with a PR wiping all the /external organ types,
but it's just conflict heaven so not this PR

I've also streamlined a lot of duplicate/weird species regeneration code

Melbert did the same PR as well but due to a lack of time (?) I have
absorbed his PR to double nuke mutant bodyparts

Frees us from the chain of unmodular code, and kills my greatest nemesis
(after the shuttle meteor murder bug)

:cl: Time-Green and MrMelbert
Refactor: External organ behaviour has been moved to /organ, ears now
use the same system as the other organs
Refactor: Mutant bodyparts are dead! This likely does not mean much to
the average person but it's very dear to me
code: Improves digitgrade handling in preference code
/:cl:

I have absorbed #85126, using Melberts code to improve and add some
missing changes. Mainly improving the functioning of preferences and
digitgrade legs. I didn't take over the hairstyle improvements.

---------

Co-authored-by: Ghom <[email protected]>

* Fixes missing felinid ear preference (#86553)

Closes #86452

🆑
fix: Fixed missing felinid ear preference
/🆑

* Spelling Fixes (#86056)

Fixes several errors to spelling, grammar, and punctuation.
Improves readability and user experience.
:cl:
spellcheck: fixed a few typos
/:cl:

* Fix plasmamen having all feature preferences (#86682)

Fixes #86622

Plasmamen relevant_external_organ is null, and it then checks if
relevant_external_organ is in a list containing nulls
I cleared the nulls from get_mut_organs to fix it

:cl:
fix: Fixes plasmamen having all external organ species preferences
/:cl:

* Fixes cat ear layering, makes getFlatIcon account for RESET_COLOR on under/overlays (#86757)

After the external organ removal pr, cat ears stopped being as weirdly
specialcased, and instead just used a `/datum/bodypart_overlay/mutant`
subtype. However, this was set up in a way where the inner ears were put
on a different layer from the outer ears, leading to wonky layering.

In this pr, we revert their layers and instead apply the inner ears as
an overlay onto the base ears, fixing this.

Thank you Melbert for the idea. o7

Additionally, as this pr tripped the screenshot tests, makes the
`getFlatIcon(...)` proc account for `RESET_COLOR` on under/overlays.

We do this by making it stop applying the colour after merging all the
under/overlays, and instead apply it and the parent color _before_
merging any under/overlays, while proxying the parent color as a new
parameter `parentcolor` to any new `getFlatIcon(...)` calls.

This coincidentally also fixes usage of `getFlatIcon(...)` on husked
bodies, as those also used `RESET_COLOR` for their blood overlay. The
screenshot tests had to be updated for this.

Fixes #86453.

:cl:
fix: Fixed cat ears not layering properly.
fix: Husked bodies show their blood with the right colours in
photographs.
/:cl:

* Automatic changelog for PR #86757 [ci skip]

* Fish infusion (#87030)

I'm adding a new infusion ~~(actually four, but two of them are just
holders for specific organs tied to a couple fish traits)~~ to the game.
As the title says, it's about fish.

The infusion is composed of three primary organs, plus another few that
can be gotten from fish with specific traits.

The primary organs are:
- Gills (lungs): Instead of breathing oxygen, you now need to stay wet
or breathe water vapor.
- fish-DNA infused stomach: Can safely eat raw fish.
- fish tail: On its own, it only speeds you up on water turfs, but it
has another effect once past the organ set threshold. It also makes you
waddle and flop like a fish while crawling (I still gotta finish sprites
on this one)

Other organs are:
- semi-aquatic lungs: A subtype of gills from fish with the 'amphibious'
trait, falls back on oxygen if there's no water. Can also be gotten from
frogs, axolotl and crabs.
- fish-DNA infused liver: From fish with the 'toxic' trait. Uses
tetrodotoxin as a healing chem instead of a toxin. Also better tolerance
to alcohol if you want to drink like a fish (ba dum tsh).
- inky tongue: From fish with the 'ink production' trait. Gives mobs the
ability to spit ink on a cooldown, blinding and confusion foes
temporarily.

The main gimmick of this infusion revolves around being drenched in
water to benefit from it, In the case you get the gills organ, this also
becomes a necessity, to not suffocate to death (alternatively, you can
breathe water vapor, without any benefit). To enable the bonus of the
organs set, three organs need to be infused. They can be gills, stomach,
tail and/or liver, while the inky tongue doesn't count towards it.

Once the threshold is reached, the following bonus are enabled:
- Wetness decays a lot slower and resists fire a bit more.
- Ink spit becomes stronger, allowing it to very briefly knock down
foes.
- Fishing bonuses and experience
- Resistance to high pressures
- Slightly expanded FOV
- drinking water and showers mildly heal you over time.
- for felinids: You won't hate getting sprayed by water or taking a
shower.
- While wet:
- - If the fish tail is implanted, crawling speed is boosted.
- - You no longer slip on wet tiles.
- - You also become slippery when lying on the floor.
- - You get a very mild damage resistance and passive stamina
regeneration, and cool down faster.
- - You resist grabs better.
- - get a very weak positive moodlet.
- However, being dry will make you quite squisher, especially against
fire damage, slower and give you a modest negative moodlet.

While working on it, I've also noticed a few things that explained why
tetrodotoxin (TTX) did jackshit at low doses, because livers have a set
toxin tolerance value, below which, any amount of toxin does nothing.
Also I've felt like reagents like multiver & co were a bit too strong
against a reagent that's supposed to work at very low doses, with slow
metabolization, so I've added a couple variables to buff TTX a bit,
making it harder to purge and resistant to liver toxin tolerance (also
added a bit of lungs damage).

I wanted to take a shot at coding a DNA infusion and see how chock-full
I could make it. DNA infusions are like a middle point between "aha,
small visual trinket" and organs with generally ok effects. I seek to
make something a bit more complex ~~(also tied to fishing ofc because
that's more or less the recurrent gag of my recent features)~~ primaly
focused around the unique theme of being strong when wet and weaker when
dry.

EDIT: The PR is now ready, have a set of screenshots of the (fairly mid)
fish tails (and gills, barely visible) on randomly generated spessman
and one consistent joe:

![immagine](https://github.com/user-attachments/assets/a4965508-22e2-4d3a-8523-29fec6bce91e)

:cl:
add: Added a new infusion to the game: Fish. Its main gimmick revolves
around being stronger and slippery when wet while weaker when dry.
balance: Buffed tetrodotoxin a little against liver tolerance and
purging reagents.
/:cl:

* Eye wounds, scars and a new ~Pirate~ RP quirk (#87209)

Upon getting stabbed in your eyes or having a bullet fly through your
head there's a chance (minor for stabbing, extremely low for headshots)
you'll receive a new "Eye Puncture" wound which causes profuse bleeding
out of your now-empty eye hole. Once healed you'll have to deal with a
scar on your eye which cannot be cured and requires surgical
replacement. Eye scarring will reduce your eyes' max health by 15, give
you a minor screen tint and a fancy visual on your character sprite.
Getting scarring on both eyes will turn you completely blind.

![image](https://github.com/user-attachments/assets/c1ae4ff3-6844-405d-819b-9c390511e321)

This PR also introduces a new quirk which gives you eye scarring on the
eye of your choice and an eyepatch to go alongside it, just make sure
that it sits on the right eye.

Also added medical(white) subtype of eyepatches to loadout for those who
want that version instead. Credits to AnturK on discord for the idea.

Its a neat lil' feature that makes the game more immersive, and unlocks
more roleplay opportunities for players. New quirk gives access to this
feature for players who want to make it a part of their character's
backstory (or maybe as a part of permanent scar roleplaying).

:cl:
add: Getting stabbed or shot in the eyes has a chance of giving you a
new wound and a semi-permanent scar, blinding you on one side
add: Added new "Scarred Eye" quirk which blinds you on one eye but gives
you a fancy eyepatch
add: Medical eyepatches have been added to loadout
/:cl:

---------

Co-authored-by: Time-Green <[email protected]>

* Resprited tails from fish infusion. (#87298)

Back when I made #87030 I got a bit lazy when it came to spriting the
fish tails and just ported a few ones from furry servers and made them
inherit the hair color. Let me tell you, those sprites kinda look bad,
and the fact that they've the same colors of hair is kinda... fuzzy, and
doesn't sit well with me, like some hairball stuck in a cat's throat.

So I took upon myself to actually make them better (and also give gill
overlays a couple extra pixels), at the cost of some of my free time and
their wagginess, because fuuuuuck wagging animations for anything that
isn't a somewhat amorphous fluffy tail. Fish don't wag their tail.

They also get one of several blue/grey tints if the owner of the part
doesn't have a peculiar skin tone like lizards or ethereals or moffs.

Anyway, comparison time:

OLD:

![immagine](https://github.com/user-attachments/assets/a4965508-22e2-4d3a-8523-29fec6bce91e)

NEW:

![immagine](https://github.com/user-attachments/assets/0f8e80cd-d11f-4fd4-a919-acb7237fa927)

Both from byond screenshots but I cut and pasted them in paint instead
of asesprite because old habits die hard.

Better sprites. Perhaps the selection of blues could be improved a bit
idk.

:cl:
image: resprited fish tails from fish infusion.
/:cl:

* Makes the game compile, first.

* Removes a duplicate loadout entry added by /tg/ (to avoid people's loadouts getting messed up)

* Fixed an issue with on_mob_insert() for /datum/bodypart_overlay/mutant

* Fixed an issue with the burn datum of the moth wings bodypart_overlay

* Fixing digitigrade legs not behaving as they should be

* A bunch of Insert->mob_insert and Remove->mob_remove

* Okay, now stuff gets colored properly

Also ears work properly too!

Only thing is that mutant organs on the preferences dummy don't seem to change between character, at least for most of them, which is really annoying.

* Properly returns ears to being internal organs

* Makes it so preferences can use relevant_mutant_bodyparts again!

* Makes organs properly update when changing species

* Markings now get removed when they don't need to be there on a limb

* Fully renives update_mutant_bodyparts(), as it was basically just update_body_parts() anyway at this point

* fix charging implant

* Restores the usage of simple bodypart_overlay for the sensory_enhancer and the hackerman_deck, as that was otherwise causing a bunch of runtimes

* Returns legs to being a sprite accessory, just for simplicity's sake (I don't want to have to refactor it on our end again)

* Fixes xenos not getting their mutant organs because I accidentally nulled the list for no reason :skull:

* Makes it so certain organs (in this case, ears) can't be replaced when changing visual preferences, meaning Tesharis/Synths/Slimepeople will get their respective ears, regardless of what visuals they choose for them

* Fixes a small mistake with spines in the code

* Adds some mutant_bodyparts for the results of the infuser unit test. This might be a hack, but we'll cross that bridge when we get to it in the future.

* Adds a "None" option to tail_spines

* Allows ears to not constantly runtime because they don't have an accessory_name sometimes, which is a sad consequence of many species not setting their ear sprite sometimes

* Should fix CI, hopefully should be the last thing needed for this to work flawlessly from now on (crossing fingers)

* This ACTUALLY fixes the changeling transform and transform sting! Hurray!

---------

Co-authored-by: Time-Green <[email protected]>
Co-authored-by: Ghom <[email protected]>
Co-authored-by: SmArtKar <[email protected]>
Co-authored-by: klorpa <[email protected]>
Co-authored-by: _0Steven <[email protected]>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Fluffles <[email protected]>
Co-authored-by: GoldenAlpharex <[email protected]>
## About The Pull Request

The following effects will trigger allergic reactions for the "Food
Allergy" quirk
- For Alcohol allergies:
   - Drinking any ethanol (beer, wine, etc)
- For Bug allergies:
   - Drinking ants
   - Getting stung by a bee
   - Getting bit by a (giant) ant
   - Getting bit by a (giant) spider
- For Sugar allergies:
   - Drinking Sugar

Other notes
- Any mob undergoing surgery will benefit from ethanol speeding it up,
rather than just carbons

## Why It's Good For The Game

I saw a random discord comment that said "Bee stings should trigger bug
allergies" and I thought it was funny, so I added it, then I thought I
could add similar triggers to a few other things.

Important to note for the reagent based effects, they only trigger on
ingestion. And on top of that, it's a % chance to trigger, scaling with
the amount you drink at once. So you can sneak a sip of alcohol if you
want to roll the dice (I figure if I made syringes kill you, I'd have to
up the point reward, which I don't want to bother with)

## Changelog

:cl: Melbert
add: Drinking any ethanol (beer, wine, etc) will trigger alcohol
allergies
add: Drinking ants will trigger Bug allergies
add: Getting stung by a bee, or bitten by a (giant) ant or (giant)
spider, will trigger bug allergies
add: Drinking plain sugar or caramel will trigger sugar allergies
qol: Ethanol can speed up the surgeries of any mob type applied to,
rather than solely humans.
/:cl:
## About The Pull Request

Hitting an SM with extraction tongs won't dust them anymore (the tips
are made out of hypernob too)

## Why It's Good For The Game

consistency

(real reason is me hitting the sm crystal with tongs while sleep
deprived and ruining my planned gimmick, but come on. theyre hypernob
tongs. )

## Changelog

:cl:
fix: Hitting an SM with extraction tongs won't dust them anymore
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
Co-authored-by: Fikou <[email protected]>
## About The Pull Request
@carlarctg pointed out a design flaw with fish infusion that can lead to
fish with traits that generate special output organs being wasted if the
stomach, tail and lung slots haven't been infused yet. To make an
example, this means you need to infuse squid last, after infusing three
other generic fish, and not before, which is more of an annoying detail
than an interesting one in this context...

That said, that should be getting fixed in this PR.

## Why It's Good For The Game
It's a small botherance.

## Changelog

:cl:
fix: Fixed a small botherance with special fish infusions. You no longer
need to infuse squids and pufferfish last to reap their special organs.
/:cl:
## About The Pull Request
closes tgstation/tgstation#87136
## Why It's Good For The Game
it makes sense for a tv to have a volume button, some people just don't
want to listen to it all day.
## Changelog
:cl: grungussuss
qol: you can now turn off the volume on an entertainment monitor
/:cl:

---------

Co-authored-by: SmArtKar <[email protected]>
Co-authored-by: MrMelbert <[email protected]>
Co-authored-by: _0Steven <[email protected]>
Co-authored-by: SmArtKar <[email protected]>
## About The Pull Request

Copypasta moment

## Changelog
:cl:
fix: Fixed hat stabilizer component not cancelling the attack chain
/:cl:
## About The Pull Request

I made the entertainment radio text a little less eye-searing.

![image](https://github.com/user-attachments/assets/d95c10aa-cfa1-4365-922b-b3a5c03e3bfd)

![image](https://github.com/user-attachments/assets/aed97d39-2938-4fdb-8ccc-930a65deb592)

![image](https://github.com/user-attachments/assets/436632c1-59eb-4fb4-a632-0c3b2448e45a)
## Why It's Good For The Game

I'm sure it looked kind of okay on dark mode, but for us light mode
heathens, entertainment chat could be kind of hard to read sometimes.
This shade looks better and, while not as bright, I think fits the role
better - I went for something similar to the kind of blue/grey of a
reporter's suit.
## Changelog
:cl: Vekter
fix: Changed the color of entertainment radio to be darker
/:cl:
## About The Pull Request

This makes the GPS UI give the general direction of a GPS on a different
linked z-level.

https://github.com/user-attachments/assets/98c6dfd8-5ced-4145-b14a-3813821ef30c

## Why It's Good For The Game

Makes navigating through space less of a chore, as previously, I believe
the only way was to manually write down or memorize what direction was
linked to what z-level.

## Changelog
:cl:
add: GPSes now show the general direction of cross-linked z-levels.
/:cl:
## About The Pull Request
closes tgstation/tgstation#87335
videos:
<details>

https://github.com/user-attachments/assets/1ace3c0d-3ea4-400b-b8be-f0e1c6b08ac6

https://github.com/user-attachments/assets/f5350114-9cb6-46fd-9fe3-7a00d89cf8c7

</details>

## Why It's Good For The Game

more variety than previously and I think these are better, also they're
made by us and not taken from 3rd parties.
## Changelog
:cl: grungussuss and redemptionarc
sound: sigh sounds have been improved
/:cl:
## About The Pull Request

The sparks that are created before the supply pod gets deleted are now
optional, and can be set with a button in the "Harmful effects" section.

![image](https://github.com/user-attachments/assets/5e3a741d-917e-4260-8685-db74cdd926f9)

* Closes #86799.
## Why It's Good For The Game

Allows admin to spawn supplies without lighting a room on fire because
of a hint of plasma in the air.
## Changelog
:cl:
admin: make sparks optional when sending a supply pod
/:cl:
## About The Pull Request

spray-on insulated gloves are chunky once more. does not affect regular
ones

## Why It's Good For The Game

AFAIK the intention always was for these to be kind of clunky and
awkward with the puzzle of 'how do i take this shit off?', and the loss
of chunkiness kinda ruins that.

## Changelog

:cl:
fix: spray-on insulated gloves are chunky once more. does not affect
regular ones
/:cl:
SmArtKar and others added 24 commits December 7, 2024 01:02
## About The Pull Request

Closes #87592
You could pass additional args into emotes with zero sanitization if you
got yourself a way to call TGUI acts

## Changelog
:cl:
fix: Fixed HTML injections via pet tricks
/:cl:
generally cleans up the code a bit. fixes the issue where if you had
clothing on yourself already and you tried extending when active it
still went through the sealing process even though it didnt extend the
part, causing weird desyncs. fixes the issues with part enabled modules
that would not activate, makes stealth and radproof modules require the
whole suit to be out cause thinking about it they wouldnt really work
without that i think
reverts quick activation to try put parts on you instead of removing
them as priority, i think that plays nicer with separate part activation

fixes #87413
## About The Pull Request

Modsuit actions no longer go on cooldown when selected, only when
actually used. So you can select an action and use it
## Why It's Good For The Game

I don't even know why this was a thing it just makes modsuits more
uncomfortable and unpleasant to use. I see no reason for it to exist so
i'm removing it. @Fikou
## Changelog
:cl:
qol: Modsuit actions no longer go on cooldown when selected
balance: microwave beam module is on a 4s cooldown not 10s
/:cl:
## About The Pull Request

adds some placeholderish sprites for various fish sources

- plasma river: lava texture but it's the first frame slowly looping
horizontally
- tray: literally just a little bit of a tray sprite
- rift: literally just the rift but horizontal. i think that's funny
- fry: lava texture but yellow and doesn't glow as much

added debug portal with all fish locations

## Why It's Good For The Game

i dont like fishing in blue deep fryers

## Changelog

:cl:
image: adds some placeholder and not sprites for various fish sources
code: added debug portal with all fish locations
/:cl:
## About The Pull Request
Changes the required genes for `/datum/generecipe/cindikinesis` and
`/datum/generecipe/pyrokinesis` to have the correct path to the fire
breath gene.

## Why It's Good For The Game
Bug fix is good.

## Changelog
:cl:
fix: The gene recipes for cindikinesis and pyrokinesis should now work
properly.
/:cl:
…ng the input part you get after clicking. (#87588)

## About The Pull Request

While fiddling with NTNRC netadmin mode, I noticed that while renaming
is blocked on `strong = TRUE` channels like `#cargobus`, it doesn't gray
out the button like for deleting the channel.
Instead, clicking it still opens the input menu!... But that part _is_
disabled, thus being just an uninteractable black bar.

So in this pr we just make input buttons' `onClick` not work if
`disabled`, and apply `Button--disabled` to itself if so.
## Why It's Good For The Game

Grayed out button is much better than uninteractable black bar,
especially when normal disabled buttons are _also_ grayed out.
## Changelog
:cl:
fix: NTNRC "rename channel" button is now grayed out when unusable.
fix: Genetics console "create advanced injector" button is now grayed
out when unusable.
/:cl:
## About The Pull Request

Closes #87567
Closes #87559

I have zero clue how this code worked during TMs or prior to my changes,
only sensible explanation I can come up with being that we had a
horrific hanging refs issue this entire time?

## Changelog
:cl:
fix: Fixed some guns runtiming when attempting to reload
/:cl:
## About The Pull Request

Closes #87618
Technically either part of this fix (moving the active check in
seal_part and removing the parts check in control_activation) is enough
to fix this particular issue but I'm doing both for sanity reasons (and
possibly edge cases with modules that modify their required parts? not
sure if we have those)

also yeah it didn't call deactivate()

## Changelog
:cl:
fix: Fixed MODsuit deactivation not disabling modules
/:cl:
## About The Pull Request
autotator, malf and blob's candidates would all get wiped out by this,
as `can_roll_midround()` returns TRUE if they can roll midround

## Why It's Good For The Game
seems like we want candidates in these roles, given the game is trying
to get some

## Changelog
:cl:
fix: dynamic rulesets can get candidates for their roles
/:cl:
fixes #87535
Updates a couple paths, and rewrites a large chucnk of modsuit module
rendering, skipping the caching that TG does with their modsuit masking
because it wouldn't be worth how many variants we have
* fixes monkey eating subtree (#87562)

* Automatic changelog for PR #87562 [ci skip]

* You can now place material iron tiles in space (#87602)

After #87587 i considered that players (especially newbies) can confuse
iron tile and material iron tile.

This PR removes barely noticeable difference between iron tile and
material iron tile, since they use the same amount of the same material
and should therefore act the same.

![image](https://github.com/user-attachments/assets/3236ab63-6086-4c4b-973f-866efeaab9d6)

:cl:
fix: you can now place material iron tiles in space like regular iron
tiles
/:cl:

---------

Co-authored-by: SyncIt21 <[email protected]>

* Automatic changelog for PR #87602 [ci skip]

* Melee cooldown on actions is defined as 0, not overriden everywhere (#87599)

Actions have null melee cooldown by default. The code checks if so, and
gives the action the same melee cd as the action's cd. This means you
can't take any melee action for that duration.

Since this is dumb as shit, 95% of actions in the game override it. But
some don't, which leads to all sorts of 'janky' feeling combat, most
noticeably being that of venus man eaters, which literally cannot attack
until their tangle action is off cooldown. There's some others like it -
legion skull throws for example.

This simply makes it so that the cooldown is, by default, zero, and can
be overriden to null on types which lets it copy the cooldown, if the
coder so chooses.

As a necessary byproduct this affects... pretty much every action in the
game. I found-and-replaced all usages of melee cd = 0 because that's now
redundant, but it's not so easy to check for every action which doesn't
override the value - this means this will likely have some side-effects
on some abilities that aren't meant to be immediately followed up with a
melee attack, but I couldn't find any.

i cant believe there were 3 gorillion actions overridding melee cd to
zero thats embarrassing.

if every subtype overrides a timer variable to the same value then just
maybe the value should be default.

Fixes ALL action melee jank. Perhaps too well!
:cl:
refactor: Actions will no longer by default apply a melee cooldown equal
to action cooldown.
fix: Fixed various abilities causing melee jank, most noticeably venus
man eaters
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Automatic changelog for PR #87599 [ci skip]

* Fixes `Robotize()` and player panel Make AI verb not putting dead player ghosts in the new mob (#87597)

observer ghosts with no minds skip over mind transfer and get put in the
mobs via key transfer, while a dead player ghost has a copy of their
character's mind but with `active = FALSE`, which fails the transfer.
it's kinda weird how the player panel uses `AIize` for the AI but uses a
completely different mob transform for the borg. hmm

fixes #68643

:cl:
fix: fixed Make Cyborg admin verb and player panel Make AI not putting
the ghosted player in control if they weren't an observer
/:cl:

* Automatic changelog for PR #87597 [ci skip]

* Fix NTNRC muting not working at all. (#87606)

When fiddling around with NTNRC, I noticed that muted clients... can
still talk.
While the input bar is reddened and displays a mute message, it isn't
actually disabled- even more so, there's no sanity checks for being
muted on the `ui_act(...)`.

In this pr we just make it so the input gets disabled, and add a sanity
check to avoid people bypassing it.

...good if the app's muting feature like, actually works.
:cl:
fix: NTNRC muting actually works again.
/:cl:

* Automatic changelog for PR #87606 [ci skip]

* Fixes `set_sanity()` math maybe hopefully oh fuck (#87605)

okay so judging by the code comment when sanity dips lower than the
minimum aka 0 we're supposed to move up from our current sanity by 0.7
instead. however in code it's instead using the passed `amount` value,
which from the looks of it is mostly passed by already modifying sanity
with other math operations, like the madness mask

https://github.com/tgstation/tgstation/blob/762a52ed83c3d910b14258060d4693d120fe628a/code/modules/antagonists/heretic/items/madness_mask.dm#L59

https://github.com/tgstation/tgstation/blob/762a52ed83c3d910b14258060d4693d120fe628a/code/datums/mood.dm#L530-L532
so instead we're passing an even lower value than the current sanity and
are moving up from there instead of current sanity. wack
i think it started as far back as
https://github.com/tgstation/tgstation/commit/091f221fe615cfa5e741b98f14b6e5c8eeadbe47
but i might be wrong and my math might be wrong and do we need the
`clamp()` part of the equation even oh god oh fuck

Fixes #69082

:cl:
fix: sanity dropping below zero should now properly slowly recover back
to zero instead of dropping even further
/:cl:

* Automatic changelog for PR #87605 [ci skip]

* Restores Derelict's vault doors hacking immunity (#87604)

Title; it was handled by `attackby()` and became deprecated at some
point, something something attack chain
Also gave it feedback because might as well

Fixes #79926

:cl:
fix: the Derelict vault doors are once again unhackable
qol: the Derelict vault doors provide chat feedback when you try to hack
them so you can stop poking them with your tools
/:cl:

* Automatic changelog for PR #87604 [ci skip]

* Fixed being unable to aghost while corpselocked (#87594)

Fixed being unable to aghost while corpselocked, via adding another
parameter to ghostize that checks if it's an aghost or not

i wana leave my body when testing as ethereal

:cl:
fix: Fixed being unable to aghost while corpselocked
/:cl:

* Automatic changelog for PR #87594 [ci skip]

* Kills default chemical color 2: 5 years later edition (#87601)

[One fateful night](https://github.com/tgstation/tgstation/pull/47535),
5 years ago, I got tired of seeing the same stupid color on every single
chemical in the game. I went out of my way to PURGE this stupid color
from existence and give everything an unique color.

However, the task of pruning color debt is Sisyphean, and it
maliciously, slowly, creeps back into the game. I recently uncovered, to
my dismay, that one of fermichem's many mistakes, besides its existence,
was _reintroducing_ #C8A5DC to two reagents. I won't stand for this. My
reagents WILL be colorful, and not an ugly shade of pink.

Acetone Oxide is a greyed out blue, because Acetone (in the game, irl
everything is colorless because real life sucks) is blue and Oxygen is
gray.

Ichiyuri is removed because it existed nowhere but its own definition,
much like fermichem only exists because of itself.

I also finished the purge by making the default color of quantum hair
dye and colorful reagent gray instead.

Ugly pink is not a creative color.

also removes unused poopy content
what do i even label this

:cl:
code: acetone oxide is blue!!!
/:cl:

* Automatic changelog for PR #87601 [ci skip]

* Separate forced injection between latejoin and midround (#87557)

Fixes an issue mentioned in
https://github.com/tgstation/tgstation/issues/72526, where pressing
"Now!" in the game panel for injecting a latejoin, caused midround one
to occur as well. This was because the same boolean was used for forcing
both, which caused both to happen.

* Closes https://github.com/tgstation/tgstation/issues/72526

Improves admin tools by fixing a bug.
:cl:
admin: doing a latejoin injection no longer causes a midround one as
well
/:cl:

* Automatic changelog for PR #87557 [ci skip]

* syndicate (and all) climbing hooks are small-sized (#87577)

syndicate (and normal) climbing hooks are small sized.

nobody has ever used a syndicate climbing hook because they take up a
massive normal slot. why is the upgrade that costs TC worse than the
normal emergency hook? probably an oversight.

similarly, anyone who buys a climbing rope from the goodie pack will
soon notice it's normal sized and toss it on the ground.

i don't think there's much of a good reason for these to be normal
sized. i'd call this a consistency fix more than anything. its not like
extended oxygen tanks are normal sized, sometimes things that take more
effort to get are just better.

:cl:
qol: syndicate (and all) climbing hooks are small-sized
/:cl:

* Automatic changelog for PR #87577 [ci skip]

* Let alert polls function after roundend (#87578)

Fixes #86331
Fixes #87060

Admins keep trying to spawn stuff postgame and it doesnt work

:cl:
fix: alert polls work past roundend
/:cl:

* Automatic changelog for PR #87578 [ci skip]

* fixes cyborg apc frame attachment (#87585)

fixes cyborg apc frame attachment

fixes #87098

:cl:
fix: fixes cyborg apc frame attachment
/:cl:

* Automatic changelog for PR #87585 [ci skip]

* [NO GBP] HPLC can purify inverted chems (#87524)

- Fixes #87521

:cl:
fix: HPLC can purify inverted chems.
/:cl:

* Automatic changelog for PR #87524 [ci skip]

* Fix light emitters being deleted in pod bay when deleting everything (#87516)

When you delete everything with the "delete that shit" button in the pod
bay, it also deleted the light emitters, which makes it difficult to see
what is happening in the bay. This PR makes it so the light emitters are
not deleted. Also removes some one letter variables in that part of the
code.

* Closes https://github.com/tgstation/tgstation/issues/83219

Helps admins do their work more easily.
:cl:
code: removed two one letter variables
admin: clearing the pod bay will not remove the light emitters.
/:cl:

* Automatic changelog for PR #87516 [ci skip]

* Makes pure inacusiate work (#87603)

we have the [good hearing
trait](https://github.com/tgstation/tgstation/pull/75931) which works
for the purposes of this chemical boost very well, so i made it use that
also gave it some feedback messages on gain/lose

Fixes #69133

:cl:
fix: fixed pure inacusiate not giving you ungarbled whisper hearing at
full range
qol: pure inacusiate will also provide chat messages when its boost is
gained/lost
/:cl:

* Automatic changelog for PR #87603 [ci skip]

* [NO GBP] Fixes pressure-proof clothing not preventing plasmamen self-combustion (#87598)

Closes #87515

:cl:
fix: Fixed pressure-proof clothing not preventing plasmamen
self-combustion
/:cl:

* Automatic changelog for PR #87598 [ci skip]

* Where them peaches at? // a.k.a Service Cyborg botany tools! (#87464)

(my dumb ass commited previous pr on master branch so i made new 💀)

- Adds "Service Cyborg Botany Upgrade" that cost 13 iron and 2 glass.
- Basically, the mostly unused cyborg model has now more functionality.
(as we know how many gimmicks can be made through botany)

- Botany Omni-tool:

![gorg_newskin](https://github.com/user-attachments/assets/877ea903-1d9d-4b83-af50-7a0e7a080308)

- Meet the "Gardener"

![gorg_gardener](https://github.com/user-attachments/assets/3a70c6a2-d6cc-45c3-8584-e730e9f3d694)

I was outraged that despite the borg ability to cook - near half of the
recipes you could not recreate due to the lack of a botanist (or when
theyre doing syndicate operations). The Service borg can now serve well
on a lowpop rounds.

:cl:
add: Added new botany module in mechfabricator designs. Gives service
cyborg plant bag and plant analyzer.
add: Added cyborg botanical omni-tool.
qol: Service apparatus (another existing module) can now hold: seeds,
fish, grafts.
qol: Secondary beaker storage can now hold any beakers. It used to spawn
with one, but when you dropped it - you could no longer pick it back.
image: New gardener skin for service cyborg.

/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87464 [ci skip]

* Micro-optimize the `DREAMLUAU_CALL` macro (#87617)

iirc, BYOND will automatically turn `"byond:" + "whatever"` into
`"byond:whatever"` during compile, but `"byond:["whatever"]"` will still
be formatted during runtime instead. no reason *not* to do this, it
doesn't hurt.

Micro-optimization with no downsides.

No user-facing changes at all.

* Restores kiltborg model select icon, fixes spawned-in kiltborgs runtiming, fixes model select icon not updating for spawned-in model borgs (#87615)

We've lost soul for kiltborgs (for some reason in #56601). We're also
runtiming when we spawn in a kiltborg and try equipping a module for it,
which tries to open the borg's module storage; since we don't initialize
a hud for a mob until they are logged in, this didn't work. We also have
an issue where a spawned-in borg with any module would not update the
model select button to the model's because that is done in
`transform_to()` at a point where no mob is logged in and there is no
hud once again, in `update_module_innate()`.
So this PR remedies allat. Snazzy.

Restores soul
Fixes #60399
Spawned-in model borgs will show their correct model icon when a player
is placed in control

:cl:
fix: fixed a runtime when spawning in a kiltborg
fix: fixed spawned-in borgs with a pre-selected model not having their
correct model select icon
image: KILTBORGS ONCE AGAIN HAVE THEIR OWN MODEL SELECT ICON!!!!!!!
/:cl:

* [BIRDSHOT] Signage Update (#87503)

Some QOL for Birdshot

Clearer Markings to Departments and Escape Pods

:cl:
map: Additional signage to help spacefolk navigate Birdshot Station
/:cl:

* [NO GBP] Fixes mass & time calculations for HPLC (#87625)

Missed this in #87524 cause i went away for a few days & forgot to draft
it

:cl:
fix: HPLC computes lower & upper mass ranges & ETA for reagents
correctly
/:cl:

* Moved COMSIG_REAGENTS_REM_REAGENT below update_total() on /trans_to() (#87496)

at some point, someone changed things up, so that the for loop that
holds the signal of reagents being removed happens before the actual
total volume variable is changed in update_total(). this puts it below
where it probably (?) was beforehand

this has a bunch of cascading effects probably. what matters for me is
that this means total_volume is not updated by the time the chain
reaches update_icon_state(), which had the effect of causing it so that
BVAK autoinjectors did not have the 'half-empty' state being activated.

i'm very sick so i havent tested this beyond 'it works with the thing im
trying to fix', but it's prooobably okay . i mean, presumably we want to
know the reduced total volume on the signal being sent anyhow right?

:cl:
code: Moved the reagent deletion signal below updating the total volume
of containers. If any bugs seem related please report them!
fix: BVAK injectors have their middleground icon state once more
/:cl:

* Automatic changelog for PR #87615 [ci skip]

* Automatic changelog for PR #87503 [ci skip]

* Automatic changelog for PR #87625 [ci skip]

* Automatic changelog for PR #87496 [ci skip]

* Thermal insulation tags will now format correctly (#87608)

closes #87439
jointext() will still join together lists, even if some entries are
"null"
the PR removes null from the list so that jointext won't run if clothing
is either only hot-insulated or only cold-insulated

![fucked-up-looking-dog-spookston](https://github.com/user-attachments/assets/3919fe7c-b439-41a1-bd32-4d9829836699)

<details>
<summary>Screenshots</summary>

![image](https://github.com/user-attachments/assets/0e29f278-c107-4caf-b36d-16f0cd385aad)

</details>

:cl:
fix: thermal insulation tags are correctly formatted if they're only
cold or hot insulated
/:cl:

* Fix perks not shown in roundend and also perks sprites and hud. (#87296)

Fixes that perks not shown in wizard purchases in roundend report.
Added perks sprites: they show up when you buy them.
![Снимок экрана 2024-10-18
161649](https://github.com/user-attachments/assets/8ddadf83-1103-4cb3-9634-4862290f686d)
Ingame:
![Снимок экрана 2024-10-18
195713](https://github.com/user-attachments/assets/f85ca8bb-d17b-49a3-a29d-861e63ade3a3)

Fixes is good.
Sprites to understand what perks you bought.

:cl:
qol: Purchased perks now shown in hud.
fix: Perks purchased by a wizard now shown in roundend report.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87608 [ci skip]

* Automatic changelog for PR #87296 [ci skip]

* Fixes NTNRC username sorting, additionally makes subcategories sort alphabetically. (#87616)

While looking into getting the NTNRC username list sorted, I found out
that it was _already_ supposed to be sorted by status, but just got
broken in a pr that removes the program status variable forwarded for
this reason.

In this pr we simply add a `get_numerical_status()` proc that converts
the new logic into a number we can sort by, then make the tgui sort
account for this.
Additionally, we make it sort alphabetically in its subcategories, for
sanity's sake.
It now sorts by operator perms first, then
online>away(background)>offline, then alphabetically.

While I dislike operators being at the top regardless of their status,
it seems like that is how it was intended to work, and doing so sanely
would requite rethinking how names are coloured entirely. On the other
end, I think it's potentially good to have operators be at the top and
thus easily pingable at all times.

Fixes broken status sorting.
Alphabetical sorting makes finding a specific user to mute or ping them
less of a pain.
:cl:
fix: NTNRC channel user list is sorted by status again. It goes
operator>online>away>offline.
qol: NTNRC channel user list is now alphabetically sorted under its
status subcategories.
/:cl:

* Automatic changelog for PR #87616 [ci skip]

* Fixes areas in maintenance above cargo on Wawa (#87626)

The tiny maint area above Wawa's cargo bay was flagged as part of the
cargo bay, not cargo maints. This was causing the area to not behave
like maints, ie "not providing safety from a radiation storm".

![image](https://github.com/user-attachments/assets/30a23c90-9413-4665-b3cb-269511196bff)

Fixes #87517.

Consistency good.
:cl: Vekter
fix: Fixed the maintenance area in the upstairs cargo bay of Wawastation
not being flagged as maintenance.
/:cl:

* Automatic changelog for PR #87626 [ci skip]

* Shuttle docker console camera eyes now refresh if the offset/range is VV'd. (#87620)

If you VV the `x_offset`, `y_offset`, `view_range`, or `see_hidden` vars
of a `/obj/machinery/computer/camera_advanced/shuttle_docker`, it will
destroy the current eyeobj - if someone is currently viewing said
shuttle console, it'll somewhat seemlessly "refresh" with the new range
and offset for them.

Makes it easier for mappers to get the correct offset and range for
shuttle docker consoles.

Not really any player-facing changes, this is meant to make it easier to
figure out a good offset/view range when designing new shuttles.

* removes 0.5 cooldown time from togglable modsuit modules (#87613)

why did you say your pr was merge ready when you didnt do the main thing
the review said you should carlarc
and why did i not look and still merge it

redundant

not player facing

* Prevents Keykeeper's Burden from being used on centcom/away z levels (#87593)

Closes #87591

:cl:
fix: Fixed Keykeeper's Burden being usable on centcom/away z levels
/:cl:

* Automatic changelog for PR #87593 [ci skip]

* [NO GBP] Adds back and suit storage sprites to the kinetic crusher reskins (#87555)

Adds sprites for when the kinetic crusher's reskins are in the player's
back slot and suit storage slot. Additionally, ensures those spots
update when the kit is applied.

![Retool_Back_And_Storage_Sprites](https://github.com/user-attachments/assets/1c4650a7-bf3a-4783-97a4-978144f44f56)

Fixes #87473 (and it really should have had those sprites to begin with,
my bad)
:cl:
fix: Retooled kinetic crushers now have proper sprites for when they're
on your back or in your suit storage.
/:cl:
Quick sidenote: I don't think the update_held_items proc is working in
this file and I have no idea why. Anyone able to help?

* Automatic changelog for PR #87555 [ci skip]

* Radio noise pitch variance (#87530)

completes
https://github.com/orgs/tgstation/projects/19/views/1?pane=issue&itemId=84495077

https://github.com/user-attachments/assets/41712f7f-db2c-47c6-9165-381753933b0e

had to convert the sampling rate of radio noise to our standard so pitch
variance worked properly
destroys ear fatigue, finally.
:cl: grungussuss
sound: radio noise will now vary in pitch
/:cl:

* Automatic changelog for PR #87530 [ci skip]

* sound equalization for bikehorn.ogg and maintenance (#87532)

gave it a fade out at the end so it doesn't glitch when ending and
reduced volume to be more in line with the rest of our sound volumes.

https://github.com/user-attachments/assets/734e2dac-d9bf-4ab7-a865-eda75cbd1691

https://github.com/user-attachments/assets/cc567bbd-b6de-4bc4-a100-7a51d121415e
ears won't hurt anymore
:cl: grungussuss
sound: bike horn sound volume has been reduced
/:cl:

* Automatic changelog for PR #87532 [ci skip]

* Reduces pitch variance range for emotes (#87531)

closes https://github.com/tgstation/tgstation/issues/87274
vocal chords work differently to instruments and other sfx, a lower
range of pitch variance is more natural.
:cl: grungussuss
sound: emote pitch shifting has been fixed
/:cl:

* Automatic changelog for PR #87531 [ci skip]

* Fixes gas analyser tabletop & storage interactions (#87525)

- Fixes #87354

The problem is fixed with tables & storage items. Other interactions I'm
not aware of let me know.

:cl:
fix: gas analyzer won't scan the floor when placing it on a table
fix: gas analyzer won't scan storage items when placing it inside them
/:cl:

* Automatic changelog for PR #87525 [ci skip]

* Fix NT Software Hub displaying >100% completion or NaN/Infinite% completion. (#87619)

During all that fiddling with NTNRC I noticed that sometimes the
download percentage would shoot above 100%.
Looking into it, it seems that that's just because it isn't actually
capped at the downloaded file size.

So we cap it to the file size after adding our next download chunk, but
parallel to before don't complete it immediately so that we stay on 100%
for another cycle before finishing. For style reasons.

Then I noticed files with a size of 0 would sometimes display NaN% or
Infinite%, presumably because both of the progress percentage
calculations in the ui would be dividing by zero.
So to avoid this, we just skip the downloading cycle entirely for 0 size
programs, and go to download completion immediately on clicking.

This fixes our issues.

Fixes some jank.
:cl:
fix: NT Software Hub no longer displays >100% completion on downloads
sometimes.
fix: NT Software Hub no longer displays NaN% or Infinite% completion on
files with a size of 0 sometimes.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
Co-authored-by: SmArtKar <[email protected]>

* Automatic changelog for PR #87619 [ci skip]

* Adds Eyecharts (#87361)

Adds Eye charts

You can examine them to get a rough estimate of your eye health

![image](https://github.com/user-attachments/assets/1a4d85e4-43de-45a3-a979-5e63967f3422)

I mapped them onto Meta, Delta, and Ice

It's peak for doctor RP. and more flavor

:cl: Melbert
add: Eyecharts to Medbay
/:cl:

* Automatic changelog for PR #87361 [ci skip]

* Scanner Gate - species are not hardcoded (#87374)

Removes hardcoded checks in the proc to a list, where available to scan
species can be added.

The available list has NOT been changed, the screenshot only shows
var-edited scanner gate.

![image](https://github.com/user-attachments/assets/89cf8920-108d-48b8-88ee-2a0faaa2aa2c)

Less hardcoded stuff is good. More support for future species when
added.

:cl:
refactor: Species detection on scanner gate has been updated from
hardcoded list to a variable. You can VarEdit using species' id
/:cl:

* Automatic changelog for PR #87374 [ci skip]

* [no gbp] gets rid of manucrafter item problems by just not putting things in it (#87462)

https://github.com/user-attachments/assets/25fd12e9-4c84-4ac3-a4c5-0f77cab74ba3

my really poor code kept shitting itself so lets just make it avoid any
of the issues by just not doing it

:cl:
qol: manufacturing assembling machines instead craft using the resources
on top of them, they are no longer block movement and have new sprites
/:cl:

* Automatic changelog for PR #87462 [ci skip]

* Adds a new NFC component for circuits (#87286)

TODO:
- [x] Main circuit code
- [x] BCI compatibility
- [x] Limiting range in some way(not intended as a private cross map
coms system)

This adds a new NFC component, its similair to NTNet component with the
distinction it will only be received by the shell's circuit you target.
Allowing more targeted networking for things like remotes

I'd love suggestions for a max range, if any. Because im not really
sure. Maby circuit has to be in vision for it to work?

gif is too big so here is direct link to discord embedded gif showing it
off

https://cdn.discordapp.com/attachments/326831214667235328/1296810437295341649/example.gif?ex=6713a455&is=671252d5&hm=f87b282ac71c318eac03b4a53e03ebcfd91e5a0b0a1e9165beb3f87318b96809&

<img
src="https://cdn.discordapp.com/attachments/326831214667235328/1296810437295341649/example.gif?ex=6713a455&is=671252d5&hm=f87b282ac71c318eac03b4a53e03ebcfd91e5a0b0a1e9165beb3f87318b96809&">

NTNet is powerfull for making networked circuits, but I lack a good way
to create a direct "remote" with complex data.
I want to make a circuit that makes it easier to controll other circuits
in a less strictly coupeld way and this seems like a clean way to make
those

:cl:
add: A new cirucit component allows NFC communications
/:cl:

---------

Co-authored-by: Ben10Omintrix <[email protected]>

* Automatic changelog for PR #87286 [ci skip]

* General maintenance for RTD (#87556)

**1. Code Improvements**
 - Removed unused var `delay` from borg RTD
 - Converted `energy_factor` for borg RTD into a define to save memory
- Makes `ranged` var have full control over the RTD instead of having
the borg RTD do its own proximity checks
 - Autodoc for proc `try_tilling`
- Don't update the UI if invalid values are passed into
`handle_ui_act()`

:cl:
code: Improved code for RTD
/:cl:

* Automatic changelog for PR #87556 [ci skip]

* Adds more damages, flavors and podpeople to recovered crew (#87491)

Adds four new causes of death:
- Shot with bullet
- Shot with laser
- Poisoned with venom (deals a lot of brute and gives histamine)

As well as code to simulate any reagent or projectile to damage a body

Adds more flavors! Small chance to spawn with a prosthethic limb

Adds a 56% chance to roll a double cause of death, and a 24% to lose
both limbs and organs (can't both roll)
Also removed the chance for having all organs and limbs

Adds podperson as a rare spawn (1/18) (they come with a plant analyzer
so you can actually scan them)

More causes of death means medical can practice/perform different
skillsets in fixing bodies! Poisonings and bullet removals especially
could not happen, so I'm happy to have those covered now.

Prosthethic limb is always fun to see, and gives the reviver the choice
to either replace or keep it.

A small chance to spawn as a podperson could help sell the illusion of
experience and having different stations. Podpersons also offer a
different playstyle without being too gamey, probably being the only
existing non-roundstart species I am comfortable adding to this. They're
also not really seen outside botany (and I'll be honest I don't ever see
them anymore), so having them fill different jobs over the station helps
make the station flowerful (even if it is somewhat rare)

![image](https://github.com/user-attachments/assets/d4d7e22b-a420-40a9-8d74-aa01dc47996e)

:cl:
add: Added more causes of death to recovered crew
add: Added double death causes to recovered crew, and even meaner space
vultures!
add: Adds a small chance to roll quirks on recovered crew
add: Adds a small chance to spawn as a podperson to recovered crew
fix: Fixes a harddel caused by quirks never being cleared on delete
/:cl:

* Automatic changelog for PR #87491 [ci skip]

* Purges active turfs from The Derelict (#87627)

![изображение](https://github.com/user-attachments/assets/e321cb01-912a-4dba-8d50-2de62584abff)
haven't tested it in game but i believe i've got them all from the looks
of it

less air to breathe

:cl:
fix: fixed active turfs on The Derelict
/:cl:

i'm not up to the chase whether such a map edit is a fix or a map tag

* Automatic changelog for PR #87627 [ci skip]

* drones can no longer speak pirate (#87440)

closes https://github.com/tgstation/tgstation/issues/87405
:cl: grungussuss
fix: drones can no longer speak pirate if they have a pirate hat on
/:cl:

* Automatic changelog for PR #87440 [ci skip]

* makes the ai detector tool display the vague area the AI is looking at (#87457)

https://github.com/user-attachments/assets/3c2b2fd4-6c82-4986-bb90-d9954d48e671

https://github.com/user-attachments/assets/3583f6e6-cc53-4162-a611-5870b938d11e

the ai detector multitool has been slightly redone and the HUD silently
removed by #68301 is back
no action button, use inhand to toggle hud

RMB to show static

fixes #87414
also this feature was silently removed

:cl:
fix: brings back the AI detector HUD that was silently removed by a PR 3
years ago, use inhand to toggle hud or use RMB to see static temporarily
/:cl:

* Automatic changelog for PR #87457 [ci skip]

* Fixes sec and command comms not working (#87656)

The sound runtimed and prevented radio's from working because it treated
a string as a sound datum

:cl:
fix: Fixes sec and command coms not working correctly
/:cl:

Admins can hotfix this on live by mass editing radio_noise to 0

* Automatic changelog for PR #87656 [ci skip]

* Fixes moon heretic ascension not working as intended (#87631)

* Automatic changelog for PR #87631 [ci skip]

* water turf improvements. (#87636)

Atomized from an upcoming PR.
The water turfs are now simulated better. It now doesn't wet you if
you're floating or flying above it or otherwise not immersed (via
immerse element). It also applies a status effect to living mobs that
keeps them wet over time even if they don't move around.

The watery_tile element is nice but it's quite myopic in the way it's
simulated.

:cl:
fix: You won't get wet while floating or flying on water. Otherwise,
water will keep you wet even if you stay still.
/:cl:

* Automatic changelog for PR #87636 [ci skip]

* Fixes some broken borg omnitools (#87643)

- Fixes #87641

TODO
- [x] Write unit tests for bog omnitool wrench
- [x] Write unit tests for bog omnitool screwdriver
- [x] Write unit tests for bog omnitool wirecutter
- [x] Write unit tests for borg omnitool crowbar
- [x] Write unit tests for borg omnitool multiool

Tests for engiborg omnitool for now

:cl:
fix: some broken borg omni tools should work again
/:cl:

* Automatic changelog for PR #87643 [ci skip]

* Fix glass floor crowbar interactions (#87630)

Fixes #87569

This allows glass floor tiles (reinforced/plasma/etc.) to be crowbarred.
It also removes deprecated code from #66301 that was used as a band aid
to handle openspace multi-z interactions with glass floors.

Glass floors were permanently preventing people from placing or fixing
wires/pipes/etc since the tile could not be crowbarred.

:cl:
fix: Glass floors can now be crowbarred.
code: Removed deprecated crowbar code for tiles
/:cl:

* Automatic changelog for PR #87630 [ci skip]

* Refactor gene combination recipes to not use strings (#87629)

Rewrite `/datum/generecipe` to have two variables, `input_one` and
`input_two` that hold the type path of the ingredients for the recipe,
instead of it being a semicolon-separated string.

Better code, will catch invalid type paths in recipes at compile-time.

No player-facing changes

* UI sounds try 2 (#87523)

completes
https://github.com/orgs/tgstation/projects/19/views/1?pane=issue&itemId=84390831

https://github.com/user-attachments/assets/da9536df-71af-4222-b0df-0ae5bdee96a8

It sounds cool!
:cl: grungussuss
sound: The lobby menu now click sounds.
/:cl:

* Automatic changelog for PR #87523 [ci skip]

* material fishing rods and material fish. (#87108)

The reason why I refactored material effects code is here.

In this PR I add the possibility of printing fishing rods from different
materials at your nearest autolathe, though it doesn't stop there. Each
material has different values for (so far) fishing difficulty, casting
range, experience gained and foremost the chance of catching fish made
of the same material as the fishing rod used to catch it. The material
the fish is made from can either increase or decrease the weight of the
fish.

In a many cases, material rods can also have other small effects on
fishing, like removing the chances of duds even without a bait, or
attracting shiny-loving fish, or passing some other fish trait checks.
In a few cases, these fishing rods can have bigger, more impactful
effects on fishing. That said, here's a list of more or less the effects
(skipping very minor ones and those inherited from being items) and
modifiers across materials so far, a few things will be added later:

<details>
<summary>Huge-ass list (out-fucking-dated now that I've added 5 more
variables 😢)</summary>

- Iron: +30% fish weight, 8% chance of material fish
- Glass: +20% fish weight, +5 difficulty, +20% experience, 8% chance of
material fish
- Silver: +35% fish weight, -5 difficulty, - 15% experience, 15.5%
chance of material fish
- Gold: +50% fish weight, -10 difficulty, -25% experience, 20.5%
material fish, +1 casting range
- Diamond: +40% fish weight, -13 difficulty, -30% experience, 23%
material fish, -1 casting range
- Uranium: +100% fish weight, 8% material fish
- Plasma: +30% fish weight, 8% material fish
- Bluespace: +30% fish weight, -5 difficulty, -15% experience, 23%
material fish, +5 range
- - 33% chance of selecting a reward from (almost) any fishing source
instead of the current one.
- Bananium +20 difficulty, +60% experience, 38% material fish, +3
casting range
- - 20% chance of fishing either a clownfish, lubefish, donkfish,
soulfish or skin crab instead
- Titanium: +20% fish weight, -5 difficulty, 8% material fish, +1 range
- Runite: +50% fish weight, -18 difficulty, +220% experience, 38%
material fish, +1 range
- Plastic: -20% fish weight -5 difficulty, +20% experience, 8% material
fish, +2 range
- Wood: -50% fish weight, +8 difficulty, +30% experience, 13% material
fish, -1 range
- Adamantine: +60% fish weight, -23 difficulty, -40% experience, 33%
material fish, +1 range
- Mythril: +40% fish weight, -25 difficulty, -50% experience, 43%
material fish, +2 range
- Hot Ice: -10% fish weight, -10 diffiulty, -10% experience, 18%
material fish, +1 range
- Metal Hydrogen: -40% weight, -15 difficulty, -20% experience, 23%
material, +4 range
- Sand: +20% weight, +30 difficulty, -80% experience, 8% material, -2
range
- Sandstone: +20% weight, +25 difficulty, -70% experience, 8% material,
-2 range
- Snow: -20% weight, +25 difficulty, -70% experience, 8% material, -2
range
- Runed Metal: +50% weight, -12 diff, -10% experience, 38% material
- Bronze, +40% weight, 13% material
- Paper: -60% weight, +40 diff, -90% experience, 8% material, -2 range
- - Has a 20% chance of fishing up an aggressive stickman
- Cardboard: Same as above, but without the stickmen
- Bone: +5% weight, +15 diff, -15% experience, 8% material, -2 range
- - 20% chance of fishing up either a unmarine bonemass, a unmarine
mastodon, a hostile skellie or rarely a single-use spectral instrument
that can turn you or someone else into a spooky scary skeleton.
- Bamboo: -50% weight, -4 difficulty, +30% experience, 13% material, -1
range
- Zeukerite: 20% weight, -16 difficulty, -10% experience, 28% material
- Plasteel: +75% weihgt, +5 difficulty, +10% experience, 8% material
- Plastitanium: +10% weight, -10 difficulty, -5% experience, 8%
material, +1 range
- Plasmaglass: +20% weight, +5 difficulty, +30% experience, 8% material
- Titanium Glass: +25% weight, -5 difficulty, +25% experience 8%
material
- Plastitanium Glass: +20% weight, +50% experience, 8% material
- Alien Alloy: +140% weight, -25 difficulty, 33% material, -40%
experience, +2 range
- Hauntium (good luck using it): +40% weight, -30 difficulty, +50%
experience, 38% material, +2 range
- Meat: +13 difficulty, -20% experience, 28% material, -2 range
- Pizza: -10% weight, +13 difficulty, -20% experience, 28% material, -2
range

</details>

I think it's nice to have two features interact with each other (fishing
and materials), and it adds a layer of interesting uses to some
materials.

:cl:
add: Autolathes can now print fishing rods of different materials, which
can increase or decrease fishing difficulty, casting range, and
experience gained, and can have other interesting effects.
/:cl:

* Automatic changelog for PR #87108 [ci skip]

* Minor fishing nits and tweaks (#87638)

* Automatic changelog for PR #87638 [ci skip]

* [NO GBP] fixes spurious unit test fail for prosthetic limbs (#87653)

Yeah I really don't get why this happens. I went through it on local,
and it goes
try delete human > delete quirks > delete the nullspaced original limb
from proslimb > delete the rest of limbs
Still the unit test fails because it's getting qdelled twice? It doesn't
qdel twice on local so idfk

This is caused by morgue bodies with proslimbs being spawned and
deleted, so uh just stop morgue bodies from getting proslimbs. idk man
its a bad fix but it'll get our unit tests running again

Fixes https://github.com/tgstation/tgstation/issues/87663
Fixes https://github.com/tgstation/tgstation/issues/87669

* Fixes space kidnap being instant (#87654)

Yeah apparently the voidwalker kidnap was completely instant

https://github.com/tgstation/tgstation/pull/86031 replaced the callback
that checked for being incapacitated with the number 1

:cl:
fix: Fixes voidwalker having an instant kidnap
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Automatic changelog for PR #87654 [ci skip]

* resprites 9 hair styles (#87644)

* Automatic changelog for PR #87644 [ci skip]

* Guncode Agony 3: Projectile code cleanup (#87628)

Massive cleanup/pseudo-refactor of projectile and projectile-adjacent
code. One letter variables, weird logic, some runtimes, all of that.
Atomized in a separate PR from the actual refactor so we don't end up
with a 5k line PR.

Makes the code possible to work with before I nuke pixel_move and kevinz
units:tm:

* Automatic changelog for PR #87628 [ci skip]

* Adds flatboxes, boxes that fit beneath tiles (#87229)

This box type has a maximum of 3 slots, and can be hidden beneath
floortiles. It can be crafted by *jump emoting ontop of a regular, empty
box.

https://github.com/user-attachments/assets/d7ab52ec-2b47-4ab4-b2af-05ce00b0ae4b

https://github.com/user-attachments/assets/30dd5de3-1f4d-4cb4-8d9c-8625379e76bf

Hiding beneath tiles is a fun, yet not broken method of stowing
contraband. The toiletbasin or moisturizer trap remains a better option,
so I want to open up the space between the floorboards as quick
alternative for stowing or making cache drop-offs.

Smuggle satchels have a lot more going for them than their ability to be
hidden beneath tiles, so I don't feel like this is intruding on their
turf.

* Automatic changelog for PR #87229 [ci skip]

* Removes SiliConnect from borg PDAs, expands their self-status app instead (#87350)

- SiliConnect is no longer a default app for cyborgs.
- RoboTact, the borg self-status app now has a Network tab, which lists
other borgs' status.
- The Network tab will only list borgs connected to the same AI as you.
If your AI goes down, you lose connection to other borgs' status info.
- Your AI is also listed on the Network tab, with their own status in a
very binary good/bad form.
- Syndicate borgs are able to see other syndicate borgs on the Network
list, even though they lack an AI.
SiliConnect was recently added to the default borg apps list. But it has
a lot of features that borgs can't actually use, and so feels rather
messy. It was added with the goal of letting borgs see eachother's
status, and so I've ported that functionality into RoboTact. SiliConnect
is no longer a default borg app (though it *can* be installed if a borg
and human really want it to be).

Showing the AI's status is certainly a balance choice. But it's not
really that much of a secret when the AI dying already adjusts the
monitors across the station to a BSOD image. On the flip side, we get to
shut off borg status sharing when the AI goes offline, which is neat.
:cl:
del: SiliConnect, a tool meant for Roboticists, is no longer included by
default on borgs.
add: RoboTact, the borg self-status app, now shows the status of other
borgs synced to the same AI. Syndicate borgs can likewise see
eachother's status, even without an AI.
balance: RoboTact also shows their synced AI's very basic status of
functional or offline.
/:cl:
UI Pictures:

![image](https://github.com/user-attachments/assets/1a5b6cbc-daa6-43a7-8ff6-95119d84eb83)
Dead AI:

![image](https://github.com/user-attachments/assets/f9f1668c-ae5b-4867-8634-590b573a968c)
Syndicate borgs do not see station borg status, but can see eachother's

![image](https://github.com/user-attachments/assets/085a0745-4c18-4a45-bcb4-ef93fa5b799f)

~~Drafting because I need to do edge-case testing, and the AI box isn't
quite functioning correctly when the borg has no AI master.~~

* Automatic changelog for PR #87350 [ci skip]

* Fix rare runtime if there are no available organs to take (#87671)

This PR fixes a rare runtime error, regarding lost crew members, that
occurs when there are no organs in the `organs_we_can_take` list, which
causes an exception due to an attempt to `pick()` from an empty list.

The less exceptions exists, the better.
:cl:
fix: fixed a rare runtime with lost crew having no organs
/:cl:

---------

Co-authored-by: SmArtKar <[email protected]>

* Automatic changelog for PR #87671 [ci skip]

* Fixing transparency for materials. (#87498)

* Automatic changelog for PR #87498 [ci skip]

* mining resonator clips to belt slot (#87471)

mining resonator clips to belt slot.

its a belt-like toolcore itempunk. a total oversight it never did. it
fits in mining belts!!

:cl:
qol: mining resonator clips to belt slot
/:cl:

* Automatic changelog for PR #87471 [ci skip]

* Sound mixer attempt 2 (#87529)

![image](https://github.com/user-attachments/assets/131caab0-5495-4f28-b9e0-46ce4ebc7b40)
gives players more control over how loud they want certain sounds to be
:cl: grungussuss
sound: the volume that ship ambience, ambience, radio noise and
announcements play at can now be tweaked in preferences, check your
preferences!
/:cl:

* Automatic changelog for PR #87529 [ci skip]

* Removes S (#87687)

Removes S

Removes S

:cl:
code: Removes S
/:cl:

* Automatic changelog for PR #87687 [ci skip]

* Ah yes, the taste of datum/reagent/copper (#87699)

Delicious

* Alien operating tables now have a 20% surgery speed bonus (#87665)

Alien operating tables (made by making a table frame with alien alloy,
then adding silver) now have a 20% surgery speed bonus, as compared to
normal operating tables.

I also refactored the `get_location_modifier` proc, it now uses a
"typecache" rather than a else-if locate tower.

Medbaymaxxing with alien tech is nice - and this somewhat cursed code is
still better than the else-if locate tower, honestly.

:cl:
balance: Alien operating tables now have a 20% surgery speed bonus.
refactor: Refactored how table/bed surgery speed modifiers are
calculated, so it's hopefully more efficient now.
/:cl:

---------

Co-authored-by: Kapu1178 <[email protected]>

* Automatic changelog for PR #87665 [ci skip]

* Moves MSO's owned files out to be shared between him/Scriptis and him/me (#87668)

He plans on moving away from the codebase so I am taking soft ownership
over the MC in order to prevent gigafuckshit.

Similar story for config/db/build stuff, the hosts need to be pinged
about db/config/build changes and now there's two of them

* Moves MSO's owned files out to be shared between him/Scriptis and him/me (#87668)

He plans on moving away from the codebase so I am taking soft ownership
over the MC in order to prevent gigafuckshit.

Similar story for config/db/build stuff, the hosts need to be pinged
about db/config/build changes and now there's two of them

whoops

Moves MSO's owned files out to be shared between him/Scriptis and him/me (#87668)

He plans on moving away from the codebase so I am taking soft ownership
over the MC in order to prevent gigafuckshit.

Similar story for config/db/build stuff, the hosts need to be pinged
about db/config/build changes and now there's two of them

* Fix broken spin dismount (#87642)

Fixes bug introduced by
https://github.com/tgstation/tgstation/pull/84306 that broke borg
throwing
Bugfix. Lets borgs throw again
:cl:
fix: Fix borg throwing not working
/:cl:

* Automatic changelog for PR #87642 [ci skip]

* Changes remark logging to reflect whether an applied remark is secret or not (#87522)

Adds a ternary statement to the logging for adding admin remarks (notes,
messages, watchlists) to specify if a note is secret.
No change to actual administrative functions, just the logging.

Accurately reflects the note added!

:cl:
admin: When a secret note is applied, it'll now be logged as a secret
note (instead of appearing like a regular note).
/:cl:

* Automatic changelog for PR #87522 [ci skip]

* [tgui] Bumps node & yarn versions (#87700)

- Node 22 LTS and Yarn 4.5.1
- Removes windows 7 compatibility support
- Set to install for you on the next build
- CI also bumped to Node LTS
Oil change for TGUI. Up to date and fresh!

N/A

* the mod skin applier actually works now + honkeratives waddle (#87704)

* Automatic changelog for PR #87704 [ci skip]

* restores corrupt audio files [no gbp] (#87711)

2 sound files got corrupted by optivorbis
uncorrupt is good
:cl: grungussuss
fix: duct tape will now properly make sounds
/:cl:

* Automatic changelog for PR #87711 [ci skip]

* [NO GBP] Post-Material rods fixes and tweaks (#87696)

This PR follows the material fishing rod PR, which had a small issue in
which I had forgotten to add a return value to a proc and thus fish
caught from material fishing rods would never be made of that specific
material.

I've tweaked some values for materials and fishing rods, I felt some of
the "better" rods were a bit too fast, and some downright let you skip
the fishing minigame with zero to one level. Also, I felt that, despite
making fishing easier kinda, the area of the bait slider still felt a
tad too small, so I've introduced a height multiplier for the slider so
that it could cover more space, depending on the strength multiplier of
the material (for once, not a new niche variable). This doesn't apply to
fishing rods with strength multiplier less than 1 because they don't
need to be made worse.

About fish and cargo, I've added a soft cap (a 0.86 exponent) to fish
selling price. It shouldn't affect the wide majority of fish you catch,
however it does affect those that sell for over 6k per unit, which are
few and rare. However, I've been pinged about some ludicrous
money-making done by selling fish alone on a downstream server, likely
from growing the big fish to be up twice their initial size and weight
(capped to 2.5 the average value for the species), however, new features
may push things a little further, so it's better to be safe than sorry.
Screenshot below: They said it took them about a hour, however take it
with a pinch of salt since it's by no mean easy and fast money by
Terry's standards:

I've also halved the selling price of jumpercable fish, which, despite
requiring an emag or some sort luck, could easily be farmed in due time
with little to no maintenance, being self-reproducing and hunger-less,
and each of them would sell for 6k. conversely, I've increased the price
of the unmarine mastodon a little because of the soft-cap, since it's
very rare.

* Automatic changelog for PR #87696 [ci skip]

* Adds new station map Nebulastation (#84826)

Adds a completely brand new multi-z station map "NebulaStation".
New areas and few exclusive map shuttles (ferry, mining, arrival, evac,
cargo)
Few example screenshots
![StrongDMM-2024-07-19 20 53
15](https://github.com/user-attachments/assets/e895bae6-f3e7-4ee4-9779-96266e943db0)
![StrongDMM-2024-07-19 20 51
41](https://github.com/user-attachments/assets/43bb1443-1c2c-4c4e-8f0c-b743866c84fa)

![image](https://github.com/tgstation/tgstation/assets/143291881/4bdfa1d7-ba84-408b-a4ff-9fa0dd3a2783)

![image](https://github.com/tgstation/tgstation/assets/143291881/6caa71cc-92f2-49ff-b05c-76e091b5b05b)

![image](https://github.com/tgstation/tgstation/assets/143291881/c64ac863-9287-4827-9168-ea9a55f66a9e)

![image](https://github.com/tgstation/tgstation/assets/143291881/dff66e71-89a0-4da7-94f5-07774c239047)
And more...

New maps are always good for the game

:cl: Kiko
add: Nebulastation, new station map
/:cl:

* Automatic changelog for PR #84826 [ci skip]

* Add's support for population limits on keep_me_secure component (Loneop event balance change) (#87657)

This is used to set the nuke disk's safety factor from applying on very
low pop player counts, as it's unlikely the disk can be secured.

I don't believe this precludes the event from being randomly chosen, but
it makes sure it wont be a certainty on very low pop when the disk
hasn't been secured from lack of players

Just to clarify this applies only at 9 population or lower.

On very very low pop, the disk is often unsecured, and.. more
importantly, a lone op is likely to have a very high chance of easily
succeeding as there is not enough crew to upkeep a watch on the relevant
areas.

This event is fun on higher populations, and needing to protect the disk
makes sense, but on very lowpop, I think it doens't quite work as
designed, as instead it just means a lot of low pop rounds will end due
to a loneop spawning if there's any ghosts about at all.
:cl: oranges
balance: Nuclear disk no longer needs to be secured at sub 10 population
/:cl:

* Automatic changelog for PR #87657 [ci skip]

* Fixed sect nullrod bonus component (#87692)

Fixed sect nullrod bonus component by adding comsig_sect_change to
signals registered.

This didn't work if you picked nullrod before sect. Now it does!

bug

:cl:
fix: Fixed sect nullrod bonus component
/:cl:

* Automatic changelog for PR #87692 [ci skip]

* Moves destructive analyser attack chain to base item interact level (#87690)

- Fixes #87658
- Fixes #84583

Use combat mode to get the desired item interaction (like planting c4 on
the machine) cause all items are accepted now

:cl:
fix: destructive analyser accepts all items without interacting with
them (no planting c4 on the machine or radio jammer jamming the
machine). Use combat mode to get these default behaviour's instead
/:cl:

* Automatic changelog for PR #87690 [ci skip]

* You can succumb quietly by right-clicking the UI (#87683)

fixes #87662
Right-clicking the succumb alert will let you succumb without a message
also fixes a few bugs

![fucked-up-looking-dog-spookston](https://github.com/user-attachments/assets/9715ecfe-977f-41e1-b45b-050a111c6b54)

:cl:
qol: you can now right-click the succumb action button to succumb
silently
qol: the succumb inputs have a few more titles to choose from now
fix: the succumb text input now shows the actual correct number of
characters you can say
fix: attempting to cancel a succumb will no longer kill you
spellcheck: the text for failing to succumb is now spanned
/:cl:

* Automatic changelog for PR #87683 [ci skip]

* You can repair clothing that has storage with cloth again (#87691)

- Fixes #85993

:cl:
fix: You can repair clothing that has storage with cloth again
/:cl:

* Automatic changelog for PR #87691 [ci skip]

* Renames characters in dark matter singulo description (#87673)

The dark matter singularity and its toy have long quotes in the examine
text. This doesn't change the quotes themselves, but changes the name of
the characters in the attributions. "Miles O'Brien" is now "Tenshin
Nakamura", that surname implies a connection to the ingame faction
Nakamura Engineering. "Jadzia Dax" if now "Huey Knorr" because it sounds
a bit like 'who knows'.
These were changed in #75133 to remove references to player names. I
don't disagree with the reasons for changing them, but the replacements
were half-assed. Just names of characters from Star Trek. Muh immersion.
:cl:
spellcheck: Changed names in the description of dark matter
singularities and their toy version.
/:cl:

* Automatic changelog for PR #87673 [ci skip]

* Fixes RHD storage interaction (#87679)

- Fixes #87568

Not just for RLD but for RCD, RPLD & RTD. They don't touch storage atoms

:cl:
fix: RLD won't try to put lights on storage objects like bags & such
/:cl:

* Automatic changelog for PR #87679 [ci skip]

* Prevent vape from being emptied if the cap isn't open (#87652)

If the cap isn't open, reagents won't be emptied
It makes no sense and you constantly empty reagents by accident, this
will hopefully prevent this
:cl:
fix: e-cigarettes can't be emptied if the cap isn't open
/:cl:

Co-authored-by: Ben10Omintrix <[email protected]>

* Automatic changelog for PR #87652 [ci skip]

* RD modsuit advanced reagent scanner fix (#87710)

Makes the Research Director's modsuit advanced reagent scanner actually
detect reagents, also changes descriptions to mention its explosion
sensor and research scanner.
Currently the research director's modsuit has an unremovable advanced
reagent scanner module that does not scan reagents and can't be replaced
with a working reagent scanner, this fixes that.

It is also good to mention its explosion sensor ability and research
scanner as it lets research directors know what the module does.
:cl:
fix: Made the Research Director's Modsuit's Advanced Reagent Scanner
scan reagents.
spellcheck: Changes description of the Advanced Reagent Scanner to
mention its explosion sensor and research scanner.
/:cl:

* Automatic changelog for PR #87710 [ci skip]

* [no gbp] fixes supposedly really bad sorter exploit (#87728)

fixes #87722

go figure

* Automatic changelog for PR #87728 [ci skip]

* Fixes level 1 singularity eating containment field and being able to move (#87717)

Fixes: https://github.com/tgstation/tgstation/issues/87716

Fixes this

https://github.com/user-attachments/assets/d31c5f97-1576-404b-8427-a4089446fd5f
Its a fix pr
:cl: Rengan
fix: fixes singularity eating containtment field
/:cl:

* Automatic changelog for PR #87717 [ci skip]

* Chef groceries more clearly say who they are for. (#87732)

Chef produces is 35% cheaper to order from the chef console
If chef is forced to order from the cargo because botany isn't growing
what they need they deserve a discount, also this is inline with mining
and bitrunning discounts.

:cl:oranges
balance: Chef produce orders are cheaper
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Automatic changelog for PR #87732 [ci skip]

* Fixes for borg attack chain interactions (#87705)

- Fixes #87612 by returning the correct define when
`COMSIG_ATOM_ATTACK_ROBOT_SECONDARY` blocks the attack
- Borg `UnarmedAttack()` now checks for modifiers (i.e. are we left or
right clicking) this allows `redirect_attack_hand_from_turf` (which
calls `UnarmedAttack()`) component to call either `attack_robot()` or
`attack_robot_secondary()` correctly so you can now turn the fire alarm
on & off by attacking its mounted wall as a borg
- Borg's `attack_robot_secondary()` now checks for `interaction_range`
just like `attack_robot()` so you can't do shinanigens like resetting a
fire alarm/turning on or off the conveyer switch from an infinite
distance like through camera's & such
- Removed Borgs `RangedAttack()` proc which called `attack_robot()`
because it violates `interaction_range` for the proc

:cl:
fix: No runtime when clicking on a fire alarm's mounted wall as a borg
fix: You can turn the fire alarm on & off (And not just on) as a borg
via left & right click on its mounted wall
fix: certain secondary interactions of items & borgs now respect the
borgs interaction range
/:cl:

* Automatic changelog for PR #87705 [ci skip]

* [NO GBP] You can perform fish scanning experiments again (plus other stuff) (#87721)

I've accidentally assigned the FISH_FLAG_UPDATING_SIZE_AND_WEIGHT flag
the same value of FISH_FLAG_EXPERIMENT_SCANNABLE, that's why I couldn't
perform it while playing the game.

Also, this PR fixes the broken interaction of catch'n'release, as well
as a typo in the name of material fishing rods.

I broke a couple things.

* Automatic changelog for PR #87721 [ci skip]

* Increase gas mask filter effectiveness. (#87712)

This PR increases the effectiveness of gas mask filters against small
amounts of gas. It increases the filtering efficiency of filters, makes
them remove more gas from inhaled air, and makes their degradation more
dependent on if they are in use or not. When a mask filter isnt being
used it will degrade much slower and when it is being used it will
degrade much faster. Testing: all this changes are some magic numbers
used in a single short math equation. If this breaks something, I might
as well quit TG anyways.
Currently, gas mask filters are nigh redundant, and have no noticable
effect on any gasses except for those with incredibly low minimum effect
concentrations. For example, against n2o or plasma, a filter will make a
room temp air mixture with an extra 2 mol of n2o/plasma added, which
would normally inhale as a partial pressure of ~3.83, to a partial
pressure of ~3.78. Note that the effect PP thresholds of n2o are 0.05
for giggling, 1 for n2o alert, and 4 for sedation. Increasing the
effectiveness of filters will not prevent you from being affected by
full-on floods, but they will reduce the impact of small concentrations
of dangerous gasses. If a chemist boils off plasma accidentally, the
pharmacy can end up poisoning people inside it for 10 minutes or longer,
without even triggering air alarms. Making it possible to prepare for
and work against minor leaks, spills, and the after-effects of cleaned
up gas floods will reduce the frequency of "firelock hell" scenarios.
:cl:
balance: Gas mask filters are now more effective, and their degradation
is more heavily influenced by what gasses they are filtering.
/:cl:

* Automatic changelog for PR #87712 [ci skip]

* Remove `cyborg_tool`  & improves omnitool tests (#87709)

- Removes `cyborg_tool` test, which partially helps with the below
issues as it is superseded by `datum/unit_test/omnitool`
    -  #87708
   - #87713
- Removes borg transform animation from omnitool test which causes
random runtimes. Also restructures it for future omnitool tests which
will come in future PR's

:cl:
 N/A
/:cl:

* Scared of the Spooky Circus Man? Wear a tinfoil hat! Mental resistance protects from some heretic abilities (mostly Moon effects) (#87702)

Several effects that target the mind now are blocked by the presence of
MAGIC_RESISTANCE_MIND, which is only found (currently) on tinfoil hats.

Affected abilities and items include;

Moon Path Powers (like, pretty much every single thing the path gets)
Eldritch Paintings
Mask of Madness (oh, and normal magic resistance also applies
because...it's fucking magic?)
Mindswap
Terrorize (the nightmare ability)
Abyssal Gaze (completely unused, used to be a rune golem spell I think)

Tinfoil hats horribly debilitate you and render you pretty terrible at
actually validhunting. But it is exceptionally funny for someone to
willingly subject themselves to wearing it in fear of being attacked by
a Moon heretic. And then get blinded and stunned by their mere presence
because they are now scared of heretic's tools, alongside most of the
station's various roles.

Since this doesn't stop a heretic from A) hitting you with the ol'
Mansus Grasp the old fashioned way and B) stabbing the shit out of you
after this, I don't anticipate it being TOO effective when it doesn't
stop the heretic's bread and butter abilities, as well as causing
automatic debuffs just from them being on the screen.

If heretics giving out a phobia targeting them specifically wasn't
tolerable, then someone willingly subjecting themselves to that same
effect to stop a moon heretic is maybe unlikely, or just really funny
and sandboxy.

Oh, and it makes them scared of, like, security and command and stuff so
this is NOT a viable option for those roles at all unless they really
want to suffer constantly for it. But maybe that's funnier as a result.

:cl:
balance: Some mind altering effects of heretics (predominantly Path of
the Moon heretic abilities) are nullified using...a tinfoil hat. But
awareness of the mind altering psychotropic eldritch brain wizards has
spread amongst the conspiracy theorists. They could be anyone! Even YOU.
balance: Some additional spells (mindswap, nightmare's terrorize) are
also blocked.
/:cl:

* Automatic changelog for PR #87702 [ci skip]

* [tools] Fixes tgui build warning (#87724)

<!-- 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. -->

This might very well only happen to me, there were no issues, but
running `bin\tgui-build` rather than
<kbd>CTRL</kbd><kbd>SHIFT</kbd><kbd>B</kbd> would error. The default
windows powershell (5.1 for me) is the culprit. This routes it to an
[upgraded
powershell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.4),
if you have it installed.

![image](https://github.com/user-attachments/assets/b1ccc00b-d109-4e11-9459-942a765a7d45)

<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

I hate red letters in my terminal >:(
<!-- 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. -->

Dev only

* putting [tm only] in your title will now apply the label automatically (#87703)

title
automation is nice, makes it more visible to players that a pr is tm
only
nothing player facing

* Removes glass from status & newscaster frame's custom materials (#87689)

- Fixes #87574

It's custom materials which is used in deconstruction did not match its
crafting recipe requirements

:cl:
fix: status & newscaster frame won't drop extra glass sheets upon
deconstruction
/:cl:

* Automatic changelog for PR #87689 [ci skip]

* Fix NTNRC duplicate message jank and new message header, makes program headers actually update when there's none. (#87610)

As before, more fiddling with NTNRC, more bugs.
This time, the same user sending the same message within the same second
would cause this message to spawn a new copy each time the channel was
opened, until the UI was closed and re-opened.
Looking into it, this seemed to be because we would set the `Box`'s
`key` value to the message contents:

<https://github.com/tgstation/tgstation/blob/b0d71024c0c10a0d276ea3119894c27ca7adf0d0/tgui/packages/tgui/interfaces/NtosNetChat.jsx#L156>
Which isn't actually unique.

To fix this, we instead make each channel keep track of an incrementing
`id` number to assign to each message, and convert the `messages` list
to an associative list using those numerical ids stringified.
We don't just use the list index as a key, as we later may want to
target specific messages, so a consistent unique key is important.

This fixes our primary issue.

In the process of making the rest of the code account for this, I
noticed that the NTNRC program header that's supposed to show new
messages in the active channel when the program is idle didn't actually
work.
Just at all.
So I rewrote the entire thing, and it now tracks the last read message's
id rather than the full message, and sets this when you actually
background the program. The rest still runs on process tick, where it
updates the header if there's a new message with a different id on top.

Finally, the header part of the UI wasn't actually updating if there
were no headers, so now it forwards a lack of headers change as well.

Reduces more NTNRC jank.
Good if shit like, actually works.
:cl:
fix: NTNRC no longer endlessly duplicates messages with duplicate
contents upon switching channels.
fix: The new message header you get when NTNRC runs in the background
actually works.
fix: NtOS header actually updates if there are no program headers.
/:cl:

---------

Co-authored-by: SmArtKar <[email protected]>

* Automatic changelog for PR #87610 [ci skip]

* Goliath Tendril Hammer is now resistant to acid and fire (#87697)

The goliath hammer is now resistant to fire and acid.

Being an extension of your body, this should probably not burn off until
the entire limb does.

Closes #87566.
:cl:
fix: Goliath Tendril Hammer arm (from the gene brain) is now resistant
to being burned off by acid/fire.
/:cl:

* Automatic changelog for PR #87697 [ci skip]

* Moves material contai…
* fixes borgs linking to ais in mechs cards and modsuits (#87737)

* Automatic changelog for PR #87737 [ci skip]

* Living Flesh limbs won't try to grab underfloor objects (#87736)

There were checks in living limbs that were checking the wrong thing, at
least one of which was introduced by a feature change in a PR I merged
but didn't notice.
Notably:
- We were checking if the person with the limb was invisible, not the
thing they were trying to touch.
- We were checking if the person with the limb was anchored, not the
thing they were trying to grab.

Now your arm will no longer reach out and grab wires that are under the
floor.

Additionally to this:
- I made all of the output say "Your left arm" or "Your left leg"
instead of "Your flesh left leg" because it sounded stupid.
- I removed an unused argument from `can_be_pulled` because it was
confusing me when I looked at the proc.
- I reworded some of the user feedback messages because "the thing
pretending to be your left arm feels funny" just isn't very evocative.

The diff is long because I reversed the order of arm/leg operations
because the leg block is much smaller :clueless:

Fixes bug.
I like it more.

:cl:
fix: Living Limbs no longer try to grab things that are under the floor.
spellcheck: Living Limb feedback messages now don't redundantly specify
that they are flesh arms.
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87736 [ci skip]

* Fix oil slime making vegetable oil instead of corn oil (#87730)

Fixes bug caused by
https://github.com/tgstation/tgstation/commit/b1c5e5e0f6a1edf58b49b238af7d3094da76c69b#diff-aedb81aab354c31e90007bd0ad4e8babf347ac7d6003c3b01da14021ff5a10f4R387

The wiki and code prior both say oil slimes should make corn oil, but
they currently make vegetable oil. Since corn oil is needed for
nitroglycerin and oil slimes are explosive-centric, it makes sense they
should be making corn oil.
Fixes: #81036
:cl:
fix: Fixes oil slimes making vegetable oil instead of corn oil
/:cl:

* Automatic changelog for PR #87730 [ci skip]

* Moved the big slapping parts from the misc section to weapons (#87637)

* fix blade ascension not giving you the ring of blades (#87744)

fix blade ascension not giving you the ring of blades
Bugfix
Closes https://github.com/tgstation/tgstation/issues/87344
Closes https://github.com/tgstation/tgstation/issues/85635
:cl:
fix: fix blade ascension not giving you the ring of blades
/:cl:

* Automatic changelog for PR #87744 [ci skip]

* Fixed fishing rod duping with poly belts and shapeshift spells. (#87706)

It turns out the "shapeshifted from spell" status ejects everything
inside the shapeshifted mob when removed. That's been causing a little
issue with the fishing rod from the profound_fisher component, which a
few mobs have. This PR fixes just that.

![immagine](https://github.com/user-attachments/assets/b664ffa6-567f-4332-b7dc-a5d2badb43d3)

![immagine](https://github.com/user-attachments/assets/4c453f91-2852-40c0-8f54-c5d66f28fdb1)

:cl:
fix: Fixed fishing rod duping with poly belts and shapeshift spells.
spellcheck: Fixed a small typo when examining fishing rods.
/:cl:

* Automatic changelog for PR #87706 [ci skip]

* Chem master validates selected container in UI (#87780)

* Automatic changelog for PR #87780 [ci skip]

* fixes missing icons in abductor console (#87759)

grabs the icon for the item correctly. also typescripts the interface
because blessed type safety would've prevented it being missing in the
first place. and clears some random deprecations

pretty icons 👍
loading icons 👎

![image](https://github.com/user-attachments/assets/ec524a52-fff5-4c67-b3fb-88fbfd5988af)

:cl:
fix: the abductor console now correctly loads images of equipment
/:cl:

closes #87565

* Add unit test tag to your PR title (#87757)

You can now add `unit test` anywhere in your PR title to specify if you
are adding/modifying unit tests for your code. It's worth 6 GBP (It
Always has and wasn't changed here)

For when you want some extra GBP for your unit tests that sometimes go
un-noticed by maintainer's when reviewing large changes. It will
encourage people to write unit tests so they can get the extra points

N/A
/:cl:

* Add `TRAIT_EVIL` to admin tooling (#87749)

Let's admins add/remove `TRAIT_EVIL` from mobs.

Useful for debugging.

:cl:
admin: Admins can now add/remove TRAIT_EVIL from mobs.
/:cl:

* Use native BYOND `isnan` and `isinf` for math defines (#87748)

`// Remove these once we have Byond implementation.`

Well guess what we have now?

Altho sadly we still lack a native `isfinite`, so we still use a define
for that.

Native BYOND impls have better performance usually, due to them
compiling down to instructions, avoiding proc overhead.

No user-facing changes.

* [NO GBP] Fixes wings and jetpacks sometimes preventing you from opening doors (#87741)

I hate this timeline. What title says, makes jetpacks and wings allow
you to bump into things you're moving into.

This feels awful and requires you to stop pressing movement keys for a
moment before resuming movement to get out of the "stuck" state

:cl:
fix: Fixed wings and jetpacks sometimes preventing you from opening
doors
/:cl:

* Drinking Glass sprite updates (#87756)

This was meant to be just fixing the missing pixel... then it turned to
redoing all the glasses in all the basic sprites so they'd match... then
redoing sprites that were outdated...
And THEN I realized that drinking glasses can be using the same
auto-sprite system beakers have and oh man it's spiraling.

As for the (hopefully) full list of changes:
- Removes all `glass_[color]` icons. Any drink that fell under these
will now use the fill_icon and their reagent color. As such, a lot of
reagent colors have been tweaked for readability/realism/lemons don't
have red juice what the hell man
(Some colors shown are outdated. It is very annoying to tweak these. I
don't know how to in-game, if I even can. Relaunching several times is
painful.)

![image](https://github.com/user-attachments/assets/7edae6b4-13ec-4d1e-827c-fb7da1b2013a)

- Resprites the base `glass_empty`; now it is very visibly empty. The
overlay being slightly transparent actually works pretty well with this.
(Old / New)

![image](https://github.com/user-attachments/assets/e262c510-93d7-44b0-b4cc-cf498362b05b)

- Full resprite of Curaçao (now it's actually its beautiful blue instead
of gray)

![image](https://github.com/user-attachments/assets/3447c226-8f78-4fa3-bb55-4cb223a7e991)

- Minor resprites Beer/Green Beer/Iced Beer/Ale
(Yes, Beer/Green Beer have little animated bubbles)

![dreamseeker_Z1U2qBxRlx](https://github.com/user-attachments/assets/43903b24-2053-4571-b17b-f3ad80fa4150)

![image](https://github.com/user-attachments/assets/25327706-3207-4d3f-9ea8-ead29d3a0db0)
- Minor resprite of Monkey Energy
(It's animated now too but otherwise about the same sprite)

![dreammaker_lSqopANAXX](https://github.com/user-attachments/assets/7f797080-ae16-42c3-a1f1-e769506e31fd)

- Minor resprites to Pina Olivida, Banana Juice, Lemon Juice, Carrot
Juice - mostly just color tweaks so that they look more believable and
the banana juice is less green
- Fixes small nits in the sodas so that they are all consistent
Sprite maintenance and (hopefully) improvements - we've got a lot of
drinks in the Bars and the base foundation of that whole system deserves
a bit of love as well
:cl:
image: redid most basic drinking glass sprites, and moved several drinks
to use the same color system as beakers. Please bug report any incorrect
colored drinks or juices!
/:cl:

* Update README.md of unit tests folder for VS code support (#87758)

Turns out using dream daemon isn't the only way to run unit tests.

You can do it from VS code itself & can see the output of each test in
the fancy chat window.
![Screenshot
(448)](https://github.com/user-attachments/assets/33aca6b5-3414-4560-9cc4-dd90fe80e2d1)

With the added advantage of using your debugger to step through each
line of code this should be the preferred way so I've updated the read
me file of the unit tests folder to specify that

You can also check the runtimes log in your game to see the output of
each unit test

:cl:
N/A
/:cl:

* Automatic changelog for PR #87759 [ci skip]

* Automatic changelog for PR #87749 [ci skip]

* Automatic changelog for PR #87741 [ci skip]

* Automatic changelog for PR #87756 [ci skip]

* the glove sounds are now only on some gloves [no gbp] (#87489)

mistakes were made
god it's horrible, not only is it happening way too often because it's
every glove, but also it doesn't fit any other glove other than insuls
really, maybe nitriles but gosh just get rid of it for now, maybe later
I will make a better sound for other gloves.
:cl: grungussuss
sound: only insulated,nitrile, enhanced retrieval, latex, boxing,
improvised gripper gloves have an equip sound
/:cl:

* Automatic changelog for PR #87489 [ci skip]

* hunting behaviors no longer share a cooldown (#87670)

all hunting subtrees were sharing a singular cooldown. this makes it so
each subtree has its own cooldown

fixes hunting subtree cooldowns affecting other subtrees.

:cl:
/:cl:

* [NO GBP] Renames mob/camera to mob/eye and makes everything follow suit (#87684)

Clarity and consistency regarding DM's systems.
Internally, `eye` is used for anything that controls the client's view.

![image](https://github.com/user-attachments/assets/7d1291e1-7a6a-4736-a14b-97834e89846f)
How `eye` is used in DM is consistent with how we use the term, so I
figured this would add clarity.

Being named mob/camera also makes it unclear exactly what it's doing.
The name implies that it would function similar to how mob/camera/ai_eye
does, but most of the time it's only used as... an eye.

My ulterior reason for this PR is that I want to clean up
mob/camera/ai_eye and it's subtypes after this.

:cl:
server: mob/camera has been renamed to mob/eye, which may break
downstreams
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Automatic changelog for PR #87684 [ci skip]

* Clarify locations for getting started in README (#87739)

This is a `README.md` update to more efficiently point potential
contributors to the appropriate documentation for configuring their dev
environment.

It is typically best practice to make it easy for developers to quickly
contribute a change to a project by making things as clear as possible.

* [NO-GBP] Fixes a minor fuckup that made cigarettes contain up to double the intended amount of nicotine (#87733)

See name, also fixes them not being injectable

Sorry guys, this is my fault.

Fixes a bug that was brought upon us when I thought 500 cigarettes was
funny

:cl:
fix: Cigarettes can be injected again and have the right amount of
nicotine
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Automatic changelog for PR #87733 [ci skip]

* Teleporting while buckled to something will take you with it (#87725)

closes #35872 (this bug is 6+ years old)

`/proc/do_teleport(...)` now has extra checks for atoms with buckled
mobs attempting to pass through it, assuring that they also pass through
with the vehicle

`/atom/movable/proc/is_buckle_possible(...)` will skip density checks if
the bucklable and the target share the same tile, because at that point
it doesn't really matter (it also interfered with density checks when
teleporting)

![fucked-up-dog-geeble](https://github.com/user-attachments/assets/6ef814c2-d8f2-48fc-82a3-98517bf6a492)

:cl:
fix: Teleporting while buckled to something now works as expected
fix: You can buckle to anything if you share the same tile (cause at
that point it doesn't matter if there's a wall, right?)
/:cl:

* Automatic changelog for PR #87725 [ci skip]

* you can loosen straps of a sec helmet to show hair (#87533)

title
gives more customization options for security players
:cl: grungussuss
qol: security helmet straps can be loosened to show hair
/:cl:

---------

Co-authored-by: Fikou <[email protected]>

* Automatic changelog for PR #87533 [ci skip]

* Fix issues when creating Discord Discussions on PRs with dummy long titles (#87768)

* Blob/Blob minion say logging (#87767)

The `/datum/component/blob_minion` component now properly logs spoken
messages before relaying them.

![image](https://github.com/user-attachments/assets/f89b3e61-379c-4851-a571-fc31bf8a1ddc)

Radical.

Closes #86904.
:cl: Rhials
fix: Blob Overmind/Minion/Blobbernaut speech is now logged. Beware.
/:cl:

* Automatic changelog for PR #87767 [ci skip]

* SM sliver dusts fishing hooks (#87784)

- Fixes #87514

:cl:
fix: Super matter sliver dusts fishing hooks & cannot be picked up by
them
/:cl:

* Automatic changelog for PR #87784 [ci skip]

* Abstract nullrods cannot burn/melt. Monk staff fixes (#87775)

* Automatic changelog for PR #87775 [ci skip]

* Losing malf no longer wipes nonmalf abilities (#87762)

Just a small thing I noticed whilst looking into some other malf related
stuff.

Unrelated, the silicon code is so horrible but I can't be bothered
rewriting it. So have this small fix

Fixes a small nuisance nobody even noticed. Probably

:cl:
fix: Losing malf no longer wipes nonmalf AI abilities
/:cl:

* Automatic changelog for PR #87762 [ci skip]

* Refactors for grinding & juicing (#87735)

- Grinding & juicing are now recursive operations (grind the item & all
its contents) not just for reagent grinder but also for mortar pedestal
& plumbing grinder so you can get all them juices
- Fixes #87719. Plumbing grinder won't destroy slime extracts after
grinding
- Mortar pedestal now grinds & juices more items since it correctly
checks if that object has more reagents to offer
- Reagent grinder, plumbing grinder & mortar pedestal now respect
`blend_requirements()` so you get consistent behaviour across them

:cl:
fix: mortar pedestal now grinds & juices items that previously could not
be processed
fix: plumbing grinder won't destroy slime extracts after grinding
refactor: grinding & juicing code has been refactored overall. Please
report bugs on github
/:cl:

* Automatic changelog for PR #87735 [ci skip]

* Chem dispenser droplets colored (#87576)

![image](https://github.com/user-attachments/assets/35492711-3ba9-4c5e-b013-ef8d39ac633f)

Made the droplets show the reagent color (or PH color if ph display is
enabled)

Better UX when you know your colors.

:cl:
qol: chem dispenser droplets in UI colored as their reagent
/:cl:

* Automatic changelog for PR #87576 [ci skip]

* prevents sending messages to newscaster channels without permission (#87783)

* Automatic changelog for PR #87783 [ci skip]

* Improves code for recycling circuits in component printer (#87787)

* Automatic changelog for PR #87787 [ci skip]

* Fixes the randomizer fishing portal not working as intended. (#87794)

* Automatic changelog for PR #87794 [ci skip]

* Tiny spellcheck (#87801)

* Automatic changelog for PR #87801 [ci skip]

* fixes some rand() loops (#87795)

i in rand(x,y) doesnt work

i in 1 to rand(x,y) does

bugggs

ghommie stole my gbp

:cl:
fix: fixed random dm modifiers & some life-like reagent reactions
/:cl:

* evidence bag sounds (#87790)

completes
https://github.com/orgs/tgstation/projects/19/views/1?pane=issue&itemId=84398285

https://github.com/user-attachments/assets/5f4e92eb-3d65-4da7-ba76-24d30f1eddc3
immershun
:cl: grungussuss
sound: evidence bags have more sounds now
/:cl:

* Automatic changelog for PR #87795 [ci skip]

* Automatic changelog for PR #87790 [ci skip]

* Writing sound (#87772)

completes
https://github.com/orgs/tgstation/projects/19/views/1?pane=issue&itemId=85235611

https://github.com/user-attachments/assets/087c88bd-9ddd-4e57-972d-fe66084d19bc
maybe now someone will notice you wrote something
:cl: grungussuss
sound: writing something now produces sound
/:cl:

* Automatic changelog for PR #87772 [ci skip]

* AI-controlled mobs can now cross open space if they won't fall. (#87821)

* Automatic changelog for PR #87821 [ci skip]

* Lowers the price of the energy sword. (#87738)

E-sword uplink price has been lowered from 8 to 6 TC.

It's no secret that the E-sword has fallen out of flavor over the last
year or so.

Its purchase rate is so low it doesn't even show on the MRP chart.

https://superset.moth.fans/superset/dashboard/4/?native_filters_key=gJDhU4Ug60OlqSjRelTSMUWlVWVPGZRQr16s6OFMNXTqcUaVO8-O0yCX1cjJJK9y

Part of the reason I feel is that on its own the weapon doesn't really
offer much.

It's a decent melee weapon but not as good as the powerfist, which is
less expensive, hits twice as hard, stuns, and is unblockable.

It offers decent protection, but again a shield is so easy to steal
these days you might just save your tc for something better

And when you really think about it, his bigger sister, the desword, is
only 5 TC more expensive and offers way more damage and block chance.

(Also you can get one for free if you space explore for a few minutes,
but that's besides the point).

Now I'm not saying the energy sword is a bad weapon, it being 1handed
opens you up for a few nasty combos.

But for what it represents, i.e a shield with some decent damage
strapped on top , it could probably receive a small discount.

I don't really have any strong attachments to the weapon or anything, so
If you can provide a good reason why this is a bad idea by all means.

:cl:
balance: The Uplink cost of the energy sword has been lowered from 8 to
6 TC.
/:cl:

* Automatic changelog for PR #87738 [ci skip]

* More accessibility options and pref menu (#87549)

- added accessibility tab in prefs menu
- put darkened flashes option into this menu
- added `darken screen shake` pref, for motion sick people, darkens your
screen when experiencing screen shake.

<details>
OUTDATED

![image_2024-10-29_023038297](https://github.com/user-attachments/assets/db9cfe23-74f7-413a-8d84-496384b3d3bf)

</details>

https://github.com/user-attachments/assets/e3fd43ad-a65c-47dc-add2-6c93048e8b61

makes it easier for people with disabilities to play the game.
:cl: grungussuss
qol: you can now mitigate motion sickness from screen shake by enabling
"darken screen shake" in preferences
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Automatic changelog for PR #87549 [ci skip]

* Makes dust animation look less 2006 (#87435)

This was inspired by an effect I saw on Paradise but I sprited my own

https://github.com/user-attachments/assets/2130053c-a6ea-48e6-8b62-4c08563fd154

(Todo, make the skeleton appearing less jank)

1. Looks less 2006.
2. The dust sprite will reflect the mob being dusted, since it's
literally just Your Sprite. Your clothes, species, etc.
3. All species and all mob types now animate being dusted - from corgi
to xenos, from borgs to lizards -, and we can even reuse this effect for
items being dusted if we so desire

:cl: Melbert
image: The animation for being dusted now takes into account your
sprite, rather than being a normal nude spaceman
/:cl:

* Automatic changelog for PR #87435 [ci skip]

* Datumizes heretic paths (#87432)

Replaces the previous system of manually linking each and every heretic
knowledge with eachother with an elegant solution to the problem,
additionally places further restrictions on heretic tree, ensuring that
noone can singlehandledly make it really hard to understand.

There were 2 holes in the heretic knowledge tree, which I removed with
temporary dummy linkings (till someone adds something there, or I may
yet add something there in this PR, so if someone wants to add something
there better do it quickly). The dummy linkings are necessary as the new
system is rigid in this regard in that it does not allow for these
connections to *not* exist, the heretic tree is a directional graph and
while it handles one or mroe connections, it cannot handle having no
connections by design.

* Automatic changelog for PR #87432 [ci skip]

* [NO GBP] Fixed special DNA infusions from squids and pufferfish (#87818)

that. And also a runtime error.

Fixing what I've broken.

:cl:
fix: Fixed special DNA infusions from squids and pufferfish.
/:cl:

* Automatic changelog for PR #87818 [ci skip]

* Omen component no longer tries to crush you from inside of a vent (#87847)

* Automatic changelog for PR #87847 [ci skip]

* Makes goliath cloak not override digitigrade legs (#87840)

* Automatic changelog for PR #87840 [ci skip]

* Tramstation Barber Disposals Fix (#87835)

* Automatic changelog for PR #87835 [ci skip]

* Xenobio console puts sucked up slimes into stasis (#87832)

Closes #87715
Also fixes potential issues that slimes could cause by atmos processing
while inside

:cl:
fix: Xenobio console puts sucked up slimes into stasis so they no longer
split up inside
/:cl:

* Automatic changelog for PR #87832 [ci skip]

* Gives Runtimestation a bounty pad and event spawnpoints (#87839)

* Automatic changelog for PR #87839 [ci skip]

* Fix auto-reel fishing line item catching logic (#87855)

So while working on a frog tongue concept, I realized the auto-reel
fishing line was... always hitting you with the items you reeled in.
Looking into the code, that seemed weird, because it seemed like it had
an entire segment of code dedicated to avoiding just that: catching
those items with your offhand.
But apparently this code never actually ran, because it registers
`COMSIG_ATOM_PREHITBY` on the reeled in item, which only gets sent to
the atom that gets hit.

So in this pr we just shift it to using `COMSIG_MOVABLE_PRE_IMPACT`
instead, which is the equivalent signal sent to the thrown movable.
This fixes our issues.

Fixes the auto-reel fishing line always smacking you in the face with
whatever you reel in, rather than going through its "catch this" checks.
:cl:
fix: Fixed auto-reel fishing line item catching logic.
/:cl:

* Automatic changelog for PR #87855 [ci skip]

* [NO GBP] Fixes hat stabilizer ignoring clothing worn_y_offset (#87851)

Closes #87487

![image](https://github.com/user-attachments/assets/d7b501e2-b026-4254-bbd5-919a3e18259b)

:cl:
fix: Fixed hat stabilizer ignoring clothing worn_y_offset
/:cl:

* Automatic changelog for PR #87851 [ci skip]

* Fixes four unlinked APCs in DeltaStation maint rooms (#87850)

Fixes unlinked APCs in the `Electronic Marketing Den`, `Abandoned
Garden`, `Security Maintenance`, and `Private Investigator's Office`

Specifically:
<details><summary>Moves the wires for the Den to the current
APC...</summary>

![image](https://github.com/user-attachments/assets/ee754ebe-2f3c-41ea-856b-ec21af079f22)

</details>

<details><summary>Moves the APC for the Garden to the current Wires
(yes, it's the inverse, but it's much nicer beside the air alarm AND
removes it from being hidden by the poster...)</summary>

![image](https://github.com/user-attachments/assets/bc07084b-4599-4b81-bc2a-ec6d8b250627)

</details>

<details><summary>Adds the 1 missing wire to the APC in Sec Maints
(under the table)</summary>

![image](https://github.com/user-attachments/assets/f2a0024c-061d-4db2-9bff-a7d025814ff7)

</details>

<details><summary>Moves the wires to the APC in the PI Office</summary>

![image](https://github.com/user-attachments/assets/3e9513a2-0fc7-45fa-84b2-31c994ff2e0e)

</details>

These are, theoretically, meant to be wired to the station. They all
have single lines of wires in the rooms going to walls. Just not to the
walls with the APCs.
:cl:
fix: (DeltaStation) Fixed unwired APCs in the Electronic Marketing Den,
Abandoned Garden, Security Maintenance, and Private Investigator's
Office
/:cl:

* Automatic changelog for PR #87850 [ci skip]

* Fix holymelon armor not inheriting magic resistance (#87849)

- Fixes #87621

Holymelon armor had a missing antimagic flag that did not stop magic
attacks. The holymelon plant gene has
`MAGIC_RESISTANCE|MAGIC_RESISTANCE_HOLY` but the armor only had
`MAGIC_RESISTANCE_HOLY` so this is just making it consistent.

Consistency.

:cl:
fix: Fix holymelon armor not inheriting magic resistance
/:cl:

* Automatic changelog for PR #87849 [ci skip]

* Add screentips to hat stabilizer component (#87845)

Initially this was added in:

- #87285

And then removed in:

- #87305

Not sure if @SmArtKar was aware that screentips can be added to
components.

Consistency.

:cl:
fix: Fix missing screentips plasmaman helmets and MOD suit hat
stabilizer helmets.
/:cl:

---------

Co-authored-by: MrMelbert <[email protected]>

* Fix airlock shell for circuit camera component (#87837)

This PR resolves an issue relating to circuit cameras and airlock
shells.

Fixes #84650

This is a bug fix, and makes airlock shells actually usable.

:cl:
fix: Airlock shells are properly assigned circuit cameras modules
/:cl:

* Automatic changelog for PR #87845 [ci skip]

* fixes tgui DraggableControl not focusing on first click (#87834)

closes #86536

we were attempting to focus a hidden element, which appears to just fail
silently. if we wait until it should be rendered in the dom, it'll be
focused correctly

i'm not 100% just throwing a `setTimeout(() => {}, 0)` is appropriate -
this is a scary class component that i can't throw a useEffect at. it
works, though

i'll pr it over to tgui-core ifff this is all good

clicky buttons clicky click working click

:cl:
fix: certain tgui inputs no longer require 2 clicks to open
/:cl:

* Automatic changelog for PR #87837 [ci skip]

* Labeller now tells you how many labels are left. (#87836)

New `examine` proc for hand labellers so you can tell how many labels
are left on examine.

It's vital to know how many more times I can ~~spam labels~~ organize my
paperwork.

:cl: Goat
qol: You can now examine labelers to tell how many more labels it has.
/:cl:

* Automatic changelog for PR #87834 [ci skip]

* Automatic changelog for PR #87836 [ci skip]

* Examine fixes and documentation touchup (#87838)

Fixes and stuff I noticed from when I was porting examine stuff from
here to TGMC.
- Uses regex so that if you include `and ` in the tooltip of an examine
tag but not main text, `examine()` will not think you said `and ` in the
main text
- The morbid tooltip doesn't try to use HTML for the tooltip now
- Updates documentation for `examine_tags`

Here's my cat.

![image](https://github.com/user-attachments/assets/080235e2-2c73-4875-a22e-acb808496541)
:cl:
fix: examine tags now use regex for checking if a tag has "and" in it
spellcheck: the tooltip for the morbid examine tag doesn't try to use
html anymore
/:cl:

* Automatic changelog for PR #87838 [ci skip]

* Makes curator inventory update when buttons are pressed. (#87841)

Adds two calls for `update_static_data_for_all_viewers()` so the UI will
update when a player switches pages or removes an item in the inventory
screen.
Responsive UI good. When I click button UI should respond accordingly.
fix #82733
:cl: Goat
qol: Curator console's inventory screen will now update when you change
pages or remove items.
/:cl:

* Automatic changelog for PR #87841 [ci skip]

* Deletes misleading infinite define, adds defines for clearer status effect durations (#87842)

1. Deletes `INFINTIE`, it is misleading and not at all a big number and
causes bugs
2. Adds `STATUS_EFFECT_PERMANENT` and `STATUS_EFFECT_NO_TICK` to make it
clearer what infinite status effects are

* Make roundstart book publishing on bird possible. (#87843)

Adds a book binder to the birdshot library in the spot the book scanner
used to be and moves the scanner right next to the library computer on
the desk.

Curator shouldn't have to wait for research to be able to put books into
the archive.
:cl: Goat
map: The library's scanner on Birdshot is now close enough to connect to
the computer and was also given a book binder.
/:cl:

* Automatic changelog for PR #87843 [ci skip]

* Fixes basic mob performance impact created by the factorio PR (#87852)

the peak change. This was done to exclusively snowflake chasms but in
reality *did not do anything whatsoever* because chasms override
CanAllowThrough to always return TRUE anyways. Yesh.

is_blocked_turf is relatively hot in basic mob AI so this was really
bad.

:cl:
fix: Fixed basic mob performance impact created by the factorio PR
/:cl:

* Fix broken link to issue manager guide (#87846)

There was a malformed markdown link in the contributor guide.

Nothing player facing.

:cl:
fix: Fix broken link to issue manager guide in Github contributor guide
/:cl:

* Automatic changelog for PR #87852 [ci skip]

* Automatic changelog for PR #87846 [ci skip]

* Fixing a small, crucial, fish reproduction issue. (#87825)

This PR should fix fishes not being able to reproduce with others of the
same type, simply because the list of **types** to check was
instantiated with the first key being src instead of src.type.

I should really make a second fish reproduction unit test that doesn't
involve crossbreeding, self-reproducing and sterile fishes, all of which
are edges cases that are actually working unlike the main thing.

Yeah, sorry if this took so long to get to this. I hadn't really notice
it until now. I have indeed played with the aquarium a few times but
with other goals in mind, and when I had seen that fish could indeed
reproduce with different yet compatible fish (e.g. clownfish and
lubefish, goldfish and three-eyed goldfish) I thought the feature was
working as intended. I was simply wrong.

* Automatic changelog for PR #87825 [ci skip]

* [NO GBP] Fixes some item interactions (#87856)

- Fixes #87854

:cl:
fix: flatpacker accepts circuitboards with left click
fix: rcd can deconstruct tables
fix: you can open panels of destructive analyzers with screwdriver right
click. Use right click or combat mode with items for default
interactions
fix: flatpacker & machines with local storage can be RPED'd again
/:cl:

* Automatic changelog for PR #87856 [ci skip]

* [NO GBP] Fixed fish still being hungry when fed if in aquarium with the 'growth and reproduction' option disabled (#87827)

See title.

That's a bug.

* Automatic changelog for PR #87827 [ci skip]

* [NO GBP] Fixed bombing non-turfs fishing spots not spawning loot correctly. (#87819)

Found another small issue with fishing, this one pertaining explosive
fishing spawning the loot inside objects.
Also bottled messages should no longer spawn from explosions. They're
one-time events and shouldn't be spent by explosive fishing, which can
quickly empty the pool of stored messages and photos.

Fixing issues with the feature.

* Automatic changelog for PR #87819 [ci skip]

* Fixes borg to ai connection (#87773)

fixes #87651 which was caused by #87597
it is
:cl:

fix: fixed roundstart borgs not being synced to ai

/:cl:

* Automatic changelog for PR #87773 [ci skip]

* fix clicking other ghosts' screen alerts (#87830)

closes #87572

usr does not necessarily mean owner for screen alerts, thanks Observe

shouldn't be teleporting other ghosts around

* Automatic changelog for PR #87830 [ci skip]

* Holosign creators interact with storage correctly (#87824)

- Fixes #87539

Racks, bags & basically anything that stores stuff will interact with
all holosign creator's correctly

:cl:
fix: holosign creators interact with storage items correctly
/:cl:

* Automatic changelog for PR #87824 [ci skip]

* small slime ai tweaks (#87871)

* party popper doesn't make sloshing sounds (#87872)

closes https://github.com/tgstation/tgstation/issues/87330
:cl: grungussuss
sound: party popper no longer makes reagent sloshing sounds
/:cl:

* Automatic changelog for PR #87872 [ci skip]

* Fix infinite metal holodeck exploit (#87806)

This stops people from using chairs to create free metal. It was
possible to pick up a chair or place it down and it would lose it's
hologram status since a new object is created.

Now anyone that attempts to place down or pick up a chair will have it
vanish.

No more free metal.

:cl:
fix: Fix using chairs in holodeck to create infinite metal
/:cl:

* Automatic changelog for PR #87806 [ci skip]

* Rewrites the code in beserk.dm (#87820)

Does as the title says, cleans up the code a bit and modernizes it, as
well as making it call its parent.
It's more readable this way, plus it properly calls its parent proc now.

* Automatic changelog for PR #87820 [ci skip]

* Fixes stingbangs using wrong sprites (#87812)

Stingbangs (and much rarer rotfrags) used their disassembled sprite
until primed this entire time. Yeah.

Handle appearing out of nowhere looks very jarring

* Fixes detective action palette being invisible (#87814)

Closes #87809

* Automatic changelog for PR #87812 [ci skip]

* Automatic changelog for PR #87814 [ci skip]

* Reduces required crayons for crayon bounty (#87848)

This reduces the bounty size of the crayon civilian pack.

Instead of 24 crayons, it only needs 8. Same payout, less quantity.

Crayons are not easily produced or scavenged. Even if a map contains 2
full crayon packs in the Library, it still isn't enough to fulfill a
single bounty for crayons.

This new deal will get you a full payout with a full pack plus one
_mystery crayon._ Go rob the clown or detective or something if you need
the last one. Get that money!

* Automatic changelog for PR #87848 [ci skip]

* Include the map vote config file (#87867)

Includes the map_vote.txt config file created in
https://github.com/tgstation/tgstation/pull/86788 so that it gets read
when the server starts.

Reads whatever value is set in the config file.

* Automatic changelog for PR #87867 [ci skip]

* meatlovers flatbread no longer tastes raw (#87853)

fixes #87844

* Automatic changelog for PR #87853 [ci skip]

* fixes meteor heart AI runtimes (#87813)

fixes a few runtimes with the meteor heart's sleep behavior, mostly
because it was trying to add an element to a blackboard key list,
eventhough said key wasnt a list.

fixes meteor heart AI runtimes

* [no gbp] fixes manulathe and manucrafter interaction (#87880)

fixes #87874
also fixes an unintentional sprite change

:cl:
fix: the manucrafter now properly receives resources, also fixed
unintentional manulathe sprite change
/:cl:

* Disable hauntium teleporting during unit tests (#87878)

Disable the idle teleporting behavior in
`/datum/idle_behavior/idle_ghost_item` during unit testing.

I've seen two instances now of the mapping nearstation tests failing
because something made of hauntium spawned near the edge of the station
and then teleported outside into space. This will fix that flaky
behavior.

No player-facing changes.

* Chem Dispenser icon shadow [NO GBP] (#87868)

![image](https://github.com/user-attachments/assets/5220c8ce-5f75-4a4a-944b-66ac5f458c53)

Didn't manage to processs the last suggestion under
https://github.com/tgstation/tgstation/pull/87576 by @Iamgoofball
Even though it was so obvious and brilliant idea.

Now no need to have a separate highlight color for buttons on PH color
mode.

Nice UI

:cl:
qol: Chem dispenser UI droplets now have a shadow to not blend with the
background
/:cl:

* increases volume of shoes pickup sound (#87875)

closes https://github.com/tgstation/tgstation/issues/87538
:cl: grungussuss
sound: shoes pickup volume is louder now
/:cl:

* Automatic changelog for PR #87868 [ci skip]

* Automatic changelog for PR #87875 [ci skip]

* Improves code for remote materials (#87870)

- Moves remote materials attack chain to item interaction level. Another
step in moving away from `attackby()`
- Fixes #40070. Though the timer subsystem maybe affected by FPS, round
start trigger is always done after everything is set up which is now
used by remote materials

:cl:
fix: silo connection on some machines won't time out when changing FPS
settings
code: improved attack chain code for silo connection
/:cl:

* Automatic changelog for PR #87870 [ci skip]

* spellecheck: existence not existance (#87862)

existance doesnt exist so i changed it to existence

existance dosent exist

:cl:
spellcheck: spellecheck: existence not existance
/:cl:

* Automatic changelog for PR #87862 [ci skip]

* Fixes scanner gates saying both bypass and detection lines when malfunctioning (#87816)

Closes #87542
:cl:
fix: Fixed scanner gates saying both bypass and detection lines when
malfunctioning
/:cl:

* Automatic changelog for PR #87816 [ci skip]

* [no gbp] fixes seedling ai getting stuck (#87885)

fixes seedling AI's getting stuck when trying to refill water from water
tanks that have been emptied!

fixes seedling ai getting stuck

:cl:
fix: fixes seedling ai getting stuck when trying to refill water from
emptied water tanks
/:cl:

* Automatic changelog for PR #87885 [ci skip]

* fixes parriable projectiles runtimes (#87899)

* Admin deleting a mob now ghostizes it beforehand, preventing a runtime (#87887)

* Automatic changelog for PR #87887 [ci skip]

* Refactors some more UIs to use DmIcon (#87886)

Upstream port of
https://github.com/Monkestation/Monkestation2.0/pull/4215

This changes some tgui UIs that used icon2base64/getFlatIcon to display
items to instead use DmIcon, just passing the icon/icon_state instead.

To be specific: the ORM, the "ore container", and the order console
(produce, mining, and bitrunning vendors)

<details>
<summary><h3>UI screenshots / proof of testing</h3></summary>

![2024-11-12 (1731458275) ~
dreamseeker](https://github.com/user-attachments/assets/b1c60677-b117-4c23-8076-8b5072130d55)
![2024-11-12 (1731458281) ~
dreamseeker](https://github.com/user-attachments/assets/b64d3c2f-4754-4e5d-991a-2df69d86eb2a)
![2024-11-12 (1731458286) ~
dreamseeker](https://github.com/user-attachments/assets/287d8db1-8acb-4c4c-a2f0-66227a477d19)
![2024-11-12 (1731458388) ~
dreamseeker](https://github.com/user-attachments/assets/f69f5d51-5cdc-442c-971d-a4abedd4a3d2)
![2024-11-12 (1731458391) ~
dreamseeker](https://github.com/user-attachments/assets/53a95e88-ac41-4f97-a409-10b19d130376)

</details>

gfi bad, especially in ui(_static)_data, dmicon good.

:cl:
refactor: The ORM, "ore container", and order console UIs (produce,
mining, bitrunner vendors) now load icons in a more efficient manner.
/:cl:

* Tenacious element no longer prints a wear off message when added outside of soft crit and properly removes its effects when detached (#87901)

Wear off message is only printed if the user actually had the effect
active before, and speed modifier is removed alongside the element.

:cl:
fix: Fixed tenacity effect printing its messages when it shouldn't be,
and not removing its' effects when it should've.
/:cl:

* Fixes Mech Spin Sounds (#87900)

Mechs were playing spin sound effects (_on top_ of normal step sounds)
every time they'd take a step while strafing. Additionally, they would
not play the spin sound effect when actually turning. This fixes both.
Bugfix. Also, cleaner sounding mechs.
:cl:
Fix: Fixed the triggering of mech turn sound effects
/:cl:

* sandstone blocks have the correct sound now (#87896)

closes https://github.com/tgstation/tgstation/issues/87611
it makes sense
:cl: grungussuss
sound: sandstone blocks have the correct sound now
/:cl:

* Lower singularity beacon cost and time  (#87891)

This lowers the cost of the singularity beacon to 4 crystals. Right now
this item never gets used due to the high cost and niche requirements.
According to the statistics it is not even on the list:

https://superset.moth.fans/superset/dashboard/4/?native_filters_key=Gd84-_rrITStPTkyo7BlqnE5aYcHmofhLU2GjWEiWdqY-ZaK2WVxrq1eG6qS0bNa

Before we had the SM, the singularity engine was often sabotaged with
this beacon since all you needed to do was disable an emitter or cut a
wire and the singularity would break loose. It was a relatively easy
process.

The criteria to achieve a singularity now is very difficult. You either
have to overload the SM and fight off anyone who tries to fix it OR
purchase one from cargo and make a pipe setup to feed it a ton of gas.
All the crew has to do to prevent it, is leak the gas by opening an
airlock, breach the floor, or a window. If there is an AI or cyborgs,
your job is now ten times harder.

Then you have another problem. The beacon requires powered wires and if
the SMESs gets destroyed by the singularity it's useless. This is
guaranteed to happen if using the SM from engineering since it's so
close to the SMESs. So now you have to either rely on solars or a
generator to power the device.

The hassle of spending 10 crystals on this item is not worth it. Too
many things can go wrong and it would be a waste of points.

This item never gets picked due to it's high cost and difficulty. By
lowering the cost, it would make it a more reasonable choice.

:cl:
balance: Lower the telecrystal price of the singularity beacon from 10
to 4 and reduce the timer to 20 minutes before it can be purchased.
/:cl:

* Speeds up part of the dust animation by a frame or so, makes remains/dust spawn aligned lower on the tile (#87858)

- Speeds up the torso part of the dust animation by a few frames, as was
requested but I didn't do before merge
- Makes remains/dust spawn from being dusted towards the bottom of the
tile

Videos (take before the remains/dust change)

https://github.com/user-attachments/assets/7e9fe699-a44b-49d5-a4d0-2304e09283d5

https://github.com/user-attachments/assets/7b426340-5d3d-49fa-91f1-52b2fc3a560c

Should help sell the effect a bit more

:cl: Melbert
image: Speeds up some frames of the dust animation slightly
image: Dust/remains spawned after being dusted are now aligned towards
the bottom of the tile
image: Bigger mobs now produce bigger piles of ash
image: Plasmamen now dust into plasma bones
/:cl:

* Fixes cigarettes not fitting in gas masks (#87817)

You couldn't put cigarettes in gas masks due to a check for if the masks
mouth is covered
You can now filter the air through your cigarettes as was intended.
:cl:
fix: removes the gas mask check for if the gas mask mouth is covered.
Now it only checks for filters and other cigs
/:cl:

* Automatic changelog for PR #87886 [ci skip]

* Automatic changelog for PR #87901 [ci skip]

* Automatic changelog for PR #87896 [ci skip]

* Automatic changelog for PR #87891 [ci skip]

* Automatic changelog for PR #87858 [ci skip]

* Automatic changelog for PR #87817 [ci skip]

* Fixes SSWardrobe stealing a camera from the camera app when on a dummy, causing a harddel (#87903)

See name, if a dummy somehow gets hold of a PDA with the camera app
installed (This just so happens to be a default PDA program in the case
on Nova, Skyrat, and Bubber), and the delete_equipment proc is called,
the camera inside the PDA gets sent to the wardrobe because of
`/datum/outfit/job/assistant/gimmick/hall_monitor` having one, and then
qdelled with the PDA, leaving a hanging ref

This causes a harddel during tests that has caused me great pains to
locate. Turns out a single example holodisk with the clown holds a
magical key to trigger all this: a single PDA

Fixes a harddel. There might be other similar ones hiding in the dark
like cameras in other objects.

:cl:
fix: Fixes SSWardrobe stealing a camera from the camera app when on a
dummy, causing a harddel
/:cl:

* Automatic changelog for PR #87903 [ci skip]

* Rebuild plane masters after client login if switching between 515 and 516 (#87889)

This makes `/datum/player_details` properly track BYOND version and
build separately, as opposed to just the full version string.

Whenever a client logs in, and their BYOND version is 516, while their
previous version was 515, or vice versa, it'll set a newly added client
var, `rebuild_plane_masters`, to TRUE.

During the `COMSIG_MOB_LOGIN` signal handler of a mob's HUD
(`/datum/hud/proc/client_refresh`), it will check to see if
`rebuild_plane_masters` is TRUE - if so, it will set the appropriate
`relay_loc` of (based on client BYOND version) of its plane master
groups, and rebuild their plane masters.

Makes testing stuff across 515 and 516 easier, as your screen won't
break when switching between the two.

516 is _still_ in private alpha, so no user-facing changes.

* a few tiny birdshot tweaks and fixes (#87785)

1st SM filter is now set to N2 by default
A random hallway apc that started unwired is now wired
Chef gets a dehydrator
Surgery theatre now has a surgery tray instead and surplus prosthetic
limbs to fill in the empty space
Greater central maintenance owns all of its walls
The chemical closet in pharmacy now has multiver, formaldehyde,
epinephrine, basic buffer and the other kind of buffer to compensate for
not having a chemstorage room
atmos distro air mixer now mixes correctly

closes #87729
also maintenance is supposed to own all of its walls

:cl:
fix: Added dehydrator to birdshot kitchen. Surgery theatre now has a
surgery tray and surplus prosthetics. An unwired hallway APC is now
wired. 1st SM filter is now set to Nitrogen. Chemistry closet in
pharmacy now contains extra chemicals to compensate for not having a
chemical storage. Atmos air for distro mixer now mixes correctly
/:cl:

* floor lights have the same light range during nightshift (#87786)

floor lights have the same light range during nightshifts

theyre horrendously bad at lighting up stuff in nightshift and birdshots
bar looks horrendous as a result

:cl:
fix: floor lights have the same light range during nightshift, so you
can actually see the bar during a night shift on birdshot
/:cl:

* Fixes storage & evidence bag pre attack (#87793)

- Fixes #87788

Usually when you force move an item anywhere `obj/item/doMove()` is
responsible for removing the item from the players hand & updating the
visuals. When you move that item from say your pocket to your hand we
call `attempt_pickup()` which also updates visuals.

The one case where these 2 procs don't help is when that item is
equipped from anywhere else but the hand(pockets for e.g) into a storage
medium that is held in hand. For this edge case we have to drop the item
to ground to update the visuals of whatever inventory slot it was
attached to

Now evidence bag uses the storage pre attack mode rather than
implementing its own item interaction thus fixing the visual glitch not
just for it but for all items that have `allow_quick_gather = TRUE`

:cl:
fix: Fixed visual glitches when inserting items from an slot other than
the hands into evidence bags & other storages that have quick gather
mode enabled
/:cl:

* Fixes nooartrium having no downsides (#87798)

Having a non-organic heart ignored the heart damage, so you could just
be immortal forever

:cl:
fix: Nooartrium heart damage can no longer be bypassed with non-organic
hearts
/:cl:

Balance maybe? I don't feel this was ever intended and an oversight in
not setting the correct flag

---------

Co-authored-by: MrMelbert <[email protected]>

* cuffsnapping is on right click (#87634)

title

OOC: Blard of Jard: I was trying to cut a cargo tech's leg off for a spy
bounty, but instead of just cutting his leg with it targetted on harm
intent, it immediately cut his ties and he mag dumped me with his laz
gun.

:cl:
fix: you now snip cuffs with right click to prevent accidental cuts
/:cl:

---------

Co-authored-by: Ghom <[email protected]>

* Guncode Agony 4.1: Portal Intermission (#87803)

Closes #75447 by allowing projectiles to pass through portals. This does
not allow for infinite loops for sanity (including host's) reasons.

Can safely be merged before #87740

:cl:
fix: Many years later, projectiles finally can pass through portals -
this time without crashing the server.
/:cl:

* Automatic changelog for PR #87785 [ci skip]

* Automatic changelog for PR #87798 [ci skip]

* Automatic changelog for PR #87793 [ci skip]

* Automatic changelog for PR #87634 [ci skip]

* Automatic changelog for PR #87803 [ci skip]

* Buffs the Anomalock modules (#87743)

Significantly buffed the anomalock modules.

Anomalock modules can be used with eachother.

Antigravity module costs 2 complexity.

Teleporter module is thrice as fast at teleporting with a slightly
reduced cooldown, but has a much larger power cost.

Changed how teleporter tracks maximum range to be less painful to the
end user.

Kinesis module's default range has been extended to 8.

Kinesis module can drag around people in critical condition or worse.

These modules have historically been, well, kind of a complete joke.
They seem to have been crippled out of fear of them being overpowering
with the end result of being unusable.

Anomaly items are allowed and meant to be fun, strong, and wild, so I
really don't see why these need to be so weak. The amount of times I'd
rather make a teleporter that takes 3 seconds to get you anywhere
instead of an instant portal gun or a bag of holding is roughly zero.

People hate modsuits, and in part that hate is because of modules which
do very, very little due to severe undertuning. Let's fix that with the
anomaly ones here.

> Anomalock modules can be used with eachother.

Let people get a buncha anomaly modulse together if they want to. An
antigravity user with teleporting and kinesis could be something to
fear, but not so much as to strike it from existence altogether without
even letting people mess around with it first.

> Antigravity module costs 2 complexity.

Antigravity module is glorified wittel -> gravitum, but it takes a core
and 3 complexity. At least let it be somewhat cheap.

> Teleporter module is thrice as fast at teleporting with a slightly
reduced cooldown, but has a much larger power cost.

Teleporter module is a big damn joke ATM, as stated above being
effectively overshadowed in every way by the portal gun. This now gives
it a fun niche instead, of being able to teleport around everywhere at
the cost of a massive power draw.

> Changed how teleporter tracks maximum range to be less painful to the
end user.

view() was working weirdly when I was using it. It was failing to
register tiles somewhat near the end of the screen, so I just ditched it
for a get_dist check that I threw 9 in as a somewhat arbitrary value
for.

> Kinesis module's default range has been extended to 8.

There's this bug on live where when you kinesis someone it flies all the
way to the SW corner of the screen for seemingly no reason. I don't know
why it happens but it drives me mad.

Even without that bug, 5 tiles is extremely frustrating to handle - it's
super, super annoying to find a middleground between 'not slapping you
in the face', 'not losing your grip'. 8 tiles is a lot more forgiving
and makes the module actually fun to use.

> Kinesis module can drag around people in critical condition or worse.

This one might be a bit nuts, but I really want to see this ingame, it's
kind of the best part of the module yet is unobtainable. Maybe some
stuff would need to be tuned for it, like making human throws flimsy.
:cl:

balance: Significantly buffed the anomalock modules.
balance: Anomalock modules can be used with eachother.
balance: Antigravity module costs 2 complexity.
balance: Teleporter module is thrice as fast at teleporting with a
slightly reduced cooldown, but has a much larger power cost.
code: Changed how teleporter tracks maximum range to be less painful to
the end user.
refactor: Refactored LoS checks to be a proc on atom, los_check
balance: Kinesis module's default range has been extended to 8.
balance: Kinesis module can drag around people in critical condition or
worse.
/:cl:

* Automatic changelog for PR #87743 [ci skip]

* gives mulebot wires some messages when cut (#87895)

closes https://github.com/tgstation/tgstation/issues/87640
feedback is cool
:cl: grungussuss
qol: added feedback for cutting mulebot wires
/:cl:

* Automatic changelog for PR #87895 [ci skip]

* Hello I would like to order one unit test please

* Hi can I get a replacement unit test this one broke

* we don't need these anymore

---------

Co-authored-by: Fikou <[email protected]>
Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Co-authored-by: Jacquerel <[email protected]>
Co-authored-by: Ghom <[email protected]>
Co-authored-by: thegrb93 <[email protected]>
Co-authored-by: Xander3359 <[email protected]>
Co-authored-by: SyncIt21 <[email protected]>
Co-authored-by: harryob <[email protected]>
Co-authored-by: Tim <[email protected]>
Co-authored-by: Lucy <[email protected]>
Co-authored-by: SmArtKar <[email protected]>
Co-authored-by: OrionTheFox <[email protected]>
Co-authored-by: grungussuss <[email protected]>
Co-authored-by: Ben10Omintrix <[email protected]>
Co-authored-by: tonty <[email protected]>
Co-authored-by: elricsfate <[email protected]>
Co-authored-by: Waterpig <[email protected]>
Co-authored-by: Jordan Dominion <[email protected]>
Co-authored-by: Rhials <[email protected]>
Co-authored-by: necromanceranne <[email protected]>
Co-authored-by: Andrew <[email protected]>
Co-authored-by: Dawnseer <[email protected]>
Co-authored-by: carlarctg <[email protected]>
Co-authored-by: EnterTheJake <[email protected]>
Co-authored-by: MrMelbert <[email protected]>
Co-authored-by: Djiq <[email protected]>
Co-authored-by: Alice Garfieldfan <[email protected]>
Co-authored-by: sqn <[email protected]>
Co-authored-by: _0Steven <[email protected]>
Co-authored-by: tmyqlfpir <[email protected]>
Co-authored-by: Goat <[email protected]>
Co-authored-by: Neocloudy <[email protected]>
Co-authored-by: Holoo <[email protected]>
Co-authored-by: Alexis <[email protected]>
Co-authored-by: LT3 <[email protected]>
Co-authored-by: jimmyl <[email protected]>
Co-authored-by: Roxy <[email protected]>
Co-authored-by: zxaber <[email protected]>
Co-authored-by: Time-Green <[email protected]>
@FeenieRU FeenieRU merged commit 604a11b into master Dec 7, 2024
29 checks passed
@Iajret Iajret deleted the updates branch December 7, 2024 13:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.