Skip to content

Add support for timing out HTTP calls #210

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

Merged
merged 1 commit into from
Mar 26, 2025

Conversation

Cyberboss
Copy link
Member

/tg/ TTS is fucked and hanging requests which is blocking shutdown.

Add support for optional timeouts

Copy link
Collaborator

@ZeWaka ZeWaka left a comment

Choose a reason for hiding this comment

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

I assume you want this to go out in 3.x and not 4.x, correct?

@Cyberboss
Copy link
Member Author

Yeah it should be backwards compatible, assuming serde doesn't error on missing JSON fields

Copy link
Collaborator

@ZeWaka ZeWaka left a comment

Choose a reason for hiding this comment

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

this really should be documented in http.dm but nothing is currently and this is somewhat urgent

@ZeWaka ZeWaka merged commit dcf0fd8 into master Mar 26, 2025
4 checks passed
@ZeWaka ZeWaka deleted the BRUH_FORGOR_TO_TICK_UP_THE_CLOCK branch March 26, 2025 17:57
LemonInTheDark pushed a commit to tgstation/tgstation that referenced this pull request Mar 28, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
vinylspiders pushed a commit to NovaSector/NovaSector that referenced this pull request Mar 29, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
hyperjll pushed a commit to hyperjll/tgstation that referenced this pull request Mar 29, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (tgstation#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
vinylspiders pushed a commit to NovaSector/NovaSector that referenced this pull request Mar 29, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
Iajret pushed a commit to Fluffy-Frontier/FluffySTG that referenced this pull request Mar 29, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
Iajret added a commit to Fluffy-Frontier/FluffySTG that referenced this pull request Mar 29, 2025
* Automatic changelog for PR #89865 [ci skip]

* Autolathes now accept alloys without disassembling them into their components (#90086)

## About The Pull Request
Custom material designs cannot be printed with plasteel and other alloys
because of this small issue. This should fix it.

## Why It's Good For The Game
See above.

## Changelog

:cl:
fix: Custom material toolboxes and fishing rods can now be printed with
alloys such a plasteel and plasmaglass.
/:cl:

* Automatic changelog for PR #90086 [ci skip]

* Fix try inject message (#90148)

## About The Pull Request

Lack of `parse_zone` moment

## Changelog

:cl: Melbert
fix: Failing to inject no longer prints a strange message
/:cl:

* Automatic changelog for PR #90148 [ci skip]

* Refactors air alarm + minor tweaks (#89969)

## About The Pull Request
Air alarm had a uselocalstate that i wanted to remove. I can't keep my
grubby hands off refactoring this >500 line UI so it's now broken down
into files and you get some qol out of it. check the pics

<details>
<summary>photos</summary>

faults had the wrong text color (it's good not green) so they now match
![Screenshot 2025-03-10
151302](https://github.com/user-attachments/assets/795be502-3928-4907-a809-f4463522d96c)

the back button is now disabled when there's no where to return (oh
no!), like at the home screen
![Screenshot 2025-03-10
155439](https://github.com/user-attachments/assets/1f4abb26-3a70-4770-987c-23e73de61637)

instead of plaintext "nothing to show" you get a nicer noticebox
![Screenshot 2025-03-10
154040](https://github.com/user-attachments/assets/3d12bfab-edeb-40bd-8844-d8af4695df44)

i removed the scrollbar from the entire window content, now only the
section scrolls, this is particularly noticeable at thresholds by
default. they're also candystriped now
![Screenshot 2025-03-10
154354](https://github.com/user-attachments/assets/f2d06b90-ed57-4ee8-8799-76f48d8206c4)

the dialog window for changing a threshold now covers the entire screen
rather than that section
![Screenshot 2025-03-10
154123](https://github.com/user-attachments/assets/6613f6db-3151-4bb1-964d-7ca98e358775)

</details>

## Why It's Good For The Game
Removed more uselocalstate + minor UI bug fixes + refactor
## Changelog
:cl:
fix: The air alarm has been refactored and had some slight UI
improvements. Please report any issues to the github!
/:cl:

* Automatic changelog for PR #89969 [ci skip]

* Adds GAGS fedoras, updates all other fedora sprites to match the Detective's (+ other related tweaks) (#90132)

## About The Pull Request
First just to get it out of the way, yippee, greyscale fedoras.
Available in the Clothesmate. Now you can make a hat to match those
custom buttondowns+suitjackets we already have.

![image](https://github.com/user-attachments/assets/98f1c53b-058e-4244-ac04-45197da6ccba)

However, because so many of the fedoras pair with other sprites, I
couldn't just make all of them greyscale. Then they wouldn't quite
match!
So I've updated them all - most of the on-mobs are just slight tweaks to
shading so they (as mentioned) match the detective fedora.
The obj sprites were also changed - most are the newer sprite (again,
detective's) but I opted to keep the Reporter and Curator fedoras as
slightly updated old ones because those in particular feel cooler to
have the wide-brims and the angle.

![image](https://github.com/user-attachments/assets/904a0da8-a134-4629-b8ea-56ee07b6ed18)

**Additional changes you might notice in the screenshot:**
- Beige Suit had its contrast just _barely_ tweaked to match the fedora.
- Carpskin hat has like 3px changed because they were stray/inconsistent
- Curator's `treasure hunter jacket` had its color changed to pair with
the hat. As it was, the hat being the same color would have been near
identical to the detective's, and this actually matches up with the
intended reference better too. (Plus it inadvertently matches the boots)
- All the hats are down 1px to match the detective. With hair masks, it
looks a **lot** better over hair now...
<details><summary>However, for spritetainer's curiosity, this is the
comparison of how it'd look if they were all up 1px</summary>

![image](https://github.com/user-attachments/assets/36a99466-05ab-4474-ae40-19ec190a0b1b)

</details>

<details><summary>I also had to slightly alter the mask because it
originally cut off 1px too much.
No visual change on the only other hat that uses it (the sec helmet)
</summary>

![image](https://github.com/user-attachments/assets/13d95e08-87aa-4bce-9c8b-bb5420f0f3b1)

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

**Greyscale Fedoras**
We #love customization. Players can already make their own suits, why
not their own hats to match?

**All the resprites**
Having all of the fedoras looking similar is nice, especially with the
onmob sprites' shading and obj sprites' shapes. Helps players associate
the items with each other better. Plus, the curator's was _really_
soulful.

As for the curator's jacket, I feel having it not be as similar to the
detective's palette will make it stand out more as the unique item it
is. It's a treasure hunter. Give them the admiration they deserve.

**Height/Hairmask**
The height is consistency - one fedora being lower than the other is
confusing and almost looks like a bug.
The hairmask solves the issue that lowering them previously caused - no
more severe clipping with hair.
## Changelog
:cl:
add: Added greyscale Fedoras, available in the Clothesmate!
image: Resprited most of the Fedoras - now they'll all be much more
consistent with the detective's updated and sleek ones. They also all
have a hairmask now, so hair will no longer clip with them!
image: To pair with this, the Beige suit has been just slightly tweaked
and the Curator's "Treasure Hunter Jacket" entirely recolored to better
match their fedoras.
/:cl:
# Conflicts:
#	code/modules/unit_tests/screenshots/screenshot_antag_icons_spy.png

* Automatic changelog for PR #90132 [ci skip]

* Adds new sprites for the civilian bounty pad and pirate bounty pad. (#89957)

## About The Pull Request

As it says on the tin, this PR is a new set of sprites predominantly for
the civilian bounty pad.


![image](https://github.com/user-attachments/assets/5080a629-d274-4ca3-954e-4deef9546070)

## Why It's Good For The Game

The original bounty pads were old work of mine and haven't aged the most
gracefully, this should hopefully make them look a lot nicer, with a
better contrasting palette.

## Changelog

:cl:
image: The civilian bounty teleporter pad and pirate bounty pads now
have new sprites.
/:cl:

* Automatic changelog for PR #89957 [ci skip]

* Makes fishing rods with higher (or lower) bait speed a smidge easier to control in the minigame (#90011)

## About The Pull Request
While the bait overlaps the fish during the minigame, the change in
velocity will be further cut down or amplified for fishing rods that
have higher or lower speed multiplier than the identity (1).

## Why It's Good For The Game
Fishing rods that are supposed to be better are also made slighly more
annoying or finnicky by their speed multiplier.

## Changelog

:cl:
balance: Makes fishing rods with higher (or lower) bait speed a smidge
easier to control during the minigame
/:cl:

* Simplifies fish traits inheritability a little (#90014)

## About The Pull Request
I'm thinking of removing some of the redundant or unnecessary bad design
from fishing, especially aquariums, which are definitely a bit fringe
and difficult to attend to on top of other stuff. However I don't have
all time of the world so I'd rather start small, even if it isn't the
main obstacle (which is keeping fish alive and getting them to reproduce
in the first place).

Thinking about it, the fact that some traits have a chance not to be
passed down to the offspring even if both parents have them is plain bad
and it's led situations where I couldn' tell if it was a bug or a
feature. The solution? Forgo the probability check for traits shared by
both parents.

## Why It's Good For The Game
Clearly that was bad design. 

## Changelog

:cl:
balance: Made fish traits inheritability easier. They're now guaranteed
to be passed down to offsprings if both parents have them.
/:cl:

* Automatic changelog for PR #90011 [ci skip]

* Automatic changelog for PR #90014 [ci skip]

* Repair Bots now respect NODROP sheets (#90175)

## About The Pull Request
Repair bots, when receiving sheets, now use `transferItemToLoc()` rather
than `forceMove()`, which means they now respect things like NODROP.
Thus, borgs can no longer lose their glass sheet tool into the bot.
## Why It's Good For The Game
Fixes #89737
## Changelog
:cl:
fix: Sheets of materials with NODROP can no longer be given to repair
bots.
/:cl:

* Do_after cogs inherit mob alpha (#90174)

## About The Pull Request

While testing #90173 I noticed that the cogs created by the progress bar
in the voidwalker's "space dive" ability are completely visible even
while the mob is invisible, meaning you see a very clear pair of gears
floating in space which is quite silly.

Initially I just set this progress bar to hidden, but then I thought
"well what if you're not invisible while doing it?" as technically
voidwalkers can become visible even while in space if engaged in a
fight.
Instead I elected to make the visible effect inherit the alpha that the
mob had when it started acting. I haven't _quite_ thought through every
case where this would come up, but I'm assuming that if a mob is hard to
see then the things it is doing... should probably also generally be
hard to see? This is a bit of a buff to various forms of invisibility
which also let you act, but do_afters also weren't visible when most of
those were added, so I don't know how much of a balance concern it
actually is.
But I'm thinking... it's probably fine!

If this isn't liked then I can do something else specific to my one use
case instead I guess.

## Why It's Good For The Game

If you can't see the mob how can you see what it is doing?

## Changelog

:cl:
balance: The action animation indicating someone is performing an action
with a progress bar now inherits how visible they are. You won't easily
see a pair of gears floating in space if a Voidwalker starts diving
under the station.
/:cl:

* Fixes PDA / Bag actions (#90172)

## About The Pull Request

These have multiple slots you'd use them from

## Changelog

:cl: Melbert
fix: PDA flashlight action button is given in any slot
fix: Bag action button is given in any slot
/:cl:

* fix inverted autolathe check (#90170)

## About The Pull Request

Inserting disks into the autolathe would only work if you interrupted
the do_after, because the check was inverted.
Now it isn't.

## Changelog

:cl:
fix: Disks will now be inserted into the autolathe if you successfully
insert them, rather than if you do not succeed in inserting them.
/:cl:

* "S"pellcheck for massses (#90161)

## About The Pull Request

![image](https://github.com/user-attachments/assets/adb932be-dbc0-425e-83f9-c29c87cdd09c)
massses
## Why It's Good For The Game
~~1 free gpb~~ spellcheck
## Changelog
:cl:
spellcheck: fixed a typo in actor role conditions
/:cl:

* If you are upside down, you ignore elevation (#90147)

## About The Pull Request

If you have the `UPSIDE_DOWN` movetype, you ignore elevation changes.
Cuz yknow, you're on the roof.

## Changelog

:cl: Melbert
fix: Being atrocinated ignores elevation from tables and such
/:cl:

* Fix an edge-case that could result in heretic mark effects not being removed (#90140)

## About The Pull Request

So, last night, I discovered an interesting edge-case after being
attacked by two heretics: if you have a mark applied, then a heretic on
a different path also applies a mark, the second mark will replace the
first _without the effects from said mark being cleaned up_. This could
lead to, for example, permanent pacifism if the first mark was the moon
path mark.

This makes it so heretic mark status effects are _properly_ removed
before being replaced.

## Why It's Good For The Game

bugged permanent pacifism sucks

## Changelog
:cl:
fix: Fixed an edge-case where, if two heretics of different paths
applied a mark to the same person, the effects from the first mark (i.e
moon path's pacifism) would likely be permanent.
/:cl:

* Automatic changelog for PR #90175 [ci skip]

* Automatic changelog for PR #90170 [ci skip]

* Automatic changelog for PR #90174 [ci skip]

* Automatic changelog for PR #90161 [ci skip]

* Automatic changelog for PR #90147 [ci skip]

* Automatic changelog for PR #90140 [ci skip]

* Fixes sanity hallucinations not working after 3 years (#90179)

## About The Pull Request

So #70311 never actually did anything because it used SANITY_CRAZY and
not SANITY_LEVEL_CRAZY, and sanity_level only goes up to 6 (SANITY_CRAZY
is 25).

Yeeeah.

## Why It's Good For The Game

Its supposed to be a rare cool low sanity effect but because of an
oversight it never worked, so see original PR's justification?

## Changelog
:cl:
fix: Being at low sanity will actually give your hallucinations as
intended.
/:cl:

* Cleans up crafting code, fixes multiple bugs (#90157)

## About The Pull Request
Cleaned up an unnecessary proc on base crafting datum, fixed balloon
sutra-exclusive items being craftable by anyone, air sensors being only
craftable via search, crafters adding a second comma when failing to
craft something and missing capitalization in slapcrafting errors.

## Changelog
:cl:
fix: You can no longer craft balloon armor and weapons without knowing
Balloon Sutra
fix: Air sensors now show up in atmospherics category
spellcheck: Fixed grammar/capitalization in crafter/slapcrafting error
messages
code: Cleaned up some crafting code
/:cl:

* Robotact is now at the top of Borg PDA screens (#90171)

## About The Pull Request
Robotact is now at the top of borg PDAs' main screen. Same as Messenger
for crew PDAs.

![image](https://github.com/user-attachments/assets/8426371f-3d16-47f2-8ec3-52d7006158da)
## Why It's Good For The Game
Robotact is just as important to borgs as Messenger is to carbons, so we
should make it easier to find at a glance.
## Changelog
:cl:
qol: Cyborg PDAs' home screens now have Robotact at the top of the
screen.
/:cl:

* Makes your current position clearer while jaunting (#90173)

## About The Pull Request

I was fucking around testing the Voidwalker earlier for a different
issue and didn't like that I couldn't see myself while in space.
This PR makes it so that Voidwalkers and also any variant of Ethereal
Jaunt place an icon visible only to you at your current position (it's
like your _soul_) so that you can see where you are going.
Nobody else can see it.


![dreamseeker_qCXrCwHaUW](https://github.com/user-attachments/assets/3d6d1136-1658-4701-af78-057b2cfeb059)

![dreamseeker_hqH73zu66P](https://github.com/user-attachments/assets/4f620711-9a1a-4f8e-be3b-1c3367b9f9dc)



There are almost certainly some other sources of being invisible which
could use this so let me know if you are aware of one.
Although if you do that I may need to make my code more generic.

## Why It's Good For The Game

It's nice to be able to see where you are precisely rather than just it
being the centre of the screen

## Changelog

:cl:
qol: It is now easier to see where you currently are while jaunting
/:cl:

* Automatic changelog for PR #90179 [ci skip]

* Automatic changelog for PR #90157 [ci skip]

* Automatic changelog for PR #90171 [ci skip]

* Automatic changelog for PR #90173 [ci skip]

* Reworks the Big Manipulators UI (#90139)

## About The Pull Request

Reworks the Big Manipulator UI, because it looked kinda... wonky, not
gonna lie.

<img
src="https://github.com/user-attachments/assets/883e26f2-9bdb-46c0-aff4-6888b9ff4bba"
width="30%"></img> <img
src="https://github.com/user-attachments/assets/7ffbb14e-5852-470a-a5cc-c77995db3162"
width="30%"></img> <img
src="https://github.com/user-attachments/assets/3da74a71-0f4b-436b-9267-60bdb6842c85"
width="30%"></img>

## Why It's Good For The Game

Cleaner UI is always much more pleasant to use or even look at

## Changelog
:cl:
refactor: Reworked the Big Manipulators UI
/:cl:

* Automatic changelog for PR #89543 [ci skip]

* Automatic changelog for PR #90139 [ci skip]

* Fixes jittering resetting the wrong pair of visual offsets (#90189)

## About The Pull Request

Jittering has been transitioned to pixel_w/z, so we should use that
instead.

## Changelog
:cl:
fix: Fixed jittering resetting the wrong pair of visual offsets
/:cl:

* Smartfridge/Vending machine layouts auto-update rather than be a setting (#90159)

## About The Pull Request

Sorry for my incompetence with TGUI.

This comes from a comment I made here
https://github.com/tgstation/tgstation/pull/89137#issuecomment-2601185587
&
https://github.com/tgstation/tgstation/pull/89160#pullrequestreview-2566047191

Instead of having to go to your game settings, find the option of layout
style you want your vending/fridge machines to be, and change it without
having a UI to show you the difference, now the preference is tied to
the in-game UI; Clicking to swap to the other layout mode will
automatically update your prefs and stay until you change it again.

I also separated smartfridges and vending machines as 2 separate prefs
so players can have grid on one and list on the other.

I couldn't figure out a way to implement this without adding a new var
on base ``/datum``, if you got other possible solutions I'd be happy to
try. I thought of making 'layouts' limited to smartfridge/vending
machines, taking it out of backend for all UIs, but thought I should
avoid that if possible in case future UIs want to make use of it. If
it's better than a var on datum I'm fine taking that path instead.


https://github.com/user-attachments/assets/921586fa-1ec1-49c0-87ca-ec4bbb6aaa98

## Why It's Good For The Game

The settings list having these small options that you can't even see the
effects of until you find the machine in-game is a little lame, now
players don't even have to think about it, they simply set it to the
mode they want as they use the machine and it'll update itself for the
player.

Currently using the button to swap to list/grid mode instantly reverts
itself as soon as you close the UI, which is a little lame.

## Changelog

:cl:
qol: Smartfridges and Vending machines no longer have a setting to
change the list/grid mode, it instead updates automatically as you swap
the mode in-game.
/:cl:

* Mappers can disable bookshelf randomization, Non-adult shelves can no longer random into adult books (#90165)

## About The Pull Request

1. Mappers can disable bookshelf randomization


2. Bookshelves which are not explicitly marked as "adult bookshelves"
can no longer randomly load "adult" books


3. Random books can no longer random into "adult" books

## Why It's Good For The Game

1. If a mapper is placing a bookshelf with the express attention only x
type books will be in that bookshelf, they can guarantee that by
changing `category_prob`.

2. If the intention behind bookshelves are that "you have to go out of
your way to find the adult category to read an adult book", we probably
shouldn't add flat 25% chance for all bookshelves to be unmarked adult
bookshelves?

3. Similar logic - if you get a random book in the mail and crack it
open and it's an adult book, you can't really say you were "asking" for
it

## Changelog

:cl: Melbert
qol: Mappers can now disable bookshelf randomization
qol: Random books found via mail or in maint will no longer random into
books from the "adult" section
qol: Bookshelf randomization will now exclude adult books unless marked
as adult
/:cl:

* Automatic changelog for PR #90189 [ci skip]

* Small autoreel (and cloaked?) fishing line(s) buff (#90032)

## About The Pull Request
The autoreel fishing line now nudges the bait up/down lightly towards
the fish position at 20% of the reeling velocity when idle, which is
most likely not enough to defeat gravity but enough to help with control
unless for maybe a couple of ultra-light material for fishing rods like
snow. May or may not trivialize the minigame a bit when tied with a
gyroscopic hook. We'll see if that's even a problem.

The cloaked fishing line is actually way more transparent now, and a
smidge better at catching fish with the anxiety trait (only the zappy
fish so far...) and not only those with the wary trait.

## Why It's Good For The Game
I feel disappointment knowing I had it called "autoreel" yet it doesn't
do that muh during the actual minigame, only affecting the portion
before it. Also cloaked lines aren't that hard to notice rn smh.

## Changelog

:cl:
balance: Autoreel fishing lines do what their name implies and nudges
the bait towards the fish a little during the minigame when you're not
pressing the mouse button. Also cloaked lines are more transparent, and
better at catching a certain fish...
/:cl:

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>

* Automatic changelog for PR #90159 [ci skip]

* Automatic changelog for PR #90165 [ci skip]

* Automatic changelog for PR #90032 [ci skip]

* [s] Tape recorders cannot record other tape recorders. (#90206)

## About The Pull Request
This has been used to cause some issues on Manuel, an exploit to harm
the server. This also bumps the minimum delay between played messages to
1 second, to reduce spam a bit when there are a lot of messages in a
short amount of time.

Also, a very modest improvement for the hearing sensitive trait, which
is only needed when recording.

## Why It's Good For The Game
Ngl, I'm sure that, with enough patience, someone could still use them
to cause some problems via other means of recording and playing messages
en masse, but I'd rather not go nuclear on the tape recorders and I
overkill them. It's also getting late and I don't have the time for
anything more robust than this. Also the code seems overall pretty old
and due for a refactor.

## Changelog
No, thank you.

* Modifies Space Crawl Criteria (#90167)

## About The Pull Request

Closes #90163
Space Crawl previously decided if you were in space by identifying your
location as either a space turf or a "misc" turf, an arbitrary typepath
that coincidentally is often but not exclusively used for turfs that are
outside.
This is only coincidentally accurate and fails, for instance, in the
tram underpass specifically if you are stood on the sandy asteroid tiles
but _not_ if you are stood on the grass tiles, which is a pretty weird
inconsistency. It really shouldn't work there at all. Additionally,
there are often _non_-misc turfs outside too, meaning that you can space
crawl on exterior asteroid tiles but not exterior plating tiles for some
reason.

_Now_ it will function under the following criteria:
- You're on a space tile.
- You're in an outdoor area with low pressure, 

This preserves the existing behaviour where this ability functions on
icebox and lavaland, but closes the weird outliers both in and outside.
Unfortunately as the tram underpass is classified as outside for some
reason (it shares the area as exterior asteroid) then venting it will
let you spacecrawl there... but then again, if it's vented then arguably
it is in fact in space?

This would be easier if this ability was just dogshit on Icebox so I
could also check if there is gravity but unfortunately players probably
wouldn't like that.

## Why It's Good For The Game

Hopefully makes the ability work in a more consistently understandable
way.

## Changelog

:cl:
balance: Space Crawl now functions if you are on a space tile, or if you
are in an outdoor area with low air pressure.
/:cl:

* Automatic changelog for PR #90167 [ci skip]

* Slightly refactors the Cortex Imprint bioware (#90154)

## About The Pull Request

I slightly refactored the Cortex Imprint bioware - instead of ticking
every 2 seconds, it now just registers `COMSIG_CARBON_GAIN_TRAUMA`, and
blocks any basic resilience trauma from even being added - in addition
to curing all basic resilience traumas upon being gained.

I also added a `COMSIG_CARBON_BLOCK_TRAUMA` value, which is exactly what
it says on the tin, and also pass the resilience arg to
`COMSIG_CARBON_GAIN_TRAUMA`.

## Why It's Good For The Game

this doesn't need to tick i dont think, so, like, why not just use a
signal?

## Changelog
:cl:
code: Slightly improved the code for the Cortex Imprint bioware.
/:cl:

* Automatic changelog for PR #90154 [ci skip]

* Correct some documentation referencing TGS4 (#90205)

* Fix icon_exists erroring on runtime icons (#90126 )

## About The Pull Request
The logic here is incorrect, /icon attempting to stringify an icon produces results in a string with "/icon" rather than the assumed empty string. Instead, we'll just check if the file arg is already text.

## Changelog
N/A

* Fixes the detective office shutters on icebox (#90184)

## About The Pull Request

Fixes the det's shutters on icebox

## Why It's Good For The Game

broken = bad

## Changelog



:cl:
fix: Fixes the det's shutters on icebox
/:cl:

* Fixes tool_act returns on reflectors (#90185)

## About The Pull Request

These two should be ITEM_INTERACT_BLOCKING to prevent accidentally
bashing them when failing to use the tool for whatever reason

## Changelog
:cl:
fix: Fixed failed wrench/welder interaction attempts resulting in you
attacking reflectors
/:cl:

* Fixes darkness adaptation not refreshing eye status correctly (#90180)

## About The Pull Request

Was registered to an incorrect proc, so it didn't refresh eyes when
moving around nor was it starting the cooldown, so ticks double dipped
and unnecessarily refreshed invis.

## Changelog
:cl:
fix: Fixed darkness adaptation not refreshing eye status correctly
/:cl:

* Fixes incorrect offsets on wide items' attack animations (#90187)

## About The Pull Request

Looks jank if you hit something with like, a Sakhno, not sure what else
to add.

## Changelog
:cl:
fix: Fixed incorrect offsets on wide items' attack animations
/:cl:

* Automatic changelog for PR #90184 [ci skip]

* Cleans up mood and mood-related code (#90162)

## About The Pull Request

One of my upcoming PRs affects a significant chunk of the codebase so
I'm cleaning up messes that I've found along the way.
This PR adds wrappers for adjusting sanity/checking if a mob already has
a certain moodlet, fixes an oversight where attempting to set sanity
over passed maximum would abort the change outright (instead of actually
capping it out), moved jolly and depression processing into quirks
themselves (instead of having dedicated traits for them used solely by
said quirks and nothing else that are constantly checked for by mood
datums), and rewrote how blessings return their results to move omen's
deletion on blessing effect from constantly checking mood for a blessing
moodlet to a comsig.

## Why It's Good For The Game

Less jank handling of certain mechanics, we ***really*** shouldn't be
checking for blessings every time mood of all things is updated.

## Changelog
:cl:
fix: Adjusting sanity over the allowed maximum will no longer completely
halt the change, and instead actually cap it at the maximum value.
code: Cleaned up mood and mood-adjacent code.
/:cl:
# Conflicts:
#	code/__DEFINES/mobs.dm

* Automatic changelog for PR #90185 [ci skip]

* Automatic changelog for PR #90180 [ci skip]

* Automatic changelog for PR #90187 [ci skip]

* Automatic changelog for PR #90200 [ci skip]

* Automatic changelog for PR #90162 [ci skip]

* fixes a spelling error and a grammar error  (#90197)

## Why It's Good For The Game

I like grammar

:cl:
spellcheck: fixed a typo and a grammar error
/:cl:

* Fixes a typo for the chemical separator (#90194)

## About The Pull Request
Hi! I saw a typo and I'm trying to figure out how to set up git so
please hit me with a big hammer if I did this wrong
## Why It's Good For The Game
I don't like it when my reagents cool fater
## Changelog
:cl:

spellcheck: Fixed a typo for the Chemical Separator
/:cl:

* Automatic changelog for PR #90197 [ci skip]

* Automatic changelog for PR #90194 [ci skip]

* Fix ship ambience volume slider acting like an on/off switch (#90153)

## About The Pull Request

The code that uses the ship ambience volume slider uses the value in the
wrong SEND_SOUND call (one of the ones to stop the current playing
ambience) meaning the slider actually does nothing but toggle between
ship ambience being off and it being full volume. This fixes that

## Why It's Good For The Game

Volume make sound louder or quieter

## Changelog
:cl:
fix: fixed the ship ambience volume slider not working properly
/:cl:

* Automatic changelog for PR #90153 [ci skip]

* Allows for AI shells to get the tracking message that AIs get for comms (#90145)

## About The Pull Request
Moves the Track href for AIs from the ai topic proc to the silicon topic
proc and allows for AI shells to get the track href in their chat for
radio as well. This will, of course, boot the AI out of their shell and
back to their core when they click it.
## Why It's Good For The Game
QoL for AIs so if someone wants them to track them, or they want to
track someone speaking on comms they don't need to leave their shell
then also search for the person in the camera list (if they were in a
shell at the time)
## Changelog
:cl:
qol: AI shells can track people now too
/:cl:

---------

Co-authored-by: Odairu <39929315+Odairu@users.noreply.github.com>

* Automatic changelog for PR #90145 [ci skip]

* bloodless species now take damage from bone chiller (chilling green) (#90137)

## About The Pull Request
Bloodless species now take brute damage from using the bone chiller
(chilling green)
## Why It's Good For The Game
they don't have blood, which makes the weapon infinite use for them
(unintended afaik) fixes #90118
## Changelog
:cl:
fix: bloodless species no longer have a free bonechiller
/:cl:

---------

Co-authored-by: Odairu <39929315+Odairu@users.noreply.github.com>

* Automatic changelog for PR #90137 [ci skip]

* Moves material item insertion to right click for material containers (#90188)

## About The Pull Request

Inserting material (i.e. made from a material, but not a material
sheet/stack) items into material containers/remotes (ore silos,
autolathes, protolathes, etc) now uses right click instead of left
click. You still insert sheets using left click.

## Why It's Good For The Game

Its super easy to end up having your guns (which are made out of iron)
or armor (also made out of armor) or disks (also made out of iron) eaten
by an autolathe as you try to click a table next to it. This should
resolve players' frustrations while keeping material item insertion an
option via right clicking.

## Changelog
:cl:
qol: Moved material item insertion to right click for material
containers
/:cl:

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>

* Automatic changelog for PR #90188 [ci skip]

* Color Code Audition: Human rendering hates me (#89702)

This trainwreck of a PR is (hopefully) a final solution to all rendering
jank stemming from the new filter-based coloring system. I went over
every single instance of RESET_COLOR, either adding KEEP_APART or
rewriting them entirely so they render properly. I've also fixed blood
rendering issues by utilizing alpha filters and adding an abstract
"holder" appearance for worn items, which holds blood overlays on worn
clothing as to avoid coloring it. I've also fixed horrible
inconsistencies with atmos pipe coloring as a result (of getting sucked
down that rabbit hole) and converted all uses of COLOR_VERY_LIGHT_GRAY
in atmos code to ATMOS_COLOR_OMNI to avoid confusion.

MODsuit modules still get colored into MOD unit's color, need to
refactor their rendering for this.

Closes #88989
Closes #87526
Closes #89837

:cl:
refactor: Audited all remaining coloring code - among noticeable
changes, blood should no longer get colored or "leak out" of item
bounds, atmos pipes no longer color weirdly and repairbots are white
again.
/:cl:

* Automatic changelog for PR #89702 [ci skip]

* Removes "jaunt_out_time" from ethereal jaunt (#90169)

## About The Pull Request

This PR removes the temporary immobilisation applied to users of Phase
Shift and Ashen Passage upon casting it.
Having to wait 0.6 (or 1.6 for phase shift) seconds before moving is
basically just sort of annoying and doesn't provide any particular
benefit that I can see, as it does not really add any additional time
where anyone can do anything about you jaunting away.
This does not effect the visuals, which still play, or buff the duration
of the spell, as the timer would only start once the immobilisation had
ended.

This also doesn't effect the immobilisation when you _exit_, which still
exists unchanged and _is_ necessary for the animation to look good.

## Why It's Good For The Game

This delay made the spells more annoying to use than necessary and I
personally don't think it added anything visually to have this
synchronised with an animation which will continue to play at the space
you left, _especially_ in the case of Ashen Passage.

## Changelog

:cl:
qol: Users of Ashen Passage and Phase Shift will be able to move
instantly upon cast rather than after a delay
/:cl:

* Automatic changelog for PR #90169 [ci skip]

* Removes 516 warning from the statpanel (#90215)

## About The Pull Request

Removed the 516 warning from the statpanel, and updated incorrect
compiler warning note about 517 experiments.

## Why It's Good For The Game

Our servers now nag you to update to 516, makes no sense to have a
warning saying that you should downgrade.

## Changelog
:cl:
code: Removed the 516 beta warning entirely
/:cl:

* Automatic changelog for PR #90215 [ci skip]

* Fixes fake feedback link if db calls fail (#90209)

## About The Pull Request

We were nullchecking this instead of falsey checking it (TAKE THAT
ISNULL POSTERS) so it'd see FALSE, go "oh that's not null", and then try
and link clients to 0. Dumb

* Fixes flickering on Access Button/Access Controller (#90208)

## About The Pull Request
Simple enough. The actual frame's outline was flickering to be darker.

Also sorted the .dmi a bit because why were 2 intercoms at the bottom
instead of with every other intercom
## Why It's Good For The Game
Sprite bug fix
## Changelog
:cl:
fix: fixed some tiny sprite flickering on two atmos wallmounts
/:cl:

* Fixes constant runtimes caused by large internals boxes station trait (#90213)

## About The Pull Request

Not sure if any outfits except admin-ones runtimed? Happened because box
size was increased after init and not after creating storage but before
populating it. The combat-ready box constantly runtimed due to The
Wardrobe trying to create it for an outfit and repeatedly failing, which
got annoying in testing real fast.

## Changelog
:cl:
fix: Large internals station trait no longer prevents admin-specific
internals boxes from spawning
/:cl:

* Fixes vendor machine glass shards being permanently stuck in people (#90210)

## About The Pull Request
Closes #90204

## Changelog
:cl:
fix: Fixed vendor machine glass shards being permanently stuck in people
/:cl:

* Prosopagnosia now uses ID card names (if present) instead of always Unknown (#90198)

## About The Pull Request

This changes Prosopagnosia a bit - instead of people _always_ appearing
as Unknown, if they have an ID, they'll appear as the name's ID, albeit
with a question mark next to it, i.e "Captain?" or "John Doe?"

![2025-03-23 (1742707863) ~
dreamseeker](https://github.com/user-attachments/assets/34f2b636-a4e7-4acc-9b80-6a3e3e9b6804)
![2025-03-23 (1742707875) ~
dreamseeker](https://github.com/user-attachments/assets/ffb660ac-70a9-46b3-919a-1e33a16f01ed)

Also, this lets you see your _own_ name when self-examining / hovering
over yourself, 'cuz it's not like you can see your own face anyways, you
kinda just know you are you.

## Why It's Good For The Game

you can see the ID card while examining anyways - nothing says you can't
recognize IDs, just faces.

## Changelog
:cl:
qol: Players with the Prosopagnosia quirk will now see the ID name (if
there is one) examining someone, instead of ALWAYS Unknown, altho it'll
have a question mark, i.e "John Doe?"
qol: Prosopagnosia no longer makes you see yourself as Unknown.
/:cl:

* Automatic changelog for PR #90208 [ci skip]

* Automatic changelog for PR #90213 [ci skip]

* Automatic changelog for PR #90210 [ci skip]

* Automatic changelog for PR #90198 [ci skip]

* Expands on the functionality of !do_after and allows you to make custom cog icons (#90225)

## About The Pull Request

This PR makes the cog icon an argument inside the ``do_after()`` proc
which allows you to override it for custom cogs.

## Why It's Good For The Game

Wouldn't it be cool to have little custom progross icons displayed to
other people? I don't have any sprites now to do this but I would like
this to be a thing.

## Changelog

:cl:
code: do_after() can now hold custom cog icons. Add some today!
/:cl:

* Patch applications now log their contents when applied (#90211)

## About The Pull Request
Fixes #90143

* Automatic changelog for PR #90225 [ci skip]

* Fix the `ispath` SDQL2/Lua wrapper (and add a `is_type_in_typecache` wrapper) (#90207)

## About The Pull Request

This fixes the `_ispath` SDQL2 / Lua wrapper: it always passed two
arguments, meaning it couldn't be used to just simply check if something
was a path _at all_.

In addition, I just added wrapper around `is_type_in_typecache` (as it's
a define), as that's the whole reason I was using `_ispath` anyways, so
it can't hurt.

## Why It's Good For The Game

things working properly is nice

## Changelog
:cl:
fix: The _ispath SDQL2/Lua wrapper can now be used to actually check if
something is a path.
code: Added the _is_type_in_typecache wrapper, for SDQL2 / Lua scripts.
/:cl:

---------

Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>

* Automatic changelog for PR #90207 [ci skip]

* Updates door remote accesses + descriptions, implements logic for area-specific remote operation, moves remote definitions to the top of control_wand file (#90079)

This updates door remote accesses to match the accesses of their owner
-- research remote = RD access, and so on. However, the Captain's door
remote does not inherit this increased access, and is still relegated to
command areas like the bridge, AI upload, etc.

As well, it implements a logic for a given "domain" per remote holder,
based on high-security areas that are iconic of the given role. As such,
even though they may have access to the Vault, no other Head besides the
Captain can open the Vault with their remote, the head remotes (beside
security) can't open the brig (Captain didn't have access anyway), and
so on. The restricted areas and the remote with authority to open that
area are as follows:

**Captain**
- The whole station
- Note: Still restricted by the remote access, which is: Bridge, Vault,
AI Upload, Teleporter, Gateway, Captain's Office, EVA

Head of Personnel
- Gets no special "domain" for their remote, but otherwise receives
HoP's round-start access

Head of Security
- Security

Chief Engineer
- Gets no special domain, because no other Head roundstart trims receive
access to the CE's high-security areas of Engine or Atmospherics
(besides Captain, who has a neutered remote already)

Research Director
- AI Upload, AI Core

Chief Medical Officer
- No special domain for the same reason as Chief Engineer; no other
heads have unmitigated medical access

Also updated remote descriptions with allusions to stereotypes/jokes for
a given head (Captain's authority is dubious, QM is not a Real Head,
Security remote was stolen from HoS by resentful Warden, HoP disappears
more than Carmen Sandiego, CMO shouldn't have a medical license, RD is
absolutely jacked)

Finally, moved the remote definitions to be above the sheer cliff of the
ranged interaction proc in the control_wand file.

Makes remote access have parity with the access of their respective head
of staff, while at the same time allowing other Heads of Staff to retain
their own control over doors in their department areas.
:cl: Bisar
balance: Door remotes now match the access of their owner (except for
the Captain, whose remote access is unchanged). Door remotes, however,
respect the high security area control of other remotes; as such, even
if a Head can enter an area like the brig, only the Security remote
works to open the entrance.
/:cl:

* Automatic changelog for PR #90079 [ci skip]

* Fixes techweb scrolling cutting off the last node (#90239)

## About The Pull Request

Biome seems to have butchered the file, but I've just swapped the nodes
into a scrollable section instead of relying on scrolling through 100%d
flexes (where two top elements moved the techweb down)

Closes #90220

## Changelog
:cl:
fix: Fixed techweb scrolling cutting off the last node
/:cl:

* Automatic changelog for PR #90239 [ci skip]

* Some minor Big Manipulator refactors (#90240)

## About The Pull Request

guh

I accidentally broke the manipulator while refactoring the UI because
ALL OF A SUDDEN, one of three options is actually two options that are
not in any way connected although they should be. And also there are
three variables for storing action delays (???). I believe it's not
about GBP in the first place, it's about taking responsibility for your
own fuck-ups, so here I am.

Removed some reused value variables, better autodoc readability, renamed
some procs and variables, made more things into constants.

## Why It's Good For The Game


![image](https://github.com/user-attachments/assets/e850b3e5-441e-45c6-a25e-2bf28c958885)

## Changelog

:cl:
refactor: Minor Big Manipulator code refactoring
/:cl:

---------

Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>

* Automatic changelog for PR #90240 [ci skip]

* Use volcanic tiles (#90214)

## About The Pull Request
Tiles on lavaland should use the volcanic turf type so they spawn with
atmos and don't crush miners with low pressure when they mine them out

## Why It's Good For The Game
I like not being crushed

## Changelog
:cl: Goat
fix: Clown biodome on lavaland uses lavaland turf now for the bananium
ore.
/:cl:

* Fixes ai multicam room being pitch dark on multiz maps (#90242)

## About The Pull Request
Title.
## Why It's Good For The Game
Actually working multicam room
## Changelog
:cl:

fix: fixed AI multicam room on multiz maps not showing anything

/:cl:

* Automatic changelog for PR #90214 [ci skip]

* Automatic changelog for PR #90242 [ci skip]

* Refactors MODsuit slowdown calculations (#90116)

MODsuits now calculate their slowdown by querying modules by sending a
signal on themselves instead of having modules try and keep up with
control unit's speed updates (which broke in a fabulous fashion after
MODsuits were allowed to deploy by piece)
Also added a separate trait to prevent objects from being speed
potion-ed to combat stabilized red crossbreed issues, and removed a
duplicate list helper (40 lines down in the same file lol)

Closes #89979
Closes #90036

:cl:
fix: MODsuits should now be affected by stabilized red crossbreeds
fix: MODsuit slowdowns should no longer behave weirdly with ash
accretion/magboots/armor booster modules.
refactor: Refactored MODsuit slowdown calculations to be query-based
instead of modules directly modifying part speed values.
/:cl:

* Automatic changelog for PR #90116 [ci skip]

* corrects a wiring issue with wawa's port bow solars (#90223)

## About The Pull Request

Fixes #90218 
The tiles with solar panels now have cables underneath, and some
intermediate cables have been removed. See mdb. The array is now
repairable without prying up floor tiles.

## Why It's Good For The Game

It's easier to set the array up, even if marginally. You come to expect
there being a cable under each panel, since that's how it is everywhere
else.

## Changelog

:cl:
fix: Wawastation's port bow solar array now has a cable under all panels
by default.
/:cl:

* Automatic changelog for PR #90223 [ci skip]

* Adds some heretic influence examine lines (#90236)

## About The Pull Request

Examining an influence gives you a sp00ky message rather than an empty
box

## Why It's Good For The Game

Worldbuilding?

## Changelog

:cl: Melbert
qol: Examining a heretic influence gives you a sp00ky message rather
than an empty box
/:cl:

* Automatic changelog for PR #90236 [ci skip]

* Move `/world/Genesis` to the top of the dme (#90255)

## About The Pull Request

okay so genesis actually needs to be first.

i did a bit of an experiment to see exactly what's called first.

`/world/proc/genesis_test` was just a `world.log << "[x]"` wrapper in
this test

top of the dme:
```dm
/world/proc/_a2()
    var/static/_ = world.genesis_test("a2")

/world/proc/_z2()
    var/static/_ = world.genesis_test("z2")
```

bottom of the dme:
```dm
/world/proc/_a1()
    var/static/_ = world.genesis_test("a1")

/world/proc/_z1()
    var/static/_ = world.genesis_test("z1")
```

here's the output:
```
Welcome BYOND! (5.0 Public Version 516.1659)
genesis testa2
genesis testz2
genesis testa1
genesis testz1
World loaded at 01:38:36!
```

so yeah, seems being included FIRST is correct.
to avoid any sort of potential accidental sorting/moving/priority
shenanigans, genesis itself is now in a `.dme` file, that is included
just below the header of the dme, before `// BEGIN_INTERNALS`

## Changelog

No user-facing changes. Or even noticeable by most coders.

* Automatic changelog for PR #90251 [ci skip]

* Hotfix for IRV votes not submitting on 516 (#90285)

## About The Pull Request

Fixes #90273

we relied on the post request sending the form data over the url,
apparently this was the default behavior in ie11 but edge changed the
form data to be sent in the http body, because browser standards i guess

this is bad for us though because it breaks voting since the form data
does not appear in the topic anymore. this PR changes the form
submission method to get, which correctly submits form data again.

proof of testing on localhost:

![dreamseeker_M8gllkPAnx](https://github.com/user-attachments/assets/d140043a-3912-4e4f-8cf3-805829e7345c)
(the long line on the bottom of the log is me suibmitting my result to
the form, also note how the "Vote successful." message shows up in the
chat)

## Changelog

:cl:
fix: Players on 516 can submit votes for IRV again.
/:cl:

* Automatic changelog for PR #90285 [ci skip]

* Fixes some shoe procs being verbs (#90250)

## About The Pull Request
Closes #90229

* Automatic changelog for PR #90250 [ci skip]

* Fixes a hypothetical respawn exploit (#90259)

## About The Pull Request
Fixes a hypothetical respawn exploit that I figured out yesterday.
Credits to MrMelbert for suggesting it!

![image](https://github.com/user-attachments/assets/3812005e-e78f-4332-8b0b-80e642d39939)
## Why It's Good For The Game
fixes THIS


https://github.com/user-attachments/assets/b412fc58-4dcb-4810-aa4f-9128d86073dc
## Changelog
:cl:
fix: fixed an extremely hypothetical, yet possible respawn exploit
/:cl:

* Automatic changelog for PR #90259 [ci skip]

* Terror Unification: Converts all "fear" quirks and traumas (except item phobias) to use a unified handler (#90217 )

## About The Pull Request

This PR adds the fearful component which acts as a unified handler for terror effects. This currently includes nyctophobia and claustrophobia quirks, terrified status effect from nightmare's spell, and the monophobia brain trauma. The component processes terror handler datums which act both as terror sources and effects - jittering, stuttering, vomiting, panic attacks, etc.
This means that nyctophobia and claustrophobia now act more like terrified status/monophobia - causing jitters, stuttering, periodic panic attacks, etc, and their effects stack (i.e. being in a closet in the dark will increase your fear much quicker).

Closes #37492
Closes #57121
Closes #69684

## Why It's Good For The Game

Terrified status is very immersive and its effects perfectly fit nycto/claustrophobia quirks, enough to be impactful to owner's gameplay, but not roleplaying for them, which is what we want quirks to be. It also makes them share their stress, which is how you'd expect them to act. (I would also love to see monophobia moved from a brain trauma to a quirk, as it perfectly fits latter instead of former, and acts as a great incentive to interact with other people instead of doing autism projects by yourself.)
I haven't moved phobias to this system yet, but it could be done in the future without too many issues - should make phobias less painful to deal with, and maybe make people actually interested in playing around them instead of rushing a lobotomy because of how debilitating they are (currently only interaction is getting hugged by someone you're afraid of, which will increase your terror)

## Changelog
:cl:
add: Nyctophobia and Claustrophobia quirks now have proper terror effects instead of making you walk/suffocate. Immersion!
refactor: All sources of "terror"/"fear" now use a common component, meaning they share their counters.
/:cl:

* Automatic changelog for PR #90217 [ci skip]

* [NO GBP] Fixes blue space on lower Z levels (#90251)

## About The Pull Request

Closes #90191

## Changelog
:cl:
fix: Fixed blue space on lower Z levels
/:cl:

* bulldog iconstate rename fix thing (#90200)

## About The Pull Request

 removes errant _mag from icon state name

## Why It's Good For The Game

fix

<!-- 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: live donk Fréchette rounds and m12gsl bulldog magazine sprites look
less like ERRORs.
/:cl:

* Remove weird passive aggressive historical wording in CONTRIBUTING (#90292)

It's really clunky to read and doesn't get to the point. Nobody cares
about whatever drama happened before

Github told me to request copilot's suggestion so I hope it says
something funny

* Pathfinding Visualization, JPS fixes, Misc Improvement (#90233)

## About The Pull Request

[cleans up poor namespacing on light debugging
tools](https://github.com/tgstation/tgstation/commit/93cc9070d56ee4dbeb600ebd4616b047adf9d648)

[Implements a pathfinding visualization
tool](https://github.com/tgstation/tgstation/commit/ed91f69ac42a92329c10ccdbba308d213fc8c759)

It holds a set of inputs from the client, and uses them to generate and
display paths from source/target. Left click sets the source, right
click sets the target.

Pathmap support too, if no target is set we display the paths from every
turf in the map to the source, if one is set we build a path TO it from
the source.

I had to add COMSIG_MOB_CLICKON to observers to make this work (tho idk
why it didn't exist already), I also removed the everpresent colorblind
datum from admin datums, only needs to exist if they're using it.

[Adds a mutable_appearance helper that dirlocks them, wallening port
which I thought might be useful here, and will likely be useful
elsewhere in
future](https://github.com/tgstation/tgstation/commit/87f752e7c361ff47d62452f2f1ea805458f71b66)

[Fixes an infinite loop in pathmaps if we tried to pull a cached path to
an unreachable target, && not ||
4head](https://github.com/tgstation/tgstation/commit/10086a655df817c9f4494f9aac879c85a6059719)

[Fixes JPS not dealing with border objects properly. They violate some
of the assumptions JPS makes, so we need to backfill them with checks.
These basically read as (if the thing that should normally take this
path can't reach this turf, can
we?)](https://github.com/tgstation/tgstation/commit/f56cc4dd434cecee89879aea500bd1c9d2f38ce6)

## Why It's Good For The Game

Maybe deals with #80619?

Adds more robust testing tools for pathfinding, should allow people to
better understand/debug these systems. I added this with the idea of
adding multiz support but I don't have the time for that rn.

JPS will work around thindows better, that's nice.

https://file.house/IrBiR0bGxoKw1jJJoxgMRQ==.mp4

## Changelog
:cl:
fix: Fixed our pathfinding logic getting deeply confused by border
objects
admin: Added clientside displayed pathfinding debug tools, give em a go
/:cl:

* Automatic changelog for PR #90233 [ci skip]

* Fix ByondUI small map preview (#90277)

This PR should fix the problem of small previews in TGUI once and for
all (I hope).

What was causing it? Because TGUI takes a long time to open, that's why
previews were generated broken (small).

On Byond 515 this problem was not so noticeable as the interfaces opened
faster, but with the release of 516 it became much worse.
Previews were generated inside a window that was not yet open, so the
scale was broken, sometimes the window would open before the preview was
done and sent, usually with small interfaces, or when reopening.

I'm not very good at working with signals, and to tell the truth this is
my second experience with them, so I hope I did it right.

No more small map previews

<details> <summary> Video </summary>

https://github.com/user-attachments/assets/834f3820-cc6a-4f65-90e5-d6bb2a118bcf

</details>

:cl:
fix: Fixed small character preview, color matrix preview, mech preview,
and other previews with uses ByondUI map
/:cl:

Co-Authored-By: Gaxeer <44334376+Gaxeer@users.noreply.github.com>

* Automatic changelog for PR #90277 [ci skip]

* The big fix for pixel_x and pixel_y use cases. (#90124)

516 requires float layered overlays to be using pixel_w and pixel_z
instead of pixel_x and pixel_y respectively, unless we want
visual/layering errors. This makes sense, as w,z are for visual effects
only. Sadly seems we were not entirely consistent in this, and many
things seem to have been using x,y incorrectly.

This hopefully fixes that, and thus also fixes layering issues. Complete
1:1 compatibility not guaranteed.

I did the lazy way suggested to me by SmArtKar to speed it up (Runtiming
inside apply_overlays), and this is still included in the PR to flash
out possible issues in a TM (Plus I will need someone to grep the
runtimes for me after the TM period to make sure nothing was missed).
After this is done I'll remove all these extra checks.

Lints will probably be failing for a bit, got to wait for [this
update](https://github.com/SpaceManiac/SpacemanDMM/commit/4b77cd487d0a7b6a069df20356b701af5b20489d)
to them to make it into release. Or just unlint the lines, though that's
probably gonna produce code debt

Fixes this massive 516 mess, hopefully.

closes #90281

:cl:
refactor: Changed many of our use cases for pixel_x and pixel_y
correctly into pixel_w and pixel_z, fixing layering issues in the
process.
/:cl:

Co-Authored-By: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-Authored-By: SmArtKar <master.of.bagets@gmail.com>

* Automatic changelog for PR #90124 [ci skip]

* tgui: Lazy load icon ref map (#90270)

## About The Pull Request
This restructures how tgui initially renders, making it more react-like
as it loads in an App component. I can now lazy load the icon ref map
using react.suspense, which should shave off some time from that initial
render of tgui considerably, as it no longer waits for the asset to
fetch before displaying the window.

Later, I'd like to use this as the springboard to replace how we handle
backend data by making it context/state based.

+ made some code stylistic changes that i can revert if this is too much
## Why It's Good For The Game
The code is more legible to people that are modern react brained
And (no guarantees) tgui's initial page load should be faster
## Changelog
N/A

* Fixes broken overlays on dismembered bodyparts (#90283)

## About The Pull Request

For some reason we forcefully assigned south direction for overlays on
dismembered bodyparts, despite them being fully capable of rotating.
Fixes this


![image](https://github.com/user-attachments/assets/d9cb47b3-985e-4b74-8ecb-203f43c6e1b1)

Credits to Mal/Vinylspiders for finding this

## Changelog
:cl:
fix: Fixed weird overlay positioning on dismembered bodyparts
/:cl:

* Automatic changelog for PR #90283 [ci skip]

* Fixes incorrect indentation in blob victory code (#90282)

## About The Pull Request

We ***really*** shouldn't be iterating over all areas for every single
mob. No wonder this lags like hell.

## Changelog
:cl:
fix: Fixes incorrect indentation in blob victory code which could cause
immense lag as a result
/:cl:

* Automatic changelog for PR #90282 [ci skip]

* Fix vendor stock bug, make vendor dispensing behaviours apply more (#90266)

## About The Pull Request

So #90246 was caused purely because vendors don't actually reduce the
stock when dispensing returned items:

https://github.com/tgstation/tgstation/blob/c0204da3da7388d9a0b28523a66b83bcc7a29f23/code/modules/vending/_vending.dm#L1464-L1467
While this could've been a single line fix by just decrementing the
stock like how returned items are handled elsewhere, instead we collapse
all these cases into being handled by `dispense(...)` so it's harder for
this to happen again. We make this a parameter because different
dispensing methods have different priorities.
As a side, we make it so `on_dispense(...)` forwards whether or not it's
a returned item, because logically mothroach infestations would still
snack on your clothes even if they're just returned. I felt it best to
make them deal less damage to returned clothes in that case.
## Why It's Good For The Game

Fixes #90246.
Fixes #89104.
Good if the special vendor stuff gets applied when items are thrown too
Being able to cycle items through the mothroach clothing gnawing machine
is funny
## Changelog
:cl:
fix: Dispensing a returned item from a vendor actually reduces the
amount of stock for that item.
fix: Special vendor dispensing behaviours get applied to thrown items.
fix: Special vendor dispensing behaviours actually get applied to
returned items where applicable.
/:cl:

* Automatic changelog for PR #90266 [ci skip]

* Fix potential CORS issues with webroot transport on BYOND 516 (#90256)

## About The Pull Request

css also needs `node.crossOrigin = 'anonymous';`, at least in my case.

credit to @hry-gh for pointing this out to me

## Why It's Good For The Game

bluescreen = bad
working = good

## Changelog
:cl: Absolucy, hry-gh
fix: Fixed a potential bluescreen error relating to stylesheets on BYOND
516.
/:cl:

* Automatic changelog for PR #90256 [ci skip]

* Fixes singleletter vars in mobs.dm and blood.dm (#90284)

Just found this whilst working on something else downstream, why not fix
it

Something something readable bleeding.

:cl:
code: The mobs subsystem and blood.dm file for living mobs no longer use
single letter vars
/:cl:

* Automatic changelog for PR #90284 [ci skip]

* mystery_box_item is now a type of /obj/effect/abstract (#90258)

## About The Pull Request

Retypes the object, attaches it to the crate as a vis_overlay, and gives
it the correct vis_flag to share the plane.

This also means it now layers correctly on multiz, when previously it
would show up on the lowest level.

## Why It's Good For The Game

/obj/ is not meant to be bloated with stuff that can easily be an
effect. Also fixes a bug

## Changelog
:cl:
fix: Mystery box items no longer layer on the lowest z_level when in
multiz
code: mystery_box_item is now a type of /obj/effect/abstract
/:cl:

* Automatic changelog for PR #90258 [ci skip]

* Logs fuel pools being ignited deliberately. (#90232)

## About The Pull Request

Fuel pools now log their igniter.

## Why It's Good For The Game

We log when motor oil spills and similar ignitable items are burned.
This is no different.

## Changelog
:cl:
admin: Added logging to fuel pools being ignited by someone
deliberately.
/:cl:

* Automatic changelog for PR #90232 [ci skip]

* Lets drones use silicon emotes (#90276)

## About The Pull Request
That's about it, gives drones the right to beep boop and buzz.
## Why It's Good For The Game
They're tiny little robots, they should be able to make robot noises.
Fun way to attempt very basic communication should someone start chasing
you with a newspaper
## Changelog
:cl:
qol: Drones can use silicon emotes
/:cl:

* Automatic changelog for PR #90276 [ci skip]

* Fix some instances of trying to directly qdel lists (#90227)

this fixes a bunch of code incorrectly calling qdel directly on a list,
and adds a stack trace to qdel if someone does pass a list to it

because I'm pretty sure qdel ends up calling fucking `del()` as `/list`
is not a `/datum`

No user-facing changes.

* Change hardcoded ice/snow temperatures values to use `ICEBOX_MIN_TEMPERATURE` define (#90228)

## About The Pull Request
Several variables in the code had hardcoded temperature vars set to 180
when it should just use the `ICEBOX_MIN_TEMPERATURE` define that is used
to indicate a 180 temp.

## Why It's Good For The Game
No hardcoded values.

## Changelog
:cl:
code: Change some hardcoded ice/snow temperature variables that were set
to 180 to use `ICEBOX_MIN_TEMPERATURE` instead.
/:cl:

* Automatic changelog for PR #90228 [ci skip]

* You can pick up desk bells (#90186)

## About The Pull Request

2 years and 9 months ago it was suggested that the UX for attaching a
bell to a wheelchair was unintuitive.

![image](https://github.com/user-attachments/assets/e4818ac4-0ba9-4d73-b13e-3e240ad2e8c5)
Today I am finally implementing that feature request.

This PR lets you pick up desk bells by dragging them onto yourself. 
After picking up a desk bell you can ring it by using it in your hand,
hit someone with it (which also rings the bell), attach it to a
wheelchair, or throw it at someone (which also rings the bell).

_Also_ now if you fold up your wheelchair the bell falls off, instead of
being deleted forever.

## Why It's Good For The Game

If ringing the bell repeatedly doesn't get someone's attention you can
now physically hurl the desk bell at their head, which should be more
effective.
Also people were saying on my other PR that they had no idea that you
even could attach desk bells to wheelchairs, this will hopefully make it
more intuitive.

## Changelog

:cl:
add: You can pick up desk bells by dragging them onto yourself. This is
now how you attach them to wheelchairs, instead of dragging it onto the
wheelchair.
fix: Folding a wheelchair with attached bell will drop the bell to the
ground instead of deleting it forever.
/:cl:

* Automatic changelog for PR #90186 [ci skip]

* Experiscanner tsx (#90278)

## About The Pull Request
Just made it a typescript ui in the process of fixing the scroll wheel

Fixes #90308 (dupe)
Fixes #90272 (dupe)
Fixes #90265 

Removed flex (deprecated)
## Why It's Good For The Game
it scrolle

![T8N1N18SZP](https://github.com/user-attachments/assets/016d4b3b-7d14-449a-87da-53fce1d1e178)

## Changelog
:cl:
fix: Fixed scrolling the experiscanner UI
/:cl:

* Automatic changelog for PR #90278 [ci skip]

* [No GBP] World Topic tweaks. Scrutinize this heavily (#90244)

## About The Pull Request

- In ``/datum/world_topic`` sets the variable ``require_comms_key =
TRUE`` so any new world_topics handlers will need to be deliberately set
otherwise.
- Added some documentation to help educate any future contributors
(especially on downstreams) the sensitivity of bad world.topic() code.
- Sets the default config to log topic calls. (This should really be
split into its own log file later)

## Why It's Good For The Game
Lingering security education is a good thing to have.
## Changelog

Not player facing

* Reword the Pushover quirk's description to be more accurate (#90289)

## About The Pull Request

Exactly what it says on the tin.

`TRAIT_GRABWEAKNESS` doesn't care if you're resisting via the
verb/button, or by trying to move while grabbed, it acts the same
regardless.

"Resisting out of grabs will take conscious effort" can easily be
interpreted as "you have to use the resist verb/button to escape like
normal", when this is not the case.

I've reworded that part to "Resisting out of grabs is noticeably more
difficult.", to make it clear that resisting out of grabs _in general_
is more difficult.

## Why It's Good For The Game

makes things clearer for players

## Changelog
:cl:
qol: Reword the Pushover quirk's description to be more accurate to how
it actually works.
/:cl:

* Automatic changelog for PR #90289 [ci skip]

* Prevent admins from using restart option which can leak DB connections. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (#90182)

:cl:
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/:cl:

DNM because we need the rust-g PR to get released:
https://github.com/tgstation/rust-g/pull/210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.

* Automatic changelog for PR #90182 [ci skip]

* modular fix removed

* …
itsmeow pushed a commit to itsmeowForks/rust-g that referenced this pull request Mar 31, 2025
itsmeow added a commit to BeeStation/rust-g that referenced this pull request Mar 31, 2025
* Routine Update PR (tgstation#167)

* Standardize redis_reliablequeue connect/disconnect output (tgstation#150)

* More routine updates (tgstation#169)

* IconForge - Building spritesheets at the speed of light (tgstation#160)

* iconforge beta

* Start blending

* Huge cleanup

* Finish optimizing the thing

* Finish the thing!!

* Clean up a bit

* Re-add 32-bit thing

* Fix TOML sorting

* Add dmsrc

* Fix clippy suggestions

* Clippy.. stop being mean

* Cargo fmt + doc comments

* Code cleanup

* More cleanup, remove most unsafe unwrap()s, use Match syntax.

* Remove unneccesarily verbose casting

* Fix overlay blending

* Cleanup with new DMI version

* Cargo fmt

* Leaf test, DynamicImage->RgbaImage, better Error handling, DashMap, and cleanup command

* Fix

* Further tree optimizations, hashing optimization, cache icostrings more effectively.

* Optimize unique_icons insertion a little

* Fix macro

* Little more cleanup

* Add to README

* Update dmi, add caching logic.

* Address reviews

* Cleanup panic unwind

* Fix lint failure

* Fix bounds expansion crops, and properly index crops from 1,1

* Don't multiply by alpha if the base alpha is 0

* Fix subtract blending

* Don't hash the same DMI 500 times

* Address reviews

* Clippy fix

* v3.2.0 (tgstation#170)

* Adds `sanitize_html`, a whitelist based HTML sanitizer. (tgstation#171)

* Adds batchnoise to the default features set (tgstation#174)

* Typical Routine Updates (tgstation#175)

* Add task for building on windows (tgstation#176)

* v3.3.0 (tgstation#177)

* Fast poisson sampling (tgstation#178)

Co-authored-by: ZeWaka <zewakagamer@gmail.com>

* Add format argument to git revdate ffi (tgstation#179)

* Add method of parsing revdate for HEAD directly from logs (tgstation#180)

* use lines not split (tgstation#181)

* Windows 7 (tgstation#183)

* Allow compiling non-32bit under feature flag (tgstation#184)

Co-authored-by: ZeWaka <zewakagamer@gmail.com>

* 32bit readme (tgstation#186)

* v3.4.0 (tgstation#187)

* Fix a panic in `byond::parse_args` with debug assertions (tgstation#189)

* chore: routine updates (tgstation#190)

* more assorted package updates because bored (tgstation#191)

* last-minute updates (tgstation#193)

* v3.5.0 (tgstation#194)

* iconforge: Use height() for y axis to support non-square icons (tgstation#197)

* Add building of x64 libs to CI (tgstation#200)

* Add hash and iconforge as default features (tgstation#196)

* IconForge: GAGS (tgstation#188)

* 64 bit lib detection (tgstation#202)

* update mysql crate, trims a lot of deps (tgstation#203)

* Reset to correct versions

* IconForge: Sort GAGS output states (tgstation#206)

* IconForge: Improve GAGS frame/dir difference handling (tgstation#207)

* gamer release workflow

* v3.7.0 (tgstation#208)

* Fix release upload paths

* fully correct and rename files in CI/CD

* Massively optimizes `dmi_icon_states` (tgstation#209)

* Add support for timing out HTTP calls (tgstation#210)

* v3.8.0 (tgstation#211)

* fix default release name while i remember

* Feature: rustg_sound_length() (tgstation#192)

* update `rand` to `0.9`, `cargo update` (tgstation#204)

* Adjust CI to match our workflow

* Fix outdated upload-artifact version

---------

Co-authored-by: ZeWaka <zewakagamer@gmail.com>
Co-authored-by: Kapu1178 <75460809+Kapu1178@users.noreply.github.com>
Co-authored-by: GoldenAlpharex <58045821+GoldenAlpharex@users.noreply.github.com>
Co-authored-by: Fluffy <65877598+FluffyGhoster@users.noreply.github.com>
Co-authored-by: Zephyr <12817816+ZephyrTFA@users.noreply.github.com>
Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
Co-authored-by: Kyle Spier-Swenson <kyleshome@gmail.com>
Co-authored-by: Lucy <lucy@absolucy.moe>
Co-authored-by: tigercat2000 <nick.pilant2@gmail.com>
Co-authored-by: Amy <3855802+amylizzle@users.noreply.github.com>
Co-authored-by: Jordan Dominion <Cyberboss@users.noreply.github.com>
lessthnthree pushed a commit to effigy-se/effigy that referenced this pull request Apr 4, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
Vallat pushed a commit to Vallat/tgstation that referenced this pull request Apr 9, 2025
…s. Adds timeouts to TTS HTTPS requests (rust-g version bump required). (tgstation#90182)

🆑
config: Added `TTS_HTTP_TIMEOUT_SECONDS` for setting the maximum
duration TTS HTTP requests can run for before being aborted.
/🆑

DNM because we need the rust-g PR to get released:
tgstation/rust-g#210

Crit prio because rounds will not restart if there are hung TTS requests
and the TTS server is absolute dogshit and doesn't prevent them.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants