Skip to content

Commit

Permalink
Batch of TG PRs 11/7 (#4636)
Browse files Browse the repository at this point in the history
* 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…
  • Loading branch information
Show file tree
Hide file tree
Showing 582 changed files with 9,041 additions and 8,004 deletions.
44 changes: 20 additions & 24 deletions _maps/RandomRuins/SpaceRuins/russian_derelict.dmm
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,7 @@
/area/ruin/space/solars/ks13/aft_solars)
"bC" = (
/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"bE" = (
/obj/structure/table_frame,
Expand Down Expand Up @@ -424,7 +424,7 @@
"dU" = (
/obj/structure/door_assembly/door_assembly_eng,
/obj/structure/cable,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"dY" = (
/obj/machinery/door/window/left/directional/south{
Expand All @@ -449,7 +449,7 @@
"ek" = (
/obj/item/shard/plasma,
/obj/effect/decal/cleanable/greenglow/radioactive,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"eu" = (
/obj/structure/rack,
Expand Down Expand Up @@ -2025,7 +2025,7 @@
},
/obj/effect/mapping_helpers/broken_floor,
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"sK" = (
/obj/structure/grille/broken,
Expand Down Expand Up @@ -2119,7 +2119,7 @@
/area/ruin/space/ks13/service/hydro)
"te" = (
/obj/effect/decal/cleanable/greenglow/radioactive,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"th" = (
/obj/structure/cable,
Expand Down Expand Up @@ -3423,7 +3423,7 @@
"Al" = (
/obj/item/shard/plasma,
/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"Am" = (
/obj/machinery/power/apc/auto_name/directional/south,
Expand Down Expand Up @@ -4387,7 +4387,7 @@
/area/ruin/space/ks13/engineering/grav_gen)
"Fp" = (
/obj/effect/mapping_helpers/broken_floor,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"Fq" = (
/obj/structure/frame/computer{
Expand Down Expand Up @@ -4636,10 +4636,6 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/iron/airless,
/area/ruin/space/ks13/tool_storage)
"GF" = (
/obj/structure/grille,
/turf/open/floor/plating,
/area/ruin/space/ks13/ai/corridor)
"GG" = (
/obj/effect/mapping_helpers/burnt_floor,
/obj/item/stack/cable_coil/cut,
Expand Down Expand Up @@ -5016,7 +5012,7 @@
name = "Engine Room"
},
/obj/effect/mapping_helpers/airlock/access/all/engineering/general,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"IF" = (
/turf/open/floor/plating/airless,
Expand Down Expand Up @@ -6748,7 +6744,7 @@
/turf/open/floor/iron/dark,
/area/ruin/space/ks13/medical/morgue)
"RI" = (
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"RJ" = (
/obj/structure/reagent_dispensers/watertank,
Expand Down Expand Up @@ -7118,7 +7114,7 @@
/area/ruin/space/ks13/science/genetics)
"Tg" = (
/obj/item/shard/plasma,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"Th" = (
/obj/structure/cable,
Expand Down Expand Up @@ -7513,7 +7509,7 @@
/area/ruin/space/ks13/engineering/atmos)
"Vh" = (
/obj/structure/door_assembly/door_assembly_eng,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"Vj" = (
/obj/machinery/door/poddoor/preopen{
Expand Down Expand Up @@ -7577,7 +7573,7 @@
"Vx" = (
/obj/effect/decal/cleanable/greenglow/radioactive,
/obj/effect/decal/cleanable/glass/plasma,
/turf/open/floor/engine,
/turf/open/floor/engine/airless,
/area/ruin/space/ks13/engineering/supermatter)
"VB" = (
/obj/structure/cable,
Expand Down Expand Up @@ -16168,14 +16164,14 @@ HC
DU
yz
yz
GF
GF
GF
GF
GF
GF
GF
GF
yz
yz
yz
yz
yz
yz
yz
yz
dT
dT
dT
Expand Down
Loading

0 comments on commit 6878917

Please sign in to comment.