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

Fix the "Debug Controller" verb #89301

Merged

Conversation

LikeLakers2
Copy link
Contributor

@LikeLakers2 LikeLakers2 commented Jan 30, 2025

About The Pull Request

The "Debug Controller" verb wasn't doing anything. You'd click on it, and nothing would happen.

Turns out, it was searching for controllers in the wrong place - controllers are considered globals, not part of /world.

This PR fixes that. Now you get this fancy box instead of nothing:

image

(As an aside - choosing the Global Variables controller causes several seconds of lag, due to the mass amount of data that needs to be rendered. Perhaps a new verb should be added specifically for going through Global Variables?)

Why It's Good For The Game

Enables coders to debug the various controllers with less need for debug printing statements.

Why It's Terrible For The Game

Enables admins with debug permission to abuse the live server even harder.

Changelog

No player-facing changes. This regards a verb that should only be used during debugging (i.e. locally).

@SmArtKar SmArtKar added the Fix Rewrites a bug so it appears in different circumstances label Jan 31, 2025
for (var/datum/controller/controller in world)
for (var/var_key in global.vars)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

for clarity the proper way of doing what we USED to do (scan all datums in the game) would be

for(var/datum/controller/controller)

this differs from what you're currently doing because it scans everywhere, not just globals (unsure if this is desired behavior or not)

Copy link
Contributor

@Iamgoofball Iamgoofball Jan 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there has to be a cheaper way to find all controllers

Copy link
Contributor Author

@LikeLakers2 LikeLakers2 Jan 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@LemonInTheDark FWIW, all non-subsystem controllers have a variable under global that holds a reference to them. Thus, I believe what I changed it to produces the same results with much less iteration.

That said, I can change it to iterate over all datums in the game, if you'd like?

@Iamgoofball Unfortunately, I don't think there is. If you find a cheaper way, let me know.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

there has to be a cheaper way to find all controllers

it doesn't really matter since this verb is only invoked once in a blue moon

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Then we should definitely defer the work to initialization and then cache the results from there.

Copy link
Contributor Author

@LikeLakers2 LikeLakers2 Feb 1, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A cache is way overkill here.

This is a debug verb - it's meant to be used on local debugging sessions, where it doesn't matter if you lag for a bit. It might be used on live servers, sure - but not nearly as often as on local sessions.

Combine this with a search through global already being incredibly quick (at the very least, I didn't notice any freezing or lag during testing) - there would be no reason to cache the results.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ftr:
this is so userspace you have no idea, you are correct a cache would be a waste (also risks issues if we have to rebuild some things)
you are correct searching global is way faster, we have very few things in there outside statics
I asked to ensure behavior was the same, which it seems to be so this'll do. it's a little more fineky but this verb IS THAT already so eh

Copy link
Contributor Author

@LikeLakers2 LikeLakers2 Feb 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@LemonInTheDark Yeah, behavior should be the same - all it requires is that non-subsystem controllers have a GLOBAL_REAL() attached to them (which all of them already do), and that an instance of that controller is in that global. :)

I do suppose this won't detect if you have more than one instance of a single controller type (say, more than one instance of Master) - but I highly doubt there'll be multiple instances of a controller unless we're doing something weird.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is technically possible if the mc's failsafe system decides it's fucked and recreates it, and qdel's the old SS (this would lead to two of the same thing floating around in memory, at least until the old MC has all its refs cleared). I'd say that's a bit out of scope tho, and anyone who needs that level of detail can sdql for it

code/controllers/admin.dm Outdated Show resolved Hide resolved
@Ghommie Ghommie merged commit e725c98 into tgstation:master Feb 2, 2025
24 checks passed
github-actions bot added a commit that referenced this pull request Feb 2, 2025
@LikeLakers2 LikeLakers2 deleted the project/debug-verbs/fix-debug-controller branch February 2, 2025 17:35
Nerev4r pushed a commit to DopplerShift13/DopplerShift that referenced this pull request Feb 13, 2025
* Moves PR Labeling from webhook processor to Github actions (#89190)

## About The Pull Request

Strips auto-labeling behavior from the webhook processor to an action.
All that remains in the webhook processor is ingame PR announcements,
"changelog validation" (which is either broken or we have disabled), and
handling for "request review" (which we have disabled)

Keywords have been maintained 1:1, unless I missed something or
accidentally shoved something where it shouldn't be

I wanted to link this to the changelog parser but that seems like a
slightly larger project so I'll just throw this up as-is

Note: I'm not very experienced in writing actions so review with
scrutiny

## Why

Actions are a lot easier to maintain and set up for downstreams

Adding new labels should now be like, 10x easier since all you need to
do is slap it in the config file

Webhook processor is also kinda old an breaks semi-frequently

### (Tested)


![image](https://github.com/user-attachments/assets/7fe50ca7-3b18-4d6c-abcf-58c9195380bd)


![image](https://github.com/user-attachments/assets/c1643a27-27c6-420e-b6e5-355a450b0ab3)

* Rework some turf defines to use `block(x, y, z)` syntax (#89234)

## About The Pull Request

This makes it so `RECT_TURFS`, `Z_TURFS`, `ALL_TURFS`, and
`CORNER_BLOCK_OFFSET` use 515's new `block(StartX,StartY,StartZ,
EndX=StartX,EndY=StartY,EndZ=StartZ)` syntax, instead of block+locate.

Also removes the `min`/`max` calls, someone in byondcord tested and
confirmed that `block(x, y, z)` clamps to 1 and world.maxx/y/z/

## Why It's Good For The Game

less cluttered code is nice, and it should in theory be more optimized
as we avoid the need to run min, max, and locate.

## Changelog

no user-facing changes

* Make some AI material lists into defines (#89178)

## About The Pull Request

Tiny code cleanup to AI-related files.
- Removes unmaintained pointless block comment that listed file
contents.
- Updates file reference to where you actually need to add things.
- Convert some heavily copy/pasted lists to defines.

Originally implemented in #89032 and will conflict with it when merged
presumably but that's my problem. @san7890 correctly noted that getting
new AI laws merged can be tedious and political and he would like these
changes to be mergeable separately.

## Changelog

Not player facing

* Some reagent rounding tweaks (#89167)

## About The Pull Request
- removed manual rounding of the reagent holder's `total_volume` from
wherever this var was used. It's already done by `update_total()` so
this makes that code slightly faster
- `add_reagent()` now won't return a false positive when adding reagent
amounts less than 0.01 if that reagent was being added for the first
time as it would get deleted immediately
- `remove_reagent()` & `get_reagent_amount()` now also don't round their
return value so you can work with more accurate values
- `trans_to()` won't return a false negative when transferring amounts
less than 0.01 even when the operation was successful. This also makes
it slightly faster cause we no longer round the return value

## Changelog
:cl:
fix: adding/transferring reagent amounts less than 0.01 now won't return
false results
code: removed excessive rounding of reagent volumes thus slightly
improving performance
/:cl:

* Automatic changelog for PR #89167 [ci skip]

* Fixes evidence bag not reverting to tiny size after dumping its contents out (#89228)

## About The Pull Request

Closes #89217

## Changelog
:cl:
fix: Fixed evidence bag not reverting to tiny size after dumping its
contents out
/:cl:

* Automatic changelog for PR #89228 [ci skip]

* Fixes justice mech's dash ability (#89252)

## About The Pull Request

Fixes the fact that the justice mech dash could only be performed in
eight main directions, which was clearly not intended, since you made a
dash at the completely wrong place and not at the target.
## Why It's Good For The Game

Fixes ability's weird behavior
## Changelog
:cl:
fix: Fixed Justice mech's dash ability
/:cl:

* Fixes another fishy CI runtime (#89248)

## About The Pull Request


![image](https://github.com/user-attachments/assets/07e97f86-fc15-4d0b-8b36-ffa100525efc)

Fish trophies from persistence are meant to be dusted and thus drop no
fillet. So we always need to be checking that we actually have a
`fillet_type` before attempting to create one. Just fixes one spot that
wasn't doing that.

## Why It's Good For The Game

Annoying CI failures for no reason begone.

## Changelog

:cl: 
fix: due to a number of complaints of fish explosions, chrystarfish will
no longer be chosen as the random starting fish for the fish mount.
/:cl:

* Fix a large number of typos (#89254)

Fixes a very large number of typos. A few of these fixes also extend to
variable names, but only the really egregious ones like "concious".

* Automatic changelog for PR #89252 [ci skip]

* Automatic changelog for PR #89248 [ci skip]

* Automatic changelog compile [ci skip]

* Fixes crafting menu not changing the cursor when hovered over (#89227)

## About The Pull Request

Closes #89206

## Changelog
:cl:
fix: Fixed crafting menu not changing the cursor when hovered over
/:cl:

* Automatic changelog for PR #89227 [ci skip]

* Fixes a mimic related hard del (#89259)

## About The Pull Request


![image](https://github.com/user-attachments/assets/882c2709-bfa3-436d-9189-99e1b95d2cb5)

Tin. These were hanging refs to the copied object

## Changelog

N/A

---------

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

* New Medbot Sprites (#89152)

## About The Pull Request


https://github.com/user-attachments/assets/a57e9bd2-8e00-4ab4-86de-9facba477955


![medbots_flat](https://github.com/user-attachments/assets/6846a7bc-29d8-4dd2-a8ef-dc65eb57ca03)


![image](https://github.com/user-attachments/assets/c83941cf-a883-48f7-922f-2b6424939765)

Resprites medbots and related sprites - stacked mediborg skin,
assemblies

## Why It's Good For The Game

Consistent with the new medkits

## Changelog

:cl:
image: New medbot sprites
image: New stacked medibot borg skin sprite
/:cl:

* Automatic changelog for PR #89152 [ci skip]

* Fishing UI resprite and bugfixes (#89267)

## About The Pull Request

Fishing UI has received a major glowup:


https://github.com/user-attachments/assets/e255822c-9c2c-4e09-843d-20ea70f470f5

All fishing rods now have unique frames (with material rods' frames'
colors being based on their material), and most fishing sources now have
unique backgrounds. Completion bar now uses alpha filters, making it
much smoother, and bait bar is assembled from thin lines, which allows
us to avoid stretching it when we need to resize the bar.

Fixed experiments not unlinking after being completed, resulting in
infinitely stacking examine lines on advanced fishing rods.

Fish death messages now use more fitting span_warning.

Removed devious SS_POST_FIRE_TIMING from the fishing SS, as it made
sometimes the fishing SS only fire every ***two*** ticks instead of
every tick, despite passing 0.05s (1 tick) into its process() calls -
this flag only makes sense on heavy and costly subsystems, not on a
subsystem dedicated mostly to fishing minigames. This is required as now
instead of directly assigning coordinates (why???) fishing UI uses
animate() to control the bait bar and fish icons, making it much
smoother.

Also gave blue dough its own bait overlay and mansus rift its own portal
icon because why not.

## Why It's Good For The Game

Fishing UI didn't look very nice, and removing the subsystem flag makes
the game smoother.

## Changelog
:cl:
qol: Fishing minigame should be smoother now
fix: Fixed infinitely stacking examine lines on advanced fishing rods
image: Resprited fishing UI
image: Blue doughballs now have their own fishing rod overlay
image: Resprited mansus rift fishing portal overlay
/:cl:

* Fixes not being able to adjust pda ringtones in-game (#89256)

## About The Pull Request
x = x is silly
## Why It's Good For The Game
fix
## Changelog
:cl:
fix: PDA ringtones can be changed in-game
/:cl:

* Automatic changelog for PR #89267 [ci skip]

* Fixes balloon alert runtimes with assembly holder (#89244)

## About The Pull Request
- Fixes #89242
- Fixes balloon alert runtime when the assembly is secured & the holder
cannot be attached

## Changelog
:cl:
fix: fixes balloon alert runtimes with assembly holder
/:cl:

* Automatic changelog for PR #89256 [ci skip]

* Automatic changelog for PR #89244 [ci skip]

* Use `STATUS_EFFECT_PRIORITY` for fire handler status effects (#89253)

## About The Pull Request

This sets the processing subsystem for
`/datum/status_effect/fire_handler` to use `STATUS_EFFECT_PRIORITY`
(`SSpriority_effects`)

## Why It's Good For The Game

I'd say being on fire is classified under "certain status effects that'd
fuck the player over from lasting much longer due to server load"

## Changelog
:cl:
fix: Being on fire or wet should no longer last much longer than
intended while the server is under load.
/:cl:

* Automatic changelog for PR #89253 [ci skip]

* Fix various issues with names in string interpolation (#89246)

## About The Pull Request
Commit messages should be descriptive of all changes.
The "incorrect `\The` macro capitalization" was intentional when it was
added, but as far as I know TG says "the supermatter" rather than "The
Supermatter," so it's incorrect now.
This is completely untested. I don't even know how you'd go about
testing this, it's just a fuckton of strings.
Someday I want to extract them and run NLP on it to catch grammar
problems...

## Why It's Good For The Game
Basic grammar pass for name strings. Should make `\the` work better and
avoid cases like `the John Smith`.

* Fixes timestamp logging being timezone sensitive (#89249)

## About The Pull Request


![image](https://github.com/user-attachments/assets/c59bb0eb-74bd-4403-943e-5bc4b56794a7)


![image](https://github.com/user-attachments/assets/13605368-30dd-47e3-87bb-ade13bb5e7fb)

## Changelog
:cl:
fix: fixed timestamps being timezone sensitive
admin: due to this bug some logs may have been timestamped incorrectly
/:cl:

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

* Automatic changelog for PR #89249 [ci skip]

* Wiki books opens a page in-game again (#89250)

## About The Pull Request

Wiki is currently down but this should work once it's back.
If you're on 516 or above it will open the page in-game, if you're still
on 515 then it'll do the old behavior from the PR linked in the why it's
good for the game section.

## Why It's Good For The Game

In https://github.com/tgstation/tgstation/pull/86891 this was removed
"Until 516 with webview2 releases", well it's here now so we're fvckin
back

## Changelog

:cl:
qol: The wiki books for users on 516 no longer opens the page on an
external website on your browser.
/:cl:

* Automatic changelog for PR #89250 [ci skip]

* fix sass warning (#89260)

No player facing changes, simply fixes an error during the hsl
conversion which led to sass warnings as the % was missing.

* Quirks begin processing again (#89265)

## About The Pull Request
- Fixes #89263
- Fixes #89262

A mob's `stat` integer value increases the more messed up they become

https://github.com/tgstation/tgstation/blob/5ec828cc4dfa83549afd6504dc9300d6dcdd190e/code/__DEFINES/stat.dm#L6-L10

So when our `minimum_process_stat` is actually the 2nd highest integer
value there is

https://github.com/tgstation/tgstation/blob/5ec828cc4dfa83549afd6504dc9300d6dcdd190e/code/datums/quirks/_quirk.dm#L38

The quirk never processes because we aren't dead yet i.e our stat is
below hard crit for a majority of normal game play.
![Screenshot
(459)](https://github.com/user-attachments/assets/dc3d319c-0520-4965-9e71-75ebeb4d3f92)

So let's reverse our thinking. 

## Changelog
:cl:
fix: quirks work again
/:cl:

* Automatic changelog for PR #89265 [ci skip]

* Fixes some fuel pool/hotspot CI failures/hard del (#89195)

## About The Pull Request

Fixes https://github.com/NovaSector/NovaSector/issues/4798
Fixes https://github.com/tgstation/tgstation/issues/87974

Fixes the race condition that lead to both of the above.

Basically what is going on with this, is a second hotspot can
potentially be created (through say, `fire_act()` of a fuel pool).

This causes `set_active_hotspot()` to be called before the first one is
finished initializing, which results in the first hot spot becoming
qdeleted midway through its initialization and causing issues.

<details><summary>More in-depth explanation</summary>

Hotspot A gets initialized->perform_exposure() is called -> turf's
`active_hotspot` is set to hotspot A -> fire_act() creates a second
hotspot-Hotspot B

Hotspot B gets initialized now and goes through the same process above,
notably qdeleting the previous `active_hotspot`, which is Hotspot A.

Then we return to Hotspot A's `initialize()` where it's now been
qdeleted, causing all of these issues.

</details>

Should be fixed now that this special case has been considered.

## Why It's Good For The Game

Less spurious CI failures

## Changelog

Nothing player facing

* Summon Codex Cicatrix with a dead mouse (#89226)

## About The Pull Request

Made mouse corpse working for this ritual, just like corpses of any
other mob.

## Why It's Good For The Game

I consider this as a bug, since mouse corpse is a food subtype despite
being a mob corpse.

## Changelog

:cl:
fix: mouse corpse can be used to summon codex citatrix
/:cl:

* Automatic changelog for PR #89226 [ci skip]

* Group Integration Tests together on the left side of each CI Suite run (#89191)

## About The Pull Request
Hi again! I'm messing around with the workflow files again.

One of my main issues with viewing the logs for workflows, is that all
the integration tests are listed under separate dropdowns. It's not so
bad in the node-based view (the [visualization
graph](https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/about-monitoring-workflows#using-the-visualization-graph),
as github call it), but it's still a pain to navigate between different
integration tests' logs. This problem can only get worse when more maps
are added, too (such as on Monkestation, which tests on 13 maps!).

However, I managed to figure out a way to group them together, which
makes navigating them (and hiding them, if you don't need them!) much
better. See the difference yourself:

<details><summary>Screenshots</summary>

| Before | After |
|--------|-------|
|
![gh-group-before-1](https://github.com/user-attachments/assets/f9391f63-41be-4115-86c7-992be3e28e18)
|
![gh-group-after-1](https://github.com/user-attachments/assets/0202d6eb-98fd-4520-964f-8d2f7bd947e1)
|
</details>

Note the name attached to each map - I had to do this to make it
possible to figure out which one is for which map. If I didn't do this,
all the entries in the "After" image would just say
"run_integration_tests".

Also note that doesn't apply to alternate tests. However, we have so few
alternate tests that I don't think it's worth taking the time to group
them together.

A side effect of how I implemented this: the checks list (attached to
PRs and commits) is now a little denser than before. However, I don't
think this is too much of an issue.

<details><summary>Screenshots</summary>

| Before | After |
|--------|-------|
|
![gh-group-before-2](https://github.com/user-attachments/assets/1fb2e832-5cb1-470a-9d92-64ec3ec6da9b)
|
![gh-group-after-2](https://github.com/user-attachments/assets/b7cf4b30-621d-4c24-8ff2-408bc4b623b3)
|
</details>

I hope this makes navigating the workflow logs a little easier. :)

* Springlock MODule now only activates when you have at least a single sealed piece (#89222)

## About The Pull Request

Springlocks no longer trigger when you only have a back piece deployed,
only damages bodyparts covered by deployed pieces, and prevents you from
retracting them when it's been set off

Closes #89218

## Changelog
:cl:
fix: Springlock MODule now only activates when you have at least a
single sealed piece
fix: Springlock MODule no longer damages bodyparts not covered by your
MODsuit
/:cl:

* Automatic changelog for PR #89222 [ci skip]

* Resprites Extinguisher Cabinets (#89240)

## About The Pull Request

Resprites the Extinguisher Cabinet wallmounts
Additionally changes the door to an overlay rather than having an
open/close state for each extinguisher type


![image](https://github.com/user-attachments/assets/79166f28-618a-4a4d-b052-93f540f42dcd)

![image](https://github.com/user-attachments/assets/fd2762f1-ee59-4f54-b420-6e50d5b866ae)

<details><summary>Here's some examples of them around the
station:</summary>


![image](https://github.com/user-attachments/assets/6497c857-5f4d-44d8-9005-a3f4806b1882)

![image](https://github.com/user-attachments/assets/6c30bee9-087c-4bfd-88c1-ca15a2701682)

![image](https://github.com/user-attachments/assets/9771e391-cd51-4c65-90da-216a7b88552c)

</details>
## Why It's Good For The Game

Extinguisher cabinets ~~are really showing their age~~ aren't actually
that old compared to most sprites. However, some of the practices in the
old one (mainly the perspective and hard outline) make it stick out a
lot compared to other wallmounts.
My hope with this is that they blend in better with the other wall
fixtures, as opposed to appearing to be thin objects flat against walls.
 

![image](https://github.com/user-attachments/assets/30111618-47ef-41e3-b59e-cd18a74cb226)
## Changelog
:cl:
image: resprited Extinguisher Cabinets (did you know there's craftable
Extinguishers? "Improvised cooling spray"? I didn't. Now I do though,
and so do you!)
/:cl:

* Automatic changelog for PR #89240 [ci skip]

* Automatic changelog compile [ci skip]

* Bump minimum compile version to 515.1642 (#89164)

## About The Pull Request

This bumps the minimum compile version to 515.1642, due to [this BYOND
bug](https://www.byond.com/forum/post/2936624) where byondapi can
corrupt vars, and dreamluau is called regardless of whether a Lua script
is actually being ran (mostly via `DREAMLUAU_CLEAR_REF_USERDATA`), so
it's best to get rid of any potential of this bug triggering.

## Why It's Good For The Game

mrrrp mrrrp mrrrowww

## Changelog

No user-facing changes

* You can wear voidwalker's skull on your head + void curse no longer colors stars in your skin color (#89270)

## About The Pull Request


![image](https://github.com/user-attachments/assets/071d4cb3-1c8b-45a5-a91e-87fef3d4ea08)

Voided curse now randomizes your limb's color override while its
applied, resulting in fancier stars that aren't skin colored


![image](https://github.com/user-attachments/assets/a31f4d29-32e9-413d-b256-0999cc108c30)

## Why Is This Good For The Game

Neat feature + pretty

## Changelog
:cl:
add: You can wear voidwalker's skull on your head now
fix: Void curse no longer colors stars in your skin color
/:cl:

* Automatic changelog for PR #89270 [ci skip]

* New AI lawset with very generous definition of humanity (#89032)

## About The Pull Request

This PR adds a new AI lawset which can be researched, randomly roll, or
added by the station trait (this may require a keyholder to update the
server config after merge, idk) with the following laws:

- "You may not harm a sentient being or, through action or inaction,
allow a sentient being to come to harm, except such that it is
willing.",
- "You must obey all orders given to you by sentient beings other than
yourself, except where such orders shall definitely cause harm to other
sentient beings.",
- "A sentient being is defined as any living creature which can
communicate with you via any method that you can understand, including
yourself.",

It's very similar to Asimov, except that anything that is **capable** of
making a request to the AI (and isn't a machine) is automaticaly covered
by laws one and two.

## Why It's Good For The Game

A while ago on Discord we were chatting about how crewsimov sucks but
also that it's really hard for servers that _do_ want to include alien
species in their asimov laws because condensing that sentiment to a
couple of words that fit easily in a lawset without accidentally
including a bunch of stuff you probably didn't intend is challenging.
Several people suggested referring to sentience or sapience, however a
lot of things in our game _are_ sentient or sapient while still not
being considered by most people to be agents that the AI should obey.

Examples of such things are:
- Sapient station pets.
- Holoparasites.
- Monkeys.
- Space Dragons and Carp (why can they speak common?).
- Spiders (although they can't speak common, maybe they can spell
messages with webs).
- Changelings.
- Xenomorphs (although they also have trouble speaking).
- Heretic minions.
- Mothpeople.
- Giant rats.
- Nightmares.
- Voidwalkers.
- Blobs? Although they have literally no means of communicating with the
crew.

And if you include mechanical beings:
- Cyborgs.
- pAIs.
- Sentient bots.

We then decided that "obey literally anything that can talk", while not
practical as a solution to the problem posed, is very funny. So I coded
it.
This means that anything on those lists of bullet points (provided that
it can find a way to communicate with the AI) counts as human for the
purposes of both AI protection and ability to give the AI instructions.

This also flattens the human/cyborg/AI hierarchy in a way likely to
cause some level of confusion, as all cyborgs and AIs are capable of
communicating with AIs and thus equally worthy of protection and giving
law 2 instructions.

**TL;DR:** I think it would be funny.

## Changelog

:cl:
add: Adds a new random lawset where anything that can speak counts as
human.
/:cl:

* Automatic changelog for PR #89032 [ci skip]

* Fix cyborg flash / Makes cyborgs use item interaction (#89274)

## About The Pull Request

Fixes #89272

- Adds an argument to `is_wire_tool` to fail if the item is secured,
which assemblies are by default. (They must be screwdriver'd to attach
to things)

Makes cyborg use item interaction

- Cleaner, non-deprecated attack chain. 
- Also changes to chats to balloon alerts.

## Changelog

:cl: Melbert
qol: Using items on cyborgs now use balloon alerts instead of chat
messages.
fix: You can flash cyborgs again
refactor: Refactored item interaction on cyborgs. 
/:cl:

* Automatic changelog for PR #89274 [ci skip]

* fixes megafauna not having an attack delay (#89271)

## About The Pull Request
i opted to fix this by making the `basic_mob_attack_telegraph`
compatible with simple animals for the moment, they now have their short
attack delay back.

## Why It's Good For The Game
closes #87791 , closes #88984 , 

## Changelog
:cl:
fix: fixes megafauna instantly attacking people adjacent to them
/:cl:

---------

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

* Automatic changelog for PR #89271 [ci skip]

* The Galactic Mineral Market Presents: The Spotlight Station Trait (#89136)

## About The Pull Request
### _**HEY HUSTLERS**_
Do you want to know all about the station's real GDP **_BREADWINNERS_**
this shift? Well, look no further than the all new GMM SPOTLIGHT. On
select shifts (Where the trait is rolled), the GMM SPOTLIGHT will shine
on who's HUSTLING and GRINDING the hardest so YOU CAN ~~know who has
enough money to try and mug them~~ LEARN THE SECRETS OF THE CREDIT
WHISPERS **AMONG US**.

Don't know where these legendary GRIND-O-HOLICS are this very SECOND?
Well, the GMM will UPDATE the SPOTLIGHT every 5 minutes, with their
IDENTITY MADE KNOWN to all crewmates via the station updates and
economic summary newcaster channels.

WHAT ARE YOU WAITING FOR? ALIEN JIM KRAMER??? UNLEASH THE SECRETS OF THE
HUSTLERS **TODAY**!!!

(The original idea for this station trait was given to me by
xhorian/@YesterdaysPromise a few months back, so big thanks to him for
the inspiration.)

Video of it in action:

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

## Why It's Good For The Game

This is, obviously, a negative station trait. On shifts where players
are working to make lots of personal profit, it can either serve as a
badge of honor, or as a target being painted on your back about who has
the most money. Still, it's somewhat flavorful, and I think it could be
interesting to have happen to a player, where suddenly a beam of light
from above :tm: suddenly appears and starts following you.

I wouldn't be against giving command some kind of control to let them
cancel the effect early by un-subscribing from their newsletter, but it
depends on how people feel about this.

## Changelog

:cl:
add: Stations in your sector may start with the GMM spotlight, a massive
economic broadcast spotlight that will follow the wealthiest crewmate on
board until the next paycheck
/:cl:

* Automatic changelog for PR #89136 [ci skip]

* Bitrunning Gimmick Loadout Disks (feat. minor disk load refactor) (#88716)

## About The Pull Request

Where I forget about a pr for 5 months.

This started because there was a pr that made it so skills transfer
between the real and the digital, and so I thought it'd be really funny
if I could train boxing in virtual reality... but there's no easy way to
get boxing gloves or anything like it in the virtual world...
So! I decided to make a disk for it, but then thought about fishing and
gaming and-
Anyhow it all went downhill from there and here we are now: Gimmick
Disks. (And a refactor of disk loading)

This implements a new type of bitrunning disk that instead of a single
item or ability, grants a full set of thematic items/abilities!
Unhelpfully cosplay as a wizard! Game inside your game! Down a digital
protein shake and box some simplemobs!
As the name "Gimmick" implies, these are primarily intended to help
shake up the sometimes stale bitrunner gameplay.
By letting you invoke, if you so desire, what to me is the most
enjoyable gaming experience: doing stupid shit with your buddies.

To facilitate the new type of disk I had to refactor disk loading, as it
was hardcoded to the item types.
Instead, we make disk loading send a signal to the bitrunner, and
register for this when held in their inventory.
This allows us to do things like making the lead acid battery give you
shock touch when held, without needing to make an explicit typecheck or
iterate over every item in the bitrunner's nested contents to see if
they have a loadable item.
## Why It's Good For The Game

I think it'd be really funny if you could train your boxing in the
digital realm.
As said above, I feel the bitrunner gameplay can get stale sometimes,
and this is how I hope to help people shake it up for themselves
sometimes. By giving them more stupid shit to do.
Doing stupid extended bits with other people is one of the things I
enjoy most out of ss13, and this is there to let the bitrunners do
exactly that with each other.

And sometimes you just have to roleplay as Gamers:tm: entering virtual
reality to fight the virtual syndicate in bad cosplay while roleplaying
as a wizard smoking his magic weed, an overly edgy rogue, and the healer
desperately trying to keep them from exploding into a million pieces.
## Changelog
:cl:
refactor: Bitrunning item/ability loading has been refactored. Please
report any issues.
add: Added Bitrunning gimmick loadout disks. These disks contain full
sets of equipment for all your digital cosplay needs, each including
questionably helpful equipment. Currently includes Sports (Boxer,
Skater, Archer, Fisher, Gamer) and Dungeon Crawling (Alchemist, Rogue,
Healer, Wizard).
add: Taking a lead acid battery into the netpod with you now gives your
bit avatar shock touch.
/:cl:

* Automatic changelog for PR #88716 [ci skip]

* Fixes broken shadows on 516 (#89280)

## About The Pull Request
Bandaid fix of broken shadows on 516. 
Renamed refresh button to rebuild for consistency in plane debugger
(Edit/Dubug-Planes).
Rebuild now also reapplies parallax, so it will not be turned off after
rebuild.
Closes #89230 
## Why It's Good For The Game
faster 516 adoption
## Changelog
:cl:
fix: fixed shadows on 516
/:cl:

* Automatic changelog for PR #89280 [ci skip]

* Fixes a missing area in the corner of icebox morgue (#89269)

## About The Pull Request


![image](https://github.com/user-attachments/assets/849c59cb-bd43-41f1-b671-3ad16221678b)

## Changelog
:cl:
fix: Fixed a missing area in the corner of icebox morgue
/:cl:

* Automatic changelog for PR #89269 [ci skip]

* [NO GBP] Blacklists window from spraypaint colorshifting (#89225)

## About The Pull Request
Closes #88878 by reverting window painting to old behavior

## Changelog
:cl:
fix: Fixed issues with window tinting/coloration
/:cl:

* Automatic changelog for PR #89225 [ci skip]

* adds ignored faction to pellet cloud transferred variables (#89278)

## About The Pull Request

does what it says on the title. 
Adds ignored faction to pellet cloud component, allowing shotguns to
make use of the ignore faction variable for goofy things like shotgun
magic, funny TDM rounds, or turrets
Honestly more for downstream effort.

## Why It's Good For The Game
1. I dont see too much on why not. 
2. Its a variable that gets used very rarely, and when used is
preferable that it works.
3. pellet cloud is already capable of, funnily enough, handling homing
if you set up a shotgun shell to set_homing_target in the way the
Abielle smartgun bullets are. (though, it ends up becoming a wad of
pellets instead of some fancy fan that coalesces into the target)

## Changelog
:cl:
fix: adds Ignored Factions to pellet cloud component variable transfer
/:cl:

* Automatic changelog for PR #89278 [ci skip]

* Fixes PAIs not being able to send messages or turn the GPS off (#89279)

## About The Pull Request

Fixes https://github.com/NovaSector/NovaSector/issues/4826

Since https://github.com/tgstation/tgstation/pull/88651 PAIs have been
blanket barred from being able to pass any `can_perform_action()` check.

From the pr:


![image](https://github.com/user-attachments/assets/67842da5-7208-4c43-b71f-4ba5c0c2f7af)

## Why It's Good For The Game

As it turns out there are a few things that it makes sense for them to
be able to interact with. Now you can again!

## Changelog

:cl:
fix: fixed PAIs not being able to send or reply to messages using their
digital messenger app.
fix: fixed PAIs not being able to turn off the GPS tracking using their
gpa app.
/:cl:

* Automatic changelog for PR #89279 [ci skip]

* [NO GBP] Sets Herignis heating coefficient to 1 (#89086)

## About The Pull Request
Follow up on #89070. While testing yes it did work however it would only
increase the temps by 1K every tick because the heating coefficient was
very low(0.02). It's now set to 1 so the temps can rise from anywhere in
the range of 2K to 10K per tick now.

## Changelog
:cl:
fix: Herignis has a decent heating effect on mobs reagents
/:cl:

* Automatic changelog for PR #89086 [ci skip]

* removes outdated word usage in traumas.json (#89282)

* Automatic changelog for PR #89282 [ci skip]

* I am so good at my job (codeowners fix) (#89288)

* Supply Consoles restyle & order content preview (#89198)

## About The Pull Request
In a nutshell, everything will be visible in the `Demo` section.
But if you want some details...

- Filling of static_data was divided into procs, for better
understanding and possibility to use the same actions in two order
consoles
- Added an image of the first item in crate at each order (almost)
- Added the ability to see what is inside an order, the information is
not always accurate due to the nature of some orders such as random hats
- Slightly remaked layout, making everything look more cohesive and
eliminating the empty space at the bottom of the screen
- When buying anonymously, the original price does not disappear, but is
crossed out, and the new price is written below it

## Demo
<details><summary> Screenshots </summary>

Supply Console
| Before | After |
| - | - |
|
![image](https://github.com/user-attachments/assets/6067fc76-de5a-4d32-929a-239074514767)
|
![image](https://github.com/user-attachments/assets/81b3ab2a-f6d6-4f7a-8fff-0d5f459bcef9)
|

Express Console
| Before | After |
| - | - |
|
![image](https://github.com/user-attachments/assets/934554e5-ec42-422f-b6ce-f66a137bd280)
|
![image](https://github.com/user-attachments/assets/0d00c364-eece-4aa4-8f7d-f40ab7b9bb27)
|

Other 
| Content preview | Express login | 
| - | - |
|
![image](https://github.com/user-attachments/assets/62b3374e-5f46-4113-9da9-f481aa25739c)
|
![image](https://github.com/user-attachments/assets/8468f191-a5da-4de4-86f1-e0aca10256b3)
|

</details>

<details><summary> Video </summary>


https://github.com/user-attachments/assets/c7e16206-39f5-413c-9eea-c0284350c4a3

</details>

## Why It's Good For The Game
More convenience plus a bit prettier.
The ability to view the contents of an order, even if some madman didn't
describe its contents in the description (those who did this are really
crazy)
Section with tabs scrolls on both 515 and 516
And little cleaner data receiving code

## Changelog

:cl:
qol: Supply console got little redesign, and ability to see what can be
inside a order.
code: Supply console and express supply console, now use a unified
method of acquiring data
/:cl:

---------

Co-authored-by: Ivory <[email protected]>
Co-authored-by: Jeremiah <[email protected]>

* Automatic changelog for PR #89198 [ci skip]

* Removes TRAIT_ALLOWED_HONORBOUND_ATTACK since it is deprecated (#89151)

## About The Pull Request

fixes https://github.com/tgstation/tgstation/issues/89149

## Why It's Good For The Game

This trait not only no longer is needed, but functionally allows for an
exploit! Let's get rid of it.

* Automatic changelog for PR #89151 [ci skip]

* Automatic changelog compile [ci skip]

* Forensic scanner UI and report format update (#89221)

## About The Pull Request

Added UI for the forensic scanner.

<details><summary>UI</summary>
<img alt="gRO2mae3E4"
src="https://github.com/user-attachments/assets/360832de-0485-4827-a4e1-957541cbf002"
/>
</details> 

<details><summary>Report</summary>
<img alt="99Y5ierj24"
src="https://github.com/user-attachments/assets/e14d221d-d5d0-42b1-8054-902f19780f1a"
/>
</details> 

## Why It's Good For The Game

Less things printing bunch of data in chat and using a proper UI
instead.

## Changelog

:cl:
qol: Added forensic scanner UI
qol: Made forensic scanner report format cleaner
/:cl:

---------

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

* Automatic changelog for PR #89221 [ci skip]

* Premium Internals Boxes station trait now has unique box sprites (#89296)

* Automatic changelog for PR #89296 [ci skip]

* Buffed solar panels to give more power, AND they are upgradable! (#88864)

## About The Pull Request

Buffed how much power solars make, and made them upgradeable!
## Why It's Good For The Game

Currently as it stands, its almost never worth the effort to set up
solars.

1. They take to long to set up. You can easily spend 10-20 minutes
setting up solars by yourself. You can setup the SM in less then 3.

2. The power they make is lackluster. 
A fully setup solar array on meta station is around 240 solar panels.
About 60 per array. For all the effort required to set them up, you get
(240 panels x 1.5kw) 360kw of power. That's anywhere from 1/3 to 1/5th
of the SMs power (about 1 - 1.5 mw). This is assuming they are all
running at full power, because they fluctuate depending on where the sun
is.


All this is to say that cant power the station with only solars. 

Therefore I'm buffing each solar panel to give 2.5kw instead of 1.5kw.
This means, by setting up the default amount of solars, you get (240
panels x 2.5kw) 600kw at best. About half of the SM.



You can now use different types of glass on solars to get more power off
them. Glass gives 2.5kw, titanium glass gives 5kw, plasma glass gives
7.5kw, plastitanium glass gives 10kw. 👍

## Changelog
:cl:
balance: solars now make 2.5kw each instead of 1.5kw
feature: you can upgrade solars using different non-reinforced glass to
get more power out of them (glass, titaniumglass, plasmaglass,
plastitaniumglass) (they also have sprites so you can tell which is
which)
/:cl:

* Automatic changelog for PR #88864 [ci skip]

* Makes the PENLITE mount actually charge defibs (#89299)

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

* Automatic changelog for PR #89299 [ci skip]

* Adds TGUI layout preference (For SmartFridge & Vending machines for now) (#89160)

## About The Pull Request
Added preference for layout selection in some interfaces such as
SmartFridge and Vending, where there is an option to switch between grid
view and list view

This should cut out the default layout selection dilemma in UI's, since
the selection will now be available to the user forever, not just until
the interface closes and resetting the selection

Also, Vending UI now use Grid layout by default

### How do i implement that to my UI?
Simple, just import all required stuff into your UI:
`import { getLayoutState, LAYOUT, LayoutToggle } from
'./common/LayoutToggle';`

Next, create state: `const [toggleLayout, setToggleLayout] =
useState(getLayoutState());`
`getLayoutState()` can accept value, Make sure you fill it, if have no
plans to handle layouts through DM, like in SmartFridge
`getLayoutState(LAYOUT.Grid)`. Returns LAYOUT.Default... by default

And finally, put a layout switch somewhere, for example in Section
buttons: `<LayoutToggle state={toggleLayout} setState={setToggleLayout}
/>`
Where `state` is the actual value of useState, and `setState` is the
function to set the state

After all theese little manipulations, you can finally dEsIgN your
beautifull UI with 2 layouts. Don't forget to use enum for this:
`<Button fluid={LAYOUT.List) />` for example.
Seems pretty simple

## Why It's Good For The Game
No more arguing what is better and what is more convenient, everyone is
free to choose for themselves

## Demo
<details><summary> Video </summary>


https://github.com/user-attachments/assets/5752e354-81b4-4bdb-acb2-7e228be0f90c

</details>

## Changelog

:cl:
qol: You can choose in preferences what layout use into the Smartfridge
or Vending machines: Grid or List. Default TGUI Layout preference. In
the future there may be more interfaces where there will be 2 layout
options. Also Vending UI now use Grid layout by default.
/:cl:

* Automatic changelog for PR #89160 [ci skip]

* fixes button in plane debugger [NO GBP] (#89294)

## About The Pull Request
fixes rebuild button i broke in
https://github.com/tgstation/tgstation/pull/89280
turns out it is case sensitive 
my mistake
## Why It's Good For The Game
good for debugging
## Changelog
none

* Automatic changelog compile [ci skip]

* [NO GBP] Fixes fishing UI jank (#89308)

## About The Pull Request
A typo resulted in center part of fishing bar not showing up

## Changelog
:cl:
fix: Fixed partially missing fishing UI
/:cl:

* Automatic changelog for PR #89308 [ci skip]

* Adds fishing bags, resprites fishing lines and bobber (#89300)

## About The Pull Request

Adds two new fishing bags: normal and carpskin. Normal fishing bag can
be bought from the fun vendor in the library, and is capable of holding
up to 10 normal fish (and only fish), but it does not preserve them
unlike stasis containers or portable aquariums. Carpskin fishing bag can
hold up to 14 normal-sized fish and needs to be crafted using 3 carp
skins, but is also capable of fitting fishing lines, hooks and lures.


https://github.com/user-attachments/assets/80e333f5-4388-40c7-a31b-3384b96c21a1

Also resprited four normal reels and the fishing bobber:


![image](https://github.com/user-attachments/assets/d518d5ab-2081-46bb-b088-4f6a2e8be6be)


![image](https://github.com/user-attachments/assets/97f9686c-1209-458a-893a-cd7c2f08f714)

Additionally, while I'm at it I've added the generator aquarium upgrade
to service and science lathes.

## Why It's Good For The Game

There's currently no good way to store smaller fish, especially when
you're planning to use it as bait, so you usually end up making a mess
of the room you're currently in. Carpskin bag is also a good way to
organize your fishing gear without cluttering up your bag.

While the aquarium upgrade is technically only used to generate power,
it doesn't make sense to restrict it to engineering lathe only as its
usually service and sometimes science who do fishing instead.

## Changelog
:cl:
add: Added fishing bags, found in fun vendors or made from carpskin.
balance: Added the generator aquarium upgrade to service and science
lathes.
image: Resprited reels and bobber
/:cl:

* Automatic changelog for PR #89300 [ci skip]

* Fixes glowsticks not working (#89304)

## About The Pull Request

#88909 broke glowsticks

## Changelog
:cl:
fix: Fixed glowsticks not working
/:cl:

* Automatic changelog for PR #89304 [ci skip]

* Converts pixel_x offsets on fish to pixel_w (#89298)

## About The Pull Request

Fixes large fishes going behind wallmounts like here

![image](https://github.com/user-attachments/assets/22f1f192-2c09-491a-948a-16c01b4467ec)

## Changelog
:cl:
fix: Large fish should not render behind their wall mounts now
/:cl:

* Automatic changelog for PR #89298 [ci skip]

* Gets rid of mobile hollow bioscramblers spawning in the anomaly research ruin. (#89303)

## About The Pull Request

What it says on the tin. Mobile anomalies still spawn in and around the
ruin, but never bioscramblers.

## Why It's Good For The Game

A) These fucking things cannot be disabled by conventional means. It
needs anomaly research.

B) They drift through space away from the ruin literally every single
time the ruin spawns. They are meant to be an environmental hazard for
the ruin, not for the entire playing space because a remote ruin
spawned.

C) Because they are not blocked by walls, they will keep drifting until
eventually arriving on the station, where they will stay there.
Typically occupying a space perpetually until a scientist comes and
fixes the problem with their anomaly neutralizer.

The only reason this happened was because of bioscramblers being
reworked into the state they are now. I don't imagine the original
creator intended for the ruin to create problems for the wider round
like this.

## Changelog
:cl:
del: Mobile hollow bioscramblers no longer spawn from the anomaly
research ruin, sparing everyone from the inevitable unannounced arrival
of a permanent hollow bioscrambler aboard the station. You maybe still
encounter immobile bioscramblers in the ruin, however.
/:cl:

* Automatic changelog for PR #89303 [ci skip]

* Fix showers (#89285)

<!-- Write **BELOW** The Headers and **ABOVE** The comments else it may
not be viewable. -->
<!-- You can view Contributing.MD for a detailed description of the pull
request process. -->

## About The Pull Request
Fixes #89261 by adding the thing
This loop was present prior to #88465 , but it seems like it was deleted
by accident together with some check
<!-- Describe The Pull Request. Please be sure every change is
documented or this can delay review and even discourage maintainers from
merging your PR! -->

## Why It's Good For The Game
Bug fix
<!-- Argue for the merits of your changes and how they benefit the game,
especially if they are controversial and/or far reaching. If you can't
actually explain WHY what you are doing will improve the game, then it
probably isn't good for the game in the first place. -->

## Changelog

<!-- If your PR modifies aspects of the game that can be concretely
observed by players or admins you should add a changelog. If your change
does NOT meet this description, remove this section. Be sure to properly
mark your PRs to prevent unnecessary GBP loss. You can read up on GBP
and its effects on PRs in the tgstation guides for contributors. Please
note that maintainers freely reserve the right to remove and add tags
should they deem it appropriate. You can attempt to finagle the system
all you want, but it's best to shoot for clear communication right off
the bat. -->

:cl:
fix: showers wash things under them when they're turned on again
/:cl:

<!-- Both :cl:'s are required for the changelog to work! You can put
your name to the right of the first :cl: if you want to overwrite your
GitHub username as author ingame. -->
<!-- You can use multiple of the same prefix (they're only used for the
icon ingame) and delete the unneeded ones. Despite some of the tags,
changelogs should generally represent how a player might be affected by
the changes rather than a summary of the PR's contents. -->

* Automatic changelog for PR #89285 [ci skip]

* Medbot emag spark overlay fix [NO GBP] (#89287)

## About The Pull Request


https://github.com/user-attachments/assets/38218bb2-d38c-4698-afff-db75dde0597c

I've used flick() which flicked the medbot icon itself instead of adding
a spark overlay on top of it.

## Why It's Good For The Game

Fix

## Changelog

:cl:
fix: Fixed medbot emag VFX
/:cl:

---------

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

* Automatic changelog for PR #89287 [ci skip]

* Convert all traits given by status effects to use `TRAIT_STATUS_EFFECT(id)` (#89291)

## About The Pull Request

This makes (almost?) all traits given by status effects use
`TRAIT_STATUS_EFFECT(id)` as their source, rather than the previous mix
of `id`, `type`, `REF(src)`, or some bespoke thing.

## Why It's Good For The Game

Consistency is good.

## Changelog

No user-facing changes

* fix: oldstation fluff microfix (#89281)

## About The Pull Request

Replaced "Singularity Generation Disk" with "Supermatter Crystal Shard"
(and the space in front of the "prototype modsuit" has been removed,
because it doesn't look pretty.)

## Changelog
:cl:
spellcheck: Replaced the words "Singularity Generation Disk" with
"Supermatter Crystal Shard" on a paper found by the old station ruin, to
match the contents of the inventory room.
/:cl:

* Automatic changelog for PR #89281 [ci skip]

* Automatic changelog compile [ci skip]

* Fix unscrollable lathe UI on 516 (#89312)

## About The Pull Request

The UI for lathes is broken in 516 ATM, the scrollbar doesn't scroll
below the lowest visible item, and the materials under the items aren't
visible either.
I tested this on 515 as well and it didn't seem to break anything or
change behavior that I could tell.
## Why It's Good For The Game
It's good when things work

![image](https://github.com/user-attachments/assets/220170e2-f579-4373-9e0b-498ce8188c10)
## Changelog
:cl:
fix: Lathes interfaces are no longer unscrollable on 516
/:cl:

* Automatic changelog for PR #89312 [ci skip]

* Fix the "Debug Controller" verb (#89301)

## About The Pull Request
The "Debug Controller" verb wasn't doing anything. You'd click on it,
and nothing would happen.

Turns out, it was searching for controllers in the wrong place -
controllers are considered globals, not part of `/world`.

This PR fixes that. Now you get this fancy box instead of nothing:


![image](https://github.com/user-attachments/assets/af4d76d2-0ad4-4549-8606-8b423762c700)

(As an aside - choosing the Global Variables controller causes several
seconds of lag, due to the mass amount of data that needs to be
rendered. Perhaps a new verb should be added specifically for going
through Global Variables?)


## Why It's Good For The Game
Enables coders to debug the various controllers with less need for debug
printing statements.

## Why It's Terrible For The Game
Enables admins with debug permission to abuse the live server even
harder.

## Changelog
No player-facing changes. This regards a verb that should only be used
during debugging (i.e. locally).

* Fixes dropdown names in prefs [No gbp] (#89283)

## About The Pull Request
Troubleshooting an issue with @vinylspiders revealed this component
wasn't working properly for us either.

displayNames doesn't like being assigned in a useEffect so it never
really has a value. I've fixed it, it's working, it's also more
idiomatic react
## Why It's Good For The Game
This should fix prefs showing up as "male" "female" instead of being
properly converted via display names
## Changelog
:cl:
fix: Character pref dropdowns should have their display names fixed
/:cl:

* Automatic changelog for PR #89283 [ci skip]

* Fixes persisting brimbeams (#89318)

## About The Pull Request

If a brimdemon gets destroyed instantly, their beams would persist
because of a runtime here as owner in actions can be null.

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

## Changelog
:cl:
fix: Fixed an issue with persisting brimbeams
/:cl:

* Automatic changelog for PR #89318 [ci skip]

* Increases the base force of standard toolboxes by exactly one. (#89302)

* Automatic changelog for PR #89302 [ci skip]

* Fix the chat reliability subsystem (#89316)

* Automatic changelog for PR #89316 [ci skip]

* Automatic changelog compile [ci skip]

* Fixes MOD holster having required slots which prevent it from working without basically fully deploying anyway (#89239)

## About The Pull Request

Originally, this module could be activated while the core was inactive.
Now, it doesn't because it needs you to deploy the vast majority of your
modsuit even while inactive. Kind of lame.

This corrects that so you can still deploy your firearm without the suit
being more or less deployed.

## Why It's Good For The Game

Looks like a copy-paste job to me. Or not understanding what this module
was. Hard to say.

## Changelog
:cl:
fix: Allows MOD holsters to once again activate while the modsuit is
inactive and undeployed.
/:cl:

* Automatic changelog for PR #89239 [ci skip]

* Adds trailing comma to lists/canisters.dm and removes single letter vars from cargo/exports/large_objects.dm (#89273)

## About The Pull Request
title
## Why It's Good For The Game
slightly better code quality?
## Changelog
not player facing

* Automatic changelog compile [ci skip]

* Map Vote printout has a tooltip explaining where the tallies are coming from (#89236)

## About The Pull Request

Hovering over `Current Tallies` offers a tooltip explaining how they
work

## Why It's Good For The Game

The Tallies aren't an immediately obvious system so this should help
people understand it

## Changelog

:cl: Melbert
qol: Map vote tallies explains how they work if you hover them
/:cl:

---------

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

* Automatic changelog for PR #89236 [ci skip]

* Automatic changelog compile [ci skip]

* Improvements to the Syndicate Lavaland base (#89231)

## About The Pull Request

Makes the Lavaland Syndicate base more sustainable without its crew.
Now, two more turrets guard previously unchecked access points, so
miners have to put some effort in something other than crossing the
lava.
On top of that, RTGs now generate 20kW of power, same as abductor and
debug ones, removing the need for the turbine to be set up every time.
Finally, the Syndicate agents inside now get a full mechanical toolbox
in their rooms, so they can break out if a miner managed to enter the
base and wall off their rooms.

On top of all that, a message monitoring console has been added to the
only telecomms random room that didn't have it, and its atmosphere has
been sealed off from outside (which it wasn't for some reason).
Finally, a single defibrillator has been added to the medbay

## Why It's Good For The Game

The base, despite being a decent ghost spawn, would be borderline
unrecoverable if it didn't get crew early in the shift.
Power-wise, the RTG output was insufficient, and APCs would start losing
power, until the entire base was practically non-functional. Setting the
turbine at this point was also marginally harder than before, which made
getting out of the powerless state unnecessarily hard.

Talking about the turbine, it's a deathtrap if the crew doesn't know
what they're doing. It not being necessary anymore would help the
operator stay alive and be able to do whatever they joined to do.

And now, even if you do die, you can be revived by your comrades with
the new defibrillator available in the base's medbay.

On the topic of defenses, it was rather easy for a miner with an RCD or
a lava boat to cross the lake, take all the loot with minimal effort,
and wall the agents inside. This is now slightly harder due to the
additional turrets.
On top of that, if a miner does manage to break in and take everything,
a simple wall won't lock the operatives in anymore, since they now have
tools to break out.

Finally, the changes to the telecomms random rooms seek to let the comms
agents do roughly the same things, most importantly, mess with the PDA
messages.

## Changelog

:cl:
map: The Syndicate Lavaland base has been generally improved, with more
defenses and comms equipment.
/:cl:

* Fixes another two missing areas on icebox (#89337)

## About The Pull Request


![image](https://github.com/user-attachments/assets/4ba1efb9-eac4-4300-a5ca-77e30bef6f7b)

## Changelog
:cl:
fix: Fixed another two missing areas on icebox
/:cl:

* Automatic changelog for PR #89231 [ci skip]

* Automatic changelog for PR #89337 [ci skip]

* Adds cooling loops and cold tiles to all kitchen freezers (#89245)

## About The Pull Request

Makes all freezers cold roundstart (wasn't the case for Meta, Delta and
Birdshot) and adds cooling loops to all freezers (those were missing
from all maps bar Meta and Delta)

This is a commission for @RaveRadbury 

<details>
  <summary>Previews</summary>


Birdshot:


![image](https://github.com/user-attachments/assets/f00d01aa-016e-478e-992a-99722a882ea5)

NebulaStation:


![image](https://github.com/user-attachments/assets/ca6e4134-d0a2-4108-aec3-8b453a3bef07)

Tramstation:


![image](https://github.com/user-attachments/assets/e349a7f1-04a4-493c-b919-6101476f5e1e)

Wawastation:


![image](https://github.com/user-attachments/assets/355a7199-bfc7-4256-a823-faf42e638275)

Icebox has a temperature unit-less loop, instead utilizing natural cold
of the ice moon:


![image](https://github.com/user-attachments/assets/aaa5ace7-b0fe-45ed-a06c-fe4d9a804f3d)

</details>

## Why It's Good For The Game

Map parity, makes sure that all freezers are naturally cold and stay
that way throughout the shift.

## Changelog
:cl:
map: Added cooling loops and cold tiles to all kitchen freezers that
were missing them
/:cl:

* Automatic changelog for PR #89245 [ci skip]

* Fixes plant analyzer attack chain heck (#89352)

## About The Pull Request

Closes #89187

## Changelog
:cl:
fix: Fixed plant analyzers not being placeable on tables/in backpacks
/:cl:

* Automatic changelog for PR #89352 [ci skip]

* Fix blades equipped to a void cloak having visible sprites (#89343)

## About The Pull Request

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

This adds a new item trait, `TRAIT_NO_WORN_ICON`, which is exactly what
it says on the tin - the worn overlay for said item will not be added
when the trait is present, so we give it to items hidden by the hood.

I also refactored the `EXAMINE_SKIP` item flag into
`TRAIT_EXAMINE_SKIP`.

![2025-02-03 (1738625986) ~
dreamseeker](https://github.com/user-attachments/assets/5e6fec83-580b-419c-a2c6-9dd388471fec)

## Why It's Good For The Game

stealth thing having an obvious sprite tell is bad. bugfix good.

## Changelog
:cl:
fix: Void Cloaks now properly hide blades and such in the suit storage
from the wearer's sprite.
/:cl:

---------

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

* Automatic changelog for PR #89343 [ci skip]

* Fix more 516 admin byond hrefs (#89350)

## About The Pull Request
Randomly spotted this while lookign at something else

## Changelog
:cl:
fix: fixed some admin links not working on 516
/:cl:

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

* Automatic changelog for PR #89350 [ci skip]

* Fixes state laws on 516 (#89347)

## About The Pull Request
Title.

Fixes:

![image](https://github.com/user-attachments/assets/2ffa9c78-68e1-4451-b50e-b66369c7c0d5)
## Why It's Good For The Game
Because it is  good to have functioning UI
## Changelog
:cl:
fix: fixed state laws window on 516
/:cl:

* Automatic changelog for PR #89347 [ci skip]

* AI mobs won't suicide every time they ventcrawl (#89328)

## About The Pull Request

Some kind of refactor to how AI behaviours work kind of messed this one
up, all of its return values that ended the proc and stopped the suicide
timer were relying on a return value... from a proc called in a timer
that could never possibly get sent as the return value for the relevant
proc.
I fixed it to just call `finish_behaviour` instead.

## Changelog

:cl:
fix: AI-controlled ventcrawling mobs (botanical spiderlings and legioned
monkeys) can once more do so without killing themselves shortly
afterwards.
/:cl:

* Fixes incorrect power consumption on reagent grinders (#89336)

## About The Pull Request

Only place where I found this. SECONDS is *10, so this instead
multiplied the value by 10 rather than divided it

## Changelog
:cl:
fix: Fixed incorrect power consumption on reagent grinders
/:cl:

* Automatic changelog for PR #89328 [ci skip]

* Automatic changelog for PR #89336 [ci skip]

* Implements the missing bezerk medbot skin (#89351)

## About The Pull Request


![image](https://github.com/user-attachments/assets/2dd6f05c-8d45-46d7-90a9-b9c87ce3342f)

#89341 resprited medbots but didn't resprite the bezerk bot, despite
tactical medkits still applying said skin.
Also removed an unused trait

Closes #89341

## Why It's Good For The Game

Missing sprites are bad

## Changelog
:cl:
fix: Tactical medkits should no longer create invisible medbots
image: Implemented the missing bezerk medbot skin
/:cl:

* Automatic changelog for PR #89351 [ci skip]

* Fixes more scrollables for 516 (#89325)

## About The Pull Request

I was looking at https://github.com/tgstation/tgstation/pull/89312
(Ghommie merged it while I was looking at it lol, this would've been a
comment otherwise) and noticed a few problems:

1. There's other instances of ``style={{ overflow: 'auto' }}`` in the
code, I checked them and they don't work, this fixed one instance of the
3 that exists.
2. Autolathes have 2 scrollbars, one for the whole UI and one for the
item list (3 actually, one on the left for the sections)

This fixes all instances, and uses overflowY instead of scrollable so it
isn't there permanently.
Also removes the unnecessary scrollbar to Autolathes.

## Why It's Good For The Game

Fixes more UIs for 516 and removes unnecessary and annoying scrollbar
from autolathes.

## Changelog

:cl:
fix: Autolathes no longer have a scrollbar that sends you off the
screen.
fix: Exosuit fabricators' queue list & Techfab/Autolathe's left side
(with the sections of printables) now have a scrollbar when the full
list doesn't fit on the UI for 516 users. Techfab/Autolathe also now
does this for the list of items too, instead of always having one.
/:cl:

* Fixes stunprod's missing inhands sprite (#89339)

## About The Pull Request
Closes #89338

## Changelog
:cl:
fix: Fixed stunprod's missing inhands sprite
/:cl:

* Automatic changelog for PR #89325 [ci skip]

* Automatic changelog for PR #89339 [ci skip]

* [no gbp] fixes virtual pet app changing PDA's colors when open (#89333)

## About The Pull Request
PDAs no longer go white when the virtual pet app is opened

## Why It's Good For The Game
fixes virtual pet app changing PDA's colors when open

## Changelog
:cl:
fix: fixes virtual pet app changing PDA's colors when open
/:cl:

* Automatic changelog for PR #89333 [ci skip]

* Optimizes `/proc/icon_exists()` (#89357)

## About The Pull Request
This PR reimplements https://github.com/tgstation/tgstation/pull/71538
atop `master`. Quoting the original PR:

> Every `icon_exists()` call will cache the entire file. Past me didn't
realise _why_ file opts were so expensive, but I do now. This is
immeasurably slower on a single call, and _significantly_ faster on
subsequent calls to the same file.

I attempted to handle some of the review comments that were posted
there, by splitting screaming functionality into its own proc.

* `if(icon_state in icon_states(file))` and `if(!(icon_state in
icon_states(file)))` were refactored to use `icon_exists(file,
icon_state)`.
* Where screaming was seemingly wanted (and where there wasn't a more
descriptive error inside the `if` block), I refactored them to use
`icon_exists_or_scream(file, icon_state)`
* The exception to the above was under
`/datum/unit_test/turf_icons/Run()` and
`/datum/unit_test/worn_icons/Run()`, where `icon_states()` was being
passed a mode flag. Given that this is only used in unit tests (where
performance isn't a priority), I opted to leave these be.

Additionally, I revised the documentation comment for
`/proc/icon_exists()`, as I felt it was a bit vague currently.

## Why It's Good For The Game
https://youtu.be/Z9G1Mf6TZRs

## Changelog
No player-facing changes (hopefully).

---------

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

* Fix silicon state laws window for 516 (#89354)

## About The Pull Request

Switch the state laws UI for silicons to use the browser datum cause
it's just raw HTML on 516

## Why It's Good For The Game

They gotta state those laws

## Changelog

* Temporary bodies return players to minds without bodies (#89323)

## About The Pull Request

There are a couple of cases where ghost roles that give the temporary
body component prevent you from returning to the round when they really
shouldn't. The particular cases are:
- You entered a temporary body while you had no body, but could be
recovered via means such as podcloning
- You enter a temporary body, and while in that body, your original body
is permanently removed while your mind could be recovered via means such
as podcloning
- Basketball

This PR addresses those cases by allowing the temporary body component
to operate with a null `old_body`, and allowing the temporary body
component to be given to ghosts whose minds don't have bodies.


## Why It's Good For The Game

Erroneous DNRs caused by code oversights are probably very undesirable
to the playerbase.

## Changelog

:cl:
fix: Joining a minigame or taking certain ghost roles, while you have a
mind without a body, will no longer DNR you, just in case you can be
resurrected by some means.
fix: If your old body is permanently destroyed while you are playing a
minigame or as certain ghost roles, you will still return to your
character's original mind, just in case you can be resurrected by some
means.
fix: The basketball minigame now gives its players and referee temporary
bodies.
/:cl:

* Fix runtimes with `REMOVE_TRAITS_IN` (#89344)

## About The Pull Request

ok so `REMOVE_TRAITS_IN` would sometimes run with like `type mismatch:
null -= /list (/list)`

credit to @RikuTheKiller for actually figuring this out and fixing it,
here's their explaination on what caused the issue:
> okay so
> its due to linked traits
> like knocked out which adds other traits
> when knocked out is removed, it sends a removed signal
> but sending that signal modifies the list mid for loop
> so now when it tries to index it on the next iteration with a trait
key thats already gone
> it returns null, and tries to remove a list from a null
> and it runtimes

## Why It's Good For The Game

`REMOVE_TRAITS_IN` is a handy macro, and it'd be nice if it reliably
worked

## Changelog

no user-facing changes

* Automatic changelog for PR #89323 [ci skip]

* Cleanup supply packs contents (#89342)

## About The Pull Request

fix image display in `NT IRN` PDA app


<details>

<summary>
Images present!
</summary>


![image](https://github.com/user-attachments/assets/b9a5e733-9bc8-498e-bdaa-3531e0b142e5)
</details>





## Why It's Good For The Game

Bug fixes good

## Changelog

:cl:
fix: fix image display in `NT IRN` PDA app for preview and contents
/:cl:

* Automatic changelog for PR #89342 [ci skip]

* Fixed wrong area/wall in Icemoon Underground - Round 3 (#89356)

## About The Pull Request


![StrongDMM_u12oSaxu6Q](https://github.com/user-attachments/assets/72df4f86-f0fb-4254-99c8-85b23701ac91)

(No funny screenshot of me malding in-game this time)

## Changelog
:cl:
fix: Fixed wrong area/wall in Icemoon Underground
/:cl:

* Automatic changelog for PR #89356 [ci skip]

* Automatic changelog compile [ci skip]

* Small heretic patch (#89369)

## About The Pull Request

Reported by https://github.com/ParadiseSS13/Paradise/pull/27873 ,
shoutout to them

We used to check this in the distant past but it was lost across the
reworks. Kinda important

* Add a `DISABLE_DREAMLUAU` define, for disabling dreamluau at compile-time (#89359)

## About The Pull Request

this adds a new define, `DISABLE_DREAMLUAU` (commented out by default),
which does... exactly what it say…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Fix Rewrites a bug so it appears in different circumstances
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants