Skip to content

[мануал миррор] Куча пропущенных пров с тг #4958

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 118 commits into from
Aug 24, 2024

Conversation

Iajret
Copy link
Collaborator

@Iajret Iajret commented Aug 24, 2024

NovaSector/NovaSector#4233

Драфт. Первый из шести(?) пропущенных батчей. Буду по прядку их сюда пихать.

NovaSector/NovaSector#4261 - второй
NovaSector/NovaSector#4264 - третий
NovaSector/NovaSector#4294 - четвёртый
NovaSector/NovaSector#4289 - пятый
NovaSector/NovaSector#4300 - шестой
Чейнджлоги включены в коммиты.

Ещё NovaSector/NovaSector#4295 и NovaSector/NovaSector#4296 которые затерялись в мерж коммитах.

🆑 Hardly
fix: Fixed Snowglobe Station not having secret documents
tweak: Added items to Snowglobe station's safe located inside the vault
/:cl:

SomeRandomOwl and others added 3 commits August 24, 2024 14:32
* Circuit UI scale no longer suffers from FPEs and doesnt get covered by component menu (#85653)

## About The Pull Request
Added rounding to 1 number after point to prevent FPEs and made the
scale bar shrink when component menu gets open as to prevent it from
getting covered by the menu, which made it impossible to see or increase
current scale

## Changelog
:cl:
fix: Circuit UI scale no longer has weird rounding
fix: Circuit UI no longer gets covered by components menu
/:cl:

* Automatic changelog for PR #85653 [ci skip]

* Fixed Charlie MOD installer not installing MODsuits unless you have a backpack to drop (#85671)

## About The Pull Request

Closes #85669

## Changelog
:cl:
fix: Fixed Charlie MOD installer not installing MODsuit unless you have
a backpack to drop
/:cl:

* Automatic changelog for PR #85671 [ci skip]

* Fix tadpole scooping (#85691)

## About The Pull Request
Fixes swapped arguments to a do_after, allowing tadpoles to be scooped
from puddles
## Why It's Good For The Game
bug bad
## Changelog
:cl:
fix: tadpoles can actually be scooped from ponds
/:cl:

* Automatic changelog for PR #85691 [ci skip]

* Post release notes in DMAPI PR body (#85723)

- Change committer to tgstation-server-ci[bot]

Also denaturing DMAPI slightly so I can test.

* Automatic changelog compile [ci skip]

* Removes an unused var from SSpersistence (#85696)

## About The Pull Request
I think I may have forgotten to remove it from the final version of the
persistent piggy banks PR (museum cafeteria yadda yadda)

## Why It's Good For The Game
Unused var.

## Changelog
N/A

---------

Co-authored-by: SmArtKar <[email protected]>
Co-authored-by: orange man <[email protected]>
Co-authored-by: FlufflesTheDog <[email protected]>
Co-authored-by: Jordan Dominion <[email protected]>
Co-authored-by: Changelogs <[email protected]>
Co-authored-by: Ghom <[email protected]>
* Fixes Donk Co. & Waffle Corp Trademark Issues (#85686)

## About The Pull Request
All references to "Waffle Co" and "Waffle Company" have been scrubbed
and replaced with appropriate branding. "The Waffle Corporation" may be
shortened to "Waffle Corporation", "Waffle Corp" or "Waffle Corp." only.

All references to "Donk Corp." and "Donk Corporation" have been scrubbed
and replaced with appropriate branding. "Donk Company" may be shortened
to "Donk", "Donk Co" or "Donk Co." only.
## Why It's Good For The Game
Keeps these names consistant and lore accurate.
## Changelog
:cl:
spellcheck: fixed many incorrect spellings of Waffle Corp and Donk Co.
/:cl:

---------

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

* Automatic changelog for PR #85686 [ci skip]

* You no longer kill yourself in cockroach form if you attempt to unposess it (#85647)

## About The Pull Request
Closes #85626

## Changelog
:cl:
fix: You no longer kill yourself in cockroach form if you attempt to
unposess it
/:cl:

* Automatic changelog for PR #85647 [ci skip]

* Ore ore ore ore ore... sounds. (#85738)

## About The Pull Request
Closes tgstation/tgstation#85615

#### Applied to:
- all ore subtypes, except bluespace polycrystals
- Sandstone blocks

### Video:


https://github.com/user-attachments/assets/7fdd322a-4f57-4df7-bd72-e6400382b58b
## Why It's Good For The Game
immersion.
## Changelog
:cl: grungussuss
sound: ore and sandstone blocks have their own sound
/:cl:

* ambience sound fixes (#85645)

## About The Pull Request
ambigen1 and ambigen12 had a lot of white noise to it so we tried to
reduce it.
(kayozz did all the work)

<details>
<summary>Comparisons</summary>
<br>



https://github.com/user-attachments/assets/f87c9989-6ac0-40e7-88c5-11e726a2dd61



https://github.com/user-attachments/assets/ba431df9-9604-43db-9145-1115b95894bb



https://github.com/user-attachments/assets/83c74ac5-271e-4002-90ad-ae4c96873efc



https://github.com/user-attachments/assets/28c864e5-3b51-4ddc-a5f1-70311653828f

</details>

## Why It's Good For The Game
I heard it once and haven't been able to unhear it ever since, it's
really jarring to hear that white noise in the sound
## Changelog
:cl: grungussuss and kayozz
sound: white noise from some ambience sounds has been pruned
/:cl:

* Automatic changelog for PR #85738 [ci skip]

* Automatic changelog for PR #85645 [ci skip]

* Laser pointers no longer make felinids phase through diagonal gaps (#85755)

## About The Pull Request

Someone forgot the dir argument, making it possible to phase through
diagonal gaps.

## Why It's Good For The Game

One less bug. I like my gbp

## Changelog

:cl:
fix: Felinids no longer phase through diagonal gaps upon seeing a laser
/:cl:

* Automatic changelog for PR #85755 [ci skip]

* Automatic TGS DMAPI Update (#85751)

This pull request updates the TGS DMAPI to the latest version. Please
note any changes that may be breaking or unimplemented in your codebase
by checking what changes are in the definitions file:
code/__DEFINES/tgs.dm before merging.

Full changelog can be found
[here](https://raw.githubusercontent.com/tgstation/tgstation-server/gh-pages/changelog.yml).

- Added consumer APIs for overriding HTTP GET implementation.
(tgstation/tgstation-server#1853 @Cyberboss)
- Fixed Discord documentation links.
(tgstation/tgstation-server#1853 @Cyberboss)
- Use IETF RFC 2119 wording in documentation.
(tgstation/tgstation-server#1853 @Cyberboss)
- Populate some documentation comments for previously undocumented
public entities.
(tgstation/tgstation-server#1853 @Cyberboss)
#tgs-dmapi-release

Co-authored-by: tgstation-server-ci[bot] <161980869+tgstation-server-ci[bot]@users.noreply.github.com>

* Fake aurora caelus event no longer permanently paints space green (#85777)

## About The Pull Request

Closes #84651
Also made sure that if there somehow are multiple kitchen areas chefs
don't yell steamed hams line multiple times

## Changelog
:cl:
fix: Fake aurora caelus event no longer permanently paints space green
/:cl:

* Fixed monk staffs not displaying a wielded sprite (#85767)

## About The Pull Request

Closes #85764

## Changelog
:cl:
fix: Fixed monk staffs not displaying a wielded sprite
/:cl:

* Resprited assemblies (#85763)

## About The Pull Request

Refreshes absolutely ancient assembly sprites in 3/4 format


![image](https://github.com/user-attachments/assets/433b25d2-b1be-423e-9423-d71067ee54b5)
Top to bottom, left to right: voice analyzer, health scanner, condenser,
igniter, proximity detector (now inspired by IRL motion detectors),
remote signaller, timer and infrared beam emitter. Timers now also show
time left with their blinking lights, additional lights will blink for
every 10 seconds remaining on the timer

## Why It's Good For The Game
Current ones are absolutely ancient and rather abstract, I am honestly
not even sure what half of them were supposed to represent.

## Changelog
:cl:
image: Resprited all main assemblies
/:cl:

* Wawastation Science distro fix and a missing cable mended (#85762)

## About The Pull Request

Adds a missing distro pipe in science maint needed to Science to have
atmos distro
Adds a missing cable in the Electrical Relay connected to Service Maint
that acts as a redundency
## Why It's Good For The Game

Noticed Ordenence burn chamber wasnt cycling due to no distro.. then
found all of science had no distro.. oh no. Tracked missing pipe in
maint.

Also spotted a missing cable above service maint due to the catwalk bug.
## Changelog
:cl:
fix: Wawastation Science is connected to distro,Floor Electrical Relay
cable fixed
/:cl:

* Prevents people from being shoved into closets/crates/bins through directional glass (#85760)

## About The Pull Request

forceMove made it possible for someone to get shoved into a
closet/crate/disposals bin through a piece of directional glass that was
located on said objects tile, resulting in a very cheesy way to GBJ
people.

## Changelog
:cl:
fix: You can no longer shove people into closets through directional
glass
/:cl:

* Some crime and citations fixes (#85733)

## About The Pull Request

1. Silicons now able to invalidate crimes, because... they have armory
access too.
2. After citation being paid off there will be no more broken 0 in sec
records
3. After citation being paid off it will be invalidated automticaly
4. Crime authors can invalidate crimes, issued by them.
5. In case of invalidation, crime now shows who voided it
6. Also fixing bug with editing crime description
<details>
<summary>Screenshots</summary>

![image](https://github.com/user-attachments/assets/d6635dd2-87a8-47d6-a7eb-269c08fbdcf5)

![image](https://github.com/user-attachments/assets/8d739e57-24a5-4d58-8a87-47344a04b46c)

![image](https://github.com/user-attachments/assets/c000caff-76c7-484d-bf8f-57a2946e93c4)

</details>

## Why It's Good For The Game

Thats few fixes and QoLs features.
If someone want to argue about:
1. Synths: man they was able to issue crimes which is more impactfull +
now voiding is recorded
2. Authors: they had ability to edit name and description, why can't
delete?
3. Voiders: how offen do you use invalidate button? How many of those
uses you wanna hide from sec?
## Changelog
:cl:
fix: Strange zeros in paid off citations on sec records
fix: Now invalidating citations works
fix: You can change crimes description
fix: Synths have 'armory access' for sec records logic
qol: Paying off citation now automaticaly voiding it
qol: Crime issuer can void the crime without armory access
qol: In case of invalidation crime shows who voided it
/:cl:

* Fixed shuttle loan paperwork being unstampable (#85721)

## About The Pull Request

Closes #85717

## Changelog
:cl:
fix: Fixed shuttle loan paperwork being unstampable
/:cl:

* Fixed bileworms not having a deaggro range (#85719)

## About The Pull Request

Closes #69244
Bileworms use standard 9 tiles of vision but also have the ignore_sight
flag, which prevents can_see check from running. Check, which is the
only place where deaggro range check exists. Vision range may need
bumping up based on player feedback if they seem to be deaggroing too
easily due to slow movement speed now that they actually do so

## Changelog
:cl:
fix: Fixed bileworms not having a deaggro range
/:cl:

* Buff to MODsuit deployment time (#85705)

## About The Pull Request
Before it took 12 seconds to fully deploy (2 seconds per part) so it's
just an awkward standing around moment while you wait for your MOD to
activate in front of the airlock.
- Increased speed of MODsuit deploy time by 2 times
- Increased speed of infiltrator MODsuit deploy time by 4 times
## Why It's Good For The Game
One of the reasons why so many players are deterred from MODsuits is how
long the deployment or undeployment takes.
This change should increase the desire for players to use MODsuits and
will raise their value, giving more incentive to produce more, which
roboticists barely ever do.

The infiltrator MODsuit is supposed to be a sneaky sleek and quick
(infiltrating) device, allowing you to quickly disguise your identity
and then quickly become inconspicuous. This change allows it to execute
that purpose better.
## Changelog
:cl: grungussuss
balance: MODsuits now deploy 2 times faster
balance: The infiltrator MODsuit now deploys 4 times faster
/:cl:

* Automatic changelog for PR #85777 [ci skip]

* Fixes a hard del with island_brawl spawners (#85684)

## About The Pull Request


![yN86RRrD0h](https://github.com/user-attachments/assets/2aaa23c8-1fcb-4a40-ad54-c71306a2f430)

Tin, just aims to fix this hard del by releasing the refs when the
spawners get qdeleted.

## Why It's Good For The Game

Fixes a hard del---also, there were some issues with this domain not
clearing itself properly under certain cases and this may resolve that.

## Changelog

Nothing player facing

* Automatic changelog for PR #85767 [ci skip]

* Automatic changelog for PR #85763 [ci skip]

* Automatic changelog for PR #85762 [ci skip]

* Fixes DNA sampler attack chain heck (#85662)

<!-- 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

Closes #85656

## 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: Fixed DNA samplers not being able to interact with non-scannable
objects
/: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 #85760 [ci skip]

* Fixed chanterelles runtiming upon being hollowed out with a spoon and not spawning a hat (#85663)

## About The Pull Request

Closes #85659

Not, in fact, attack chain heck. Just seed getting deleted too soon.

## Changelog
:cl:
fix: Fixed chanterelles runtiming upon being hollowed out with a spoon
and not spawning a hat
/:cl:

* Automatic changelog for PR #85733 [ci skip]

* Automatic changelog for PR #85721 [ci skip]

* Automatic changelog for PR #85719 [ci skip]

* [NO GBP] (Not so) hotfix for ninja cloaking (#85673)

## About The Pull Request

Closes #85639
dumb me forgetting to test a specific module weeks ago and it getting
past review

## Changelog
:cl:
fix: Ninjas can cloak again
/:cl:

* Automatic changelog for PR #85705 [ci skip]

* Retextured Durand's shield, fixed power drain and UI (#85718)

## About The Pull Request

![dreamseeker_phiCk3bcfG](https://github.com/user-attachments/assets/5e2dfb36-cb8b-4954-8c04-5b452dfb0a2f)

Closes #84419
Durand drained ten times the default cell capacity per tick due to power
changes, and UI for some reason multiplied the cell charge by a
thousand, confusing the players. Also minor cleanup.

## Why It's Good For The Game
Super dated sprite that doesn't really fit the modern durand

## Changelog
:cl:
image: Durand shield got a glowup
fix: Durand shield no longer instantly drains its battery
fix: Mech UI no longer lies about the amount of power your mech has left
/:cl:

* Automatic changelog for PR #85662 [ci skip]

* Adds arms/legs coverage to armored gloves/shoes, adds a unit test to check for former (#85667)

## About The Pull Request
Turns out HANDS and FEET coverage doesn't actually apply armor to the
body, at all, making it entirely useless. Despite this, a lot of
clothing still does it! So I added ARMS and LEGS flags to gloves/shoes
that do it respectively and wrote a unit test for it that will yell out
a list of all items missing coverage while having non acid/bio/fire
armor (three snowflake types)

as discusses with melbert on discord

## Why It's Good For The Game
...features working as intended?

## Changelog
:cl:
balance: Multiple gloves/shoes that had armor values but failed to apply
them got fixed
/:cl:

* Automatic changelog for PR #85663 [ci skip]

* Automatic changelog for PR #85673 [ci skip]

* Fix a spot of shitcode (#85683)

## About The Pull Request
OD errors on invalid values for `color` in a color filter def, BYOND
just fails silently and gives a white color matrix. I'm guessing this
was going for identity matrix == white, but `/matrix` is not a color
matrix.

OD also errors on invalid values for `easing` in `animate`, which this
also fixes an instance of
## Why It's Good For The Game
Fix shitcode

---------

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

* Automatic changelog for PR #85718 [ci skip]

* Automatic changelog for PR #85667 [ci skip]

* Fixes a bug that made it so radios inside objects would blare out their comms to everyone around them (#85676)

## About The Pull Request
Currently things like bounty cubes that are not supposed to be
broadcasting comms, are doing so for the department their nested radio
is set to.
This happens because when an encryption key is put into a radio that is
off and that radio has its channels recalculated, all of the default
channels on the encryption key (in the case of bounty cubes, supply) are
set to being on and the radio 'forgets' that its supposed to be off
until it is turned back on, then turned off again. Obviously we cannot
do this to a radio inside of an object in game, as we have no way of
accessing it, so I am adding a check for if the radio is off at the end
of recalculatechannels() and if it is off, it will turn it on, then back
off so it can remember
## Why It's Good For The Game
fixes a rather minor bug which gives anyone free [insert comms channel
here] for any object with a radio inside that is given an encryption
key, my example being a bounty cube with a radio and an encryption key
for cargo.

This could also be solved by going through every single instance of a
nested radio and taking away their keys and instead doing
set_frequency(FREQ_<DEPARTMENT>) However, this would nip the bug in the
bud when otherwise the way its been being written should be working.
## Changelog
:cl:
fix: fixed nested radios with encryption keys giving free comms
/:cl:

---------

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

* Automatic changelog for PR #85676 [ci skip]

* Fixes a typo and bad punctuation in blackout drunk trauma message (#85661)

## About The Pull Request
When looking through the code I noticed the blackout drunk message in
the split_personality.dm file had a typo (liscense -> license) and bad
punctuation + I think the sentences were structured a bit weirdly so I
rearranged them. The meaning should be intact but it's grammatically
correct and reads easier.
## Why It's Good For The Game
spelling and grammar errors are bad and we should get rid of them
## Changelog
:cl:
spellcheck: fixed spelling and punctuation in the blackout drunk split
personality message
/:cl:

* nerfs the HP of bushes (#85682)

## About The Pull Request
- Lowered the HP of the "flora" type from 150 (same as reinforced
window) to 100
- Trees are still 150 HP
- Gave flora an x4 modifier to burn damage (takes 4 times the burn
damage)
## Why It's Good For The Game
Every time you do a project as an engineer on a map with bushes, each
bush takes 10 welding tool hits to destroy, overall bushes have way too
much HP and shouldn't be this difficult to destroy.
## Changelog
:cl: grungussuss
balance: bushes and other flora have had their HP reduced from 150 to
100. Trees still have 150 HP
balance: flora now has an X4 modifier to damage from burn sources
/:cl:

* Automatic changelog for PR #85682 [ci skip]

* Makes cyborg endoskeleton a roundstart research again (#85695)

## About The Pull Request

Cyborg endoskeletons no longer require a research node to be made,
making them possible to create at roundstart.
## Why It's Good For The Game

I feel like placing these behind a node doesn't really do anything
that's worth having it there. There's very little to do at roundstart
other than making cyborgs or clean/medibots at roundstart, so most of
the beginning of a shift turns into "trying to get R&D to research the
thing you need to do arguably the most important part of your job". I
haven't been able to find a single benefit for doing this. Arguably,
it's like this to prevent people from "wasting resources on cyborgs that
never get built", but I can't say I've ever been on a round with more
than 30-40 people where I didn't build at least two borgs.

What actually ends up happening is one roboticist makes everything but
the endoskeleton while the other tries to get access to the R&D computer
to research cybernetics so they can finish making a cyborg. It was also
argued that augmentation is more often requested at roundstart than
borging, which I have seen maybe twice in the last three years.
## Changelog
:cl: Vekter
balance: Removes the research requirement from cyborg endoskeletons,
meaning they can be built at roundstart again.
/:cl:

* Automatic changelog for PR #85695 [ci skip]

* fixes wolf ai getting stuck (#85654)

## About The Pull Request
wolf AI tend to get stuck processing this behavior infinitely 

## Why It's Good For The Game
fixes wolf ai getting stuck sometimes

## Changelog
:cl:
fix: wolf AI will no longer get stuck
/:cl:

* Automatic changelog for PR #85654 [ci skip]

* Bubblegum can no longer bloodcrawl to other Z levels (#85655)

## About The Pull Request

Closes #85638
Closes #64063
Now has a Z level check

## Why It's Good For The Game

While funny as hell (fuck around and find out, miner) I do not think
that this is a very good idea to leave it in, considering current
attitude regarding easy ways to bring megafauna onboard the station.
Plus using Jacob's Ladder as an escape route is a pretty creative use
for a gimmicky item

## Changelog
:cl:
fix: Bubblegum can no longer bloodcrawl to other Z levels
/:cl:

* Wellcheers fix (#85634)

## About The Pull Request
Fixes the way Wellcheers soda checks sanity for its sanity-based
effects, removing "holes" of sanity values in which it would do nothing
at all.

Old code checks sanity values in ranges 0-25, 50-75, 100-125, new code
checks sanity _levels_ instead so that it's exhaustive

## Why It's Good For The Game
Makes wellcheers have the intended effect, fixes
tgstation/tgstation#85617

## Changelog
:cl:
fix: Wellcheers no longer does nothing half the time
/:cl:

Co-authored-by: Roryl-c <[email protected]>

* Automatic changelog for PR #85655 [ci skip]

* Automatic changelog for PR #85634 [ci skip]

* Ash drakes no longer get stuck in flight if their target changes Z levels or is destroyed and doesn't spawn lavaland turfs after the lava arena attack ends (#85700)

## About The Pull Request
Closes #79210
Closes #56244
Cleaned up the code and added some much-needed sanity checks. Not sure
how exactly the latter issue happened but the checks should ensure that
it doesnt occur again. Also made the drake not terraform turfs into
lavaland ones after the lava disappears because if it ever went to
station it ended up permanently changing space turfs which is not good,
and there's no reason for terraforming on lavaland already.

## Changelog
:cl:
fix: Ash drakes no longer get stuck in flight if their target changes Z
levels or is destroyed and doesn't spawn lavaland turfs after the lava
arena attack ends
/:cl:

* Adds gardening tools to Wawastation permabrig (#85633)

## About The Pull Request
Adds some rakes, plant analyzer, a watering can, and a spade to
Wawastation's permabrig garden.

![wawastationgarden](https://github.com/user-attachments/assets/f25de62f-fdc3-4208-ac72-12a479e341c5)
## Why It's Good For The Game
Feature parity with other maps and permabrig prisoners can actually
garden without worrying about weeds and if their plants are OK or not.
## Changelog
:cl: Treach
fix: Wawastation's permabrig garden now has gardening tools
/:cl:

* Circuit health analyzer/state components now work on targets inside lockers (#85649)

<!-- 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

Makes circuit health analyzer/scanner components check distance to
target turf instead of target itself similarly to (most) other
components. (There are exceptions, presumably due to balancing?
concerns, but this feels like it should not have been one)

This doesn't feel intentional so I marked it as a fix, given that BCIs
stopping being able to scan their occupant is rather nonsensical

## Why It's Good For The Game

Currently BCIs with health analyzer components stop working if the owner
goes into a locker which is pretty stupid. Most components also only
check for turf distance, and while this could theoretically be used to
pinpoint someone's hiding spot there are far better ways to do so with
circuits

## 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: Circuit health analyzer/state components now work on targets inside
lockers
/: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 #85700 [ci skip]

* Automatic changelog for PR #85649 [ci skip]

* Add a janitorial 'borg plunger (#85475)

## About The Pull Request
I got annoyed at not being able to plung vents when there's a clog. This
PR corrects that. I copied all of the cyborg mop attributes to make
this. This is my first PR on this server, but I did test it on a local
server, and it indeed, plungs.

## Why It's Good For The Game
More content for janitorial cyborg. They really should have a plunger,
to be honest. It just makes sense to me.

## Changelog
:cl:
add: Added a cyborg plunger for janitorial modules
/:cl:

* Slimes no longer can feed when they're inside of objects or attacking a target that became invalid after they chose their dinner (#85467)

## About The Pull Request

Closes #85466

## Changelog
:cl:
fix: Slimes no longer can feed when they're inside of objects or
attacking a target that became invalid after they chose their dinner
/:cl:

* Fix TGUI notepad with various small fixes (#85472)

## About The Pull Request

Back from my hiatus and playing ss13 again! A few fixes for this
component I wrote back in 2022. Hopefully the commit messages are
self-explanatory.

There's one fix to TextArea that needs extra scrutiny. I removed the
`blur()` call as it prevents newline input (unless holding shift).
@jlsnow301 Could you check this one-liner change?

## Why It's Good For The Game

Fixes incorrect prop usage, uses new props on TextArea, uses
`login.IDName` instead of `clientName` and so on.
The most important fix would be restoring state change on text input as
that's quite important for other bits to work.

## Changelog
:cl:
fix: Various fixes to TGUI notepad
/:cl:

* Automatic changelog for PR #85475 [ci skip]

* Automatic changelog for PR #85467 [ci skip]

* Automatic changelog for PR #85472 [ci skip]

* Fixes some missing body_parts_covered flags

---------

Co-authored-by: Da Cool Boss <[email protected]>
Co-authored-by: BlueMemesauce <[email protected]>
Co-authored-by: orange man <[email protected]>
Co-authored-by: SmArtKar <[email protected]>
Co-authored-by: grungussuss <[email protected]>
Co-authored-by: Waterpig <[email protected]>
Co-authored-by: tgstation-server-ci[bot] <161980869+tgstation-server-ci[bot]@users.noreply.github.com>
Co-authored-by: Dmeto <[email protected]>
Co-authored-by: Archemagus <[email protected]>
Co-authored-by: Amy <[email protected]>
Co-authored-by: ike709 <[email protected]>
Co-authored-by: Odairu <[email protected]>
Co-authored-by: Odairu <[email protected]>
Co-authored-by: Treach <[email protected]>
Co-authored-by: Vekter <[email protected]>
Co-authored-by: Ben10Omintrix <[email protected]>
Co-authored-by: Runi-c <[email protected]>
Co-authored-by: Roryl-c <[email protected]>
Co-authored-by: nesquik <[email protected]>
Co-authored-by: Matt <[email protected]>
Iajret and others added 25 commits August 24, 2024 15:01
## About The Pull Request

Relative positions are calculated incorrectly in widescreen mode without
this. To demonstrate, call
```
screen_loc_to_offset("EAST-4,SOUTH", null) = [-128,32]
```
When passed to offset_to_screen_loc, this will be clamped to (32,32)
```
offset_to_screen_loc(-128, 32, view = our_view) = "1,1"
```
And returned as 1,1 - moving the action button incorrectly.

By including our_view in the call to `screen_loc_to_offset`, this entire
problem is avoided.

## Why It's Good For The Game

If someone sets a floating action button to be relative to EAST, SOUTH,
or CENTER, they run into this bug. As far as I can tell, nothing
currently does this and therefore it isn't meaningful, but I've run into
this twice now downstream.
## Changelog
:cl:
fix: Fixed action buttons relative to EAST,SOUTH, or CENTER being
improperly moved during view_audit_buttons()
/:cl:
## About The Pull Request

Add syndicate branded lipstick for stealth operations, super-secret
formula allows you to do similar energy gun damage with just a kiss,
leaving a distinctive laser-like mark.

## Why It's Good For The Game

The traitor arsenal is replenished with a new method of killing, elegant
and without suspicion. Just send an air `*kiss`!
You might ask what makes syndie kiss different from mime gun, besides
similar characteristics to egun:
- Causes burn damage
- It's the emote `*kiss` after lipstick application that does the
damage, not the lipstick itself
- It has standard kissing cooldown
- Kisses always fly to the head, good for the investigation
- Can fly through windows and lattice
- Unlimited number of lipstick uses
- Could be wiped out, unlike mime gun
- Can be reapplied after wiping off

In addition to adding lipstick, also:
- Fix wallhit sound, accidentally hit a wall and no sound came out of
it, and not just with a kiss
- Kiss log no longer contains on hitting the kisser name, but there is a
log about sending a kiss

## Changelog

![image_2024-07-25_20-02-34](https://github.com/user-attachments/assets/f74be8d5-8d9b-46a8-a2e7-019644d9f880)

![image_2024-07-25_20-02-53](https://github.com/user-attachments/assets/8f8d97dd-caf0-49a6-873d-b80d0acfc217)

![image_2024-07-25_20-27-48](https://github.com/user-attachments/assets/74ccea72-7f31-4771-8e8e-56a23109ccec)

![image](https://github.com/user-attachments/assets/2d4d52fe-067e-460a-91a7-a2a9cfa93cd3)

:cl:
add: add syndicate branded lipstick to uplink (6 TC), after applying
lipstick *kiss deals damage equal to energy gun
fix: fix wallhit sound for projectile
/:cl:
# Conflicts:
#	code/modules/projectiles/projectile.dm
## About The Pull Request

Sooooooo this one's a mess.
First off, layering issues. Pipes, cables, and disposals currently
render over catwalks!

![image](https://github.com/user-attachments/assets/bfb6fc15-878c-4686-aace-57f0b9c6923a)
That's not great.

Looking into it, it seems we've moved the `CATWALK_LAYER` below the
`ABOVE_OPEN_TURF_LAYER`, where the catwalk layer is used for closed
catwalks.

https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/__DEFINES/layers.dm#L148-L150
Which, well, we've *also* made it so all `undertile` stuff gets rendered
at `ABOVE_OPEN_TURF_LAYER` when below a tile.
So! Naively! We swap those around! Easy peasy lemon squeezy.
```dm
 #define ABOVE_OPEN_TURF_LAYER (12 + TOPDOWN_LAYER)
 #define CATWALK_LAYER (13 + TOPDOWN_LAYER)
```
And hey! Well!

![image](https://github.com/user-attachments/assets/42d7a8f3-5c17-4039-a76b-dbd789432156)
It's progress!
But as we can see in the bottom right catwalk tile, something's not
rendering right when they're below the tile...

Well, time to take a closer look at our `undertile` element... aaaaaand
would you look at that:

https://github.com/tgstation/tgstation/blob/74f9a4314138afcb04af3cfb452ff167105f022c/code/datums/elements/undertile.dm#L45-L48
We're setting EVERYTHING to the `FLOOR_PLANE` at
`ABOVE_OPEN_TURF_LAYER`, even the stuff that was already on
`FLOOR_PLANE` with its own layer like disposals or cables.
Meaning, layering fuckery ensues, we can't see shit.

So? We just make it only do that when we're not already on the floor
plane.
```dm
	if(PLANE_TO_TRUE(source.plane) != FLOOR_PLANE)
		SET_PLANE_IMPLICIT(source, FLOOR_PLANE)
		source.layer = ABOVE_OPEN_TURF_LAYER
```
This solves it!

![image](https://github.com/user-attachments/assets/f930bd66-87eb-433e-8bf5-09706316ace4)
Progress!

![image](https://github.com/user-attachments/assets/f2f246a2-8524-4186-9ac3-07ac7dcf4288)
...Kind of.
The _layering_ is solved, but unscrewing and rescrewing them seems to
cause pipe caps to manifest out of nowhere!
This _sucks_ for debugging, y'know?
Anyhow, this is based on two different things: an order of operations
issue and catwalks just not being accounted for.

First off! Order of operations.
On `Initialize(...)`, the base `/obj/machinery/atmospherics` registers a
proc that updates pipe caps on `COMSIG_OBJ_HIDE`:

https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L114-L115
Meanwhile, `/obj/machinery/atmospherics/pipe`, adds the `undertile`
element on its `Initialize(...)`... AFTER calling the parent.

https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/pipes/pipes.dm#L31-L35
...Which then registers its own proc on `COMSIG_OBJ_HIDE`...

https://github.com/tgstation/tgstation/blob/74f9a4314138afcb04af3cfb452ff167105f022c/code/datums/elements/undertile.dm#L26
This meant that, well, the proc that generates the caps was being called
*before* undertile had a chance to chance to remove the
`TRAIT_UNDERFLOOR` trait... which pipe caps use to work out when to
generate.

https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L650-L652
So, we swap this around by moving both to a `setup_hiding()` proc which
allows the pipe to register its behaviours before calling the parent and
it register its, without needing to register it before calling the
parent `Initialize(...)`. Cause that's ugly.
Now we're generating pipe caps on catwalks!

But! That brings us perfectly to the next bit. Cause those pipe caps,
even if shown when the tile is open, look *ugly*.
Why, when we open a catwalk, are we having our pipes suddenly extend
onto the neighbouring tiles and catwalks and going down into them from
the top? Arguably, these should behave like they're below tiles, because
they logically are even if not technically so.
Well, actually, we already have a similar situation with bare plating.
It's not applying `TRAIT_UNDERFLOOR`, but also the pipe caps shouldn't
be behaving like they're above a tile, because that'd be ugly- and
that's what it does!

https://github.com/tgstation/tgstation/blob/33e983ced1ac27143c4b87d8761277eea35a6d2a/code/modules/atmospherics/machinery/atmosmachinery.dm#L654-L655
So, we just apply a second check there, `iscatwalkturf(...)`
```dm
	var/turf/node_turf = get_turf(node)
	if(isplatingturf(node_turf) || iscatwalkturf(node_turf))
		continue
```

And? Well!

![image](https://github.com/user-attachments/assets/f297136e-f62e-452b-b711-2f3b69462859)

![image](https://github.com/user-attachments/assets/a3f2df8b-3e22-4474-af32-7e858382f63f)

![image](https://github.com/user-attachments/assets/347a2c3b-8302-47b8-a376-41228fbe537a)
There we go! There's no weird layering, there's no pipe caps where there
shouldn't be, pipes behave like those on catwalks are actually under a
tile.
It looks _clean_.
...

Well, for however clean we can get it to be without making sprites for
the opened catwalks but without the integrated plating so we can make an
overlay and have the pipes/cables/disposals not spontaneously go over
the edges of the catwalk when opened. Or making the under sprites only
have the attachment points in the corners, so it looks like the
pipes/cables/disposals are going over plating instead of what looks like
a raised edge.
## Why It's Good For The Game

Fixes #84789.
Fixes #82622.
Screwing open a catwalk suddenly generating pipecaps on neighbouring
closed catwalks and tiles with pipes under them looks weird.
## Changelog
:cl:
fix: Fixed pipes/cables/disposals rendering above closed catwalks.
fix: Fixed catwalks covering pipes generating illogical pipe caps when
screwed.
fix: Opened catwalks are no longer assumed to be above-floor for the
sake of generating pipe caps.
/:cl:
## About The Pull Request

If our appearance is fully dependant on hunger state, there's no reason
to do ANY work if the state hasn't changed, also don't churn underlays
for no reason.

## Why It's Good For The Game

This has relatively high cost and it's an easy win
… specific role (#85228)

## About The Pull Request
Makes it so the default programs in the head PDAs actually works so all
5 do not need to be rewritten for each and every head of staff PDA
## Why It's Good For The Game
there were an unnecessary 5 lines of code per head (minus the captain),
this reduces it to just the special additions they get
## Proof of Testing

![image](https://github.com/user-attachments/assets/64da42f1-d4b3-4e9e-82f5-ee7a3f01f463)

## Changelog
:cl:
code: made it look a little cleaner for head PDAs
/:cl:
<!-- 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

Now there are fax machines that receive and send messages on behalf of
the special networks of NT and syndicate
Also added centcom stamps to centcom (funny, they weren’t there)

![image](https://github.com/user-attachments/assets/e4330793-c87b-4d99-9a86-da795969335b)

<!-- 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

Faxes sent from the CC will have the correct sender name. Also, there
will be no unnecessary faxes in the fax panel

<!-- 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 it's 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:
code: сhanges for a fax located on the CC
qol: added centcom stamps to centcom
/: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. -->
## About The Pull Request

In #77887 I have introduced a food buff system with placeholder buffs to
not bloat that PR with balance-related things to allow people to add
their own effects and discuss the particular effects in separate PRs.

The goal is to have:

- Some default buffs for all food. Currently there's only Haste that
scales with food complexity.
- Some interesting buffs tied to food categories or specific dishes

This PR is a first part of this change.

- Adding an indicator to Cooking UI that food does something special
- Added **Spaghetti Carbonara** dish that gives Italian speech.

![image](https://github.com/user-attachments/assets/2035a97a-6048-4636-bd49-d1ea3390a50e)

- Added **Jupiter Cup Cake** that gives shock immunity instead of it
being randomly given by high-complexity dishes.

![image](https://github.com/user-attachments/assets/3260339d-0167-4840-9b76-10371959e16c)

- Made **Omelette Du Fromage** give French speech.
- Made **Mime Tart** give Mute trait
- Made **Clown Cake** give Waddle Walk trait
- Made **Stuffed Legion** give Ashstorm Immune trait

## Why It's Good For The Game

Foodening PR was incomplete, this PR is a step towards the completion.

## TODO

- [X] Pick a certain dish to give the French speech
- [X] Pick a certain pasta to give the Italian speech
- [X] Pick a certain dish for the shock immunity buff
- [x] Add an indicator to the cooking UI that a dish has a special
effect
- [x] Add more food effects per suggestions

## Changelog

:cl:
qol: Dishes with a special food effect are marked in the Cooking UI
add: New Spaghetti Carbonara dish that makes people Italian temporarily
add: Omelette Du Fromage makes people French temporarily
add: Shock Immunity is no longer a random level 4-5 food buff, but a
buff given by a new Jupiter-Cup-Cake
add: Mime Tart gives Mute trait
add: Clown Cake gives Waddle Walk trait
add: Stuffed Legion gives Ashstorm Immune trait
/:cl:
## About The Pull Request

Basically what the title says. Abductors cannot be converted by
bloodbrother/revs/cult. They will NOT show up as having a mindshield,
however.
## Why It's Good For The Game

Abductors are, by design, incredibly strong. You are not meant to be
able to win against them, and this is reflected policy-wise by the fact
that they're a restricted antagonist. However, this is still a problem
when conversion antags get involved. If an abductor becomes a cultist or
a revolutionary, then suddenly every other player who isn't also
converted has to deal with an abductor without the normal restrictions.
It's not fun to play against and in general just shouldn't happen.
## Changelog
:cl:
balance: Abductors (the antag, not the species) can no longer be
converted by any antagonist.
/:cl:
## About The Pull Request

Gives janitor ERT no slips instead of a clamp

## Why It's Good For The Game

Quite silly for the top of the top janitors from NT losing in a slip
battle with the regular station janny. I'm pretty sure no slip modules
weren't a thing when the ERT modsuits were made

## 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 it's 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:
qol: Nanotrasen has fitted the Janitorial Emergency Response Team with
equipment better suited for the job.
/:cl:
## About The Pull Request

Allows small internals and a few other cargo related items for the Cargo
Gorka suit slot.
Extra items are dest_tagger, and boxcutter.
## Why It's Good For The Game

Literally every other suit I’ve seen allows emergency/plasmaman
internals, also the Gorka only supports 3 items which is really low
compared to hazard vests or jackets. Not adding radios or flashlight as
they are covered with the hazard vest which techs can buy, makes Gorka
more suited to use in department work rather than maints.
Alternatively could make the Gorka a jacket subtype similar to Qm's.

## Changelog

:cl:
qol: Cargo Gorka suit slot now allows emergency/plasmaman internals.

/:cl:
…e (#85619)

## About The Pull Request

This change allows AI Sillicon players to use the BRM - 6 months ago
this PR did a refactor tgstation/tgstation#81358
- Whilst it added the ability for Cyborgs to interact with it - Nothing
was added for AI. This PR just corrects that and changes nothing else.

![image](https://github.com/user-attachments/assets/b5b8aa51-d5c1-4c41-8bac-32a925b6d862)
**The addition of the below matching attack_robot with identical
functions depending on left or right click**
`/obj/machinery/brm/attack_ai(mob/user)`
`/obj/machinery/brm/attack_ai_secondary(mob/user, list/modifiers)`
## Why It's Good For The Game

On many low pop scenarios with AI players, It allows them to begin
generating basic resources (Iron and Glass) for the station. Gives AI
players another task they can do to assist the crew and adds to the
value of an AI even in low pop.

I believe the original PR from six months ago meant to include AI but it
was an oversight, this PR corrects that oversight.
## Changelog
:cl:
fix: AI Players can now operate the BRM (Boulder Retrival Matrix)
/:cl:
## About The Pull Request
`1` is never going to select the first tab as `1 === 'material'` is
always false.
To test this PR, spawn the `/obj/machinery/mineral/ore_redemption` atom.
Upon opening the interface the first tab is now selected.

## Why It's Good For The Game
Less bugs!

## Changelog
:cl:
fix: The first tab is now selected with ore redemption machines when
opened for the first time
/:cl:
…atically do so upon being removed if a circuit has a linked printer (#85648)

## About The Pull Request

Added support for remote material insertion type whitelists and utilized
it to allow circuit printers to recycle components. Removing a component
from UI while the circuit has a linked printer will automatically
recycle it.

Also fixed a rogue space appearing when recycling a single item

## Why It's Good For The Game

You literally cannot do anything with components you remove/do not need
anymore so usually they end up littering circuit lab's floors. This
should make developing circuits slightly less annoying.

## Changelog
:cl:
qol: Circuit components can now be recycles in circuit printers, and
automatically do so upon being removed if a circuit has a linked printer
spellcheck: Recycling a single item no longer outputs a line with a
rogue space infront of it
/:cl:
## About The Pull Request
I've retaken up the crusade to make species specific features modular,
with the end goal of being able to essentially ship of thesis a person
without causing any strangeness (eg, currently if you take an abductor
and replace every body part and organ with a human one including the
brain they still don't need to breath.) To make that a reality we will
need to develop a few more robust tools but here are some easy fixes for
right now.

Changes are:
lizard:
TRAIT_TACKLING_TAILED_DEFENDER -> moved to Lizard Brain
monkey:
TRAIT_GUN_NATURAL -> moved to Primate Brain
Ethereal:
TRAIT_NO_UNDERWEAR -> moved to chest
TRAIT_FIXED_HAIRCOLOR -> removed (had no implementation)
TRAIT_TENACIOUS (illustrious) -> Not functional, fixed by making it an
element that the brain applies
Moth:
TRAIT_TACKLING_WINGED_ATTACKER -> moved to chest
TRAIT_ANTENNAE -> moved to head
## Why It's Good For The Game
Makes sense. More fun for mad scientist types/limbscambler
## Changelog
:cl: itseasytosee
fix: illustrious ethereals now properly get the tenacious trait
code: more species features have been moved to their individual body
parts.
/:cl:
# Conflicts:
#	code/modules/mob/living/carbon/human/species_types/ethereal.dm
## About The Pull Request
As the title says

## Why It's Good For The Game
Shouldn't be able to activate these whilst unconscious, or stall
activation to activate at a convenient time whilst unconsious.

## Changelog
:cl:
fix: Fixed activating specific BCI actions whilst unconsious
/:cl:

---------

Co-authored-by: Watermelon914 <[email protected]>
SmArtKar and others added 18 commits August 24, 2024 15:19
## About The Pull Request

Closes #85741

## Changelog
:cl:
fix: Fixed fish analyzers not being able to scan fish
/:cl:
## About The Pull Request
When a cyborg gets gibbed, its MMI pops out and is still able to talk.
Funny thing about chasms, they gib you, which leaves you still able to
talk despite the fact that you should be dead, so this nulls out the
cyborgs MMI if they fall into a chasm, leaving the player properly dead
albeit round removed
## Why It's Good For The Game
It fixes a bug that almost never happens
## Changelog
:cl:
fix: borgs no longer drop MMIs when chasmed
/:cl:

---------

Co-authored-by: Odairu <[email protected]>
## About The Pull Request
Deja Vu perk now blacklists all centcom areas, not just the ship itself.
It also now teleports you to where you were before the teleport, instead
of teleporting you to the same spot every time.

Closes #85737

## Why It's Good For The Game

In its current implementation it makes you borderline immortal as it
stores your health, but also makes it impossible to escape the station
as you will be teleported to where you first arrived on the station,
stealing your greentext. This way its gives the player a more balanced,
but riskier experience

## Changelog
:cl:
balance: Deja Vu perk now teleports you to where you were before the
last teleport, instead of where you arrived on the station
fix: Deja Vu can no longer be used to return to the wizard ship
/:cl:
## About The Pull Request

![image](https://github.com/user-attachments/assets/79ee3e22-61aa-4851-bebb-45bdffa96d07)

New goliath cloak sprites using, well, new goliath tentacle color
palette. Fancy!

## Why It's Good For The Game

Current sprites are rather crunchy and not very visually appealing for
such a neat item.

## Changelog
:cl:
image: Updated goliath cloak sprites
/:cl:
…ter. Available in any mining loot chests (and portals) (#85820)

<!-- 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

Adds Punching Mitts, which grant the wearer Hunter Boxing. Hunter Boxing
works similar to boxing, but rather than just targeting those who are
boxing ready, it also allows you to apply your boxing skills to various
wildlife and creatures that deserve to be wiped off the face of the
earth in a violent manner.

While the gloves function as a lethal pair of boxing gloves, you still
cannot apply the new effects to normal humans. Even against other
boxers, the gloves operate as normal save that you are dealing Brute
damage instead of Stamina. This is NOT Evil Boxing.

Against wildlife, you gain an extra amount of damage and a much faster
punch speed. You also rebuke the targets that you crit, rather than
staggering/knockout. You also do three times the damage against wildlife
when you crit. You also..yell out your attacks. Loudly.

You can get these gloves from tendril chests and from demonic portals. I
replaced the Nuka Cola from the portals with these gloves. You're
welcome.

Megafauna can now be targeted by martial arts. This is really isn't a
major concern, since even if our martial artist had, say, Gloves of the
North Star, the highest damaging martial arts most people could access,
Sleeping Carp, does pathetically small amounts of damage to megafauna.
And you're in melee. And colossi eat you. This shouldn't be a problem.

![image](https://github.com/user-attachments/assets/53f74568-0a87-4d27-a413-b0ee73e6ebcf)

## Why It's Good For The Game

I just really, really, REALLY wanted to punch the absolute SHIT out of
Bubblegum while screaming the whole time, and by god I should be allowed
to do that because that's awesome as fuck.

Adds a very practical but very rare method of applying your athletics to
some very self-contained content. I was tempted to have this
increase/become stronger with mining skill instead of athletics, but I
actually thought it would be funny if miners were taking the time to
work out before heading down to throttle drakes.

## 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:
add: Punching mitts! Punch wildlife to death and scream the whole time.
ADVENTURE!
balance: Megafauna can be affected by martial arts.
/: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. -->

---------

Co-authored-by: ATH1909 <[email protected]>
Co-authored-by: Jacquerel <[email protected]>
## About The Pull Request

Fixes (Or so I'd guess) part of the #59312 and #81480 issues.

I'll do kebabs and sandwiches in their own atomized PRs as they actually
need some codework

## Why It's Good For The Game

Long before time had a name custom pies and cake were created by the
First Chef Master by using the four Weapons of Chefing: The Knife of
Quakes, the Microwave of Lightning, the Freezer of Ice, and the Oven of
Fire. Weapons so powerful no one can handle all of their power at once.

When he passed away his two sons swore to protect them, but the oldest
was consumed by darkness and destroyed the custom recipes forever with a
rework. A battle between brothers broke out and the oldest was struck
down and banished to the Underworld with the power of this PR.

![image](https://github.com/user-attachments/assets/7f3c377d-d80f-4ba4-8cc3-523b4d576d98)

![image](https://github.com/user-attachments/assets/d3030053-9a05-4bf1-971f-396c09fd1005)

## Changelog

:cl:
fix: custom pies and cakes are craftable again
/:cl:

---------

Co-authored-by: Ghom <[email protected]>
Still may need some testing and fixing here and there, a lot of this was
picked out from the Wallening PRs. Should include as much of it as
possible.
vinylspiders and others added 4 commits August 24, 2024 16:03
## About The Pull Request
Grabs tgstation/tgstation#85935 and
tgstation/tgstation#85900, which slipped by and
_seem_ to not depend on wallening.
Cleans up a couple duplicated things from weird merges
And attempts a fix to the taur body hard deletes, by avoiding trying to
drop limbs in nullspace (like in the character editor)
## Proof of Testing
<details>
<summary>Screenshots/Videos</summary>
  

![image](https://github.com/user-attachments/assets/ac2d0801-89a3-4050-8312-982cdb5bf39b)

</details>

## Changelog
Nothing player facing
@Iajret Iajret marked this pull request as ready for review August 24, 2024 13:11
@Iajret Iajret merged commit 1b43b0e into master Aug 24, 2024
30 checks passed
@Iajret Iajret deleted the manual1 branch August 24, 2024 13:28
Iajret pushed a commit that referenced this pull request Mar 6, 2025
* Turns tarkon uniforms to GAGS Support

* General fixes for the uniform

* Apply suggestions from code review

Thank you vinyl!

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

* Apply suggestions from code review

---------

Co-authored-by: Bloop <[email protected]>
FeenieRU pushed a commit that referenced this pull request Mar 7, 2025
* Adds GAGs Support for Port Tarkon Uniform (#4958)

* Turns tarkon uniforms to GAGS Support

* General fixes for the uniform

* Apply suggestions from code review

Thank you vinyl!

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

* Apply suggestions from code review

---------

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

* [MIRROR] Adds GAGs Support for Port Tarkon Uniform

---------

Co-authored-by: Winter Frost <[email protected]>
Co-authored-by: Bloop <[email protected]>
Co-authored-by: StealsThePRs <[email protected]>
FeenieRU pushed a commit to FeenieRU/Fluffy-STG-Feenie that referenced this pull request Mar 16, 2025
…nced AI Upgrades (Fluffy-Frontier#4936)

* patch + design

* minor spelling mistake

* buff recipe cost a little bit

* additional check if AI is inside

* Apply suggestions from code review

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

* Modular + check 4 organics

* Apply suggestions from code review

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

* Check deadstate + give languages + give synth emotes

* Squashed commit of the following:

commit b8e6ed2cb96e4cd1c43ca1203a8881eb67176431
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 9 00:58:33 2025 +0000

    Automatic changelog for PR #4988 [ci skip]

commit 35f3a6fc9c654e30c8b1b08241c54277f4347a52
Author: RatFromTheJungle <[email protected]>
Date:   Sat Mar 8 19:58:09 2025 -0500

    a 1 line change giving the blueshield's beret its armor values (#4988)

    1 line

commit b7e38d7b434b148dc3a47d662edacfd57421d853
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Sat Mar 8 13:42:14 2025 +0000

    Automatic changelog compile [ci skip]

commit b7c4eb26b4b79e1924583be048461f7045188b90
Merge: d1eb3409478 d217cf32eff
Author: Bloop <[email protected]>
Date:   Sat Mar 8 06:45:06 2025 -0500

    Batch of TG PRs 3/5 (#4985)

    ## About The Pull Request
    Currently includes up to and including `1b404098fd0`
    Closes #4872
    ## Changelog
    AutoCL Included

commit d217cf32effb0162d151d7617b5556ba8aec796f
Author: Fluffles <[email protected]>
Date:   Thu Mar 6 15:57:55 2025 -0700

    Modular changes for batch

commit d1eb34094786cce4fbed6cfa35a2e8c2f4a80bd6
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 19:58:00 2025 +0000

    Automatic changelog compile [ci skip]

commit 2ae4c0410dbb750e7c91c563c8ec7c3cc5dc0ce4
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 17:53:10 2025 +0000

    Automatic changelog for PR #4986 [ci skip]

commit fff325650a8c5b12e4e4329a558db11979fa35f5
Author: thetaro <[email protected]>
Date:   Fri Mar 7 09:52:39 2025 -0800

    makes strongarm not restricted to medical (#4986)

    * does the thing

    * curse of hardcoding?? idk this doesnt work

    * Update modular_nova/master_files/code/modules/cargo/packs/medical.dm

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

    * it works im krilling someone

    ---------

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

commit 490c743ec019c26c969e0acc3521e61c7128498b
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Fri Mar 7 10:33:34 2025 -0500

    Bump robinraju/release-downloader from 1.11 to 1.12 (#4987)

    Bumps [robinraju/release-downloader](https://github.com/robinraju/release-downloader) from 1.11 to 1.12.
    - [Release notes](https://github.com/robinraju/release-downloader/releases)
    - [Commits](https://github.com/robinraju/release-downloader/compare/v1.11...v1.12)

    ---
    updated-dependencies:
    - dependency-name: robinraju/release-downloader
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...

    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

commit 26e4ddc0ff272bcfe326fe5b1d37ac765e2911a1
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 14:55:07 2025 +0000

    Automatic changelog for PR #4967 [ci skip]

commit 7f761262c0149012a62c9aeefff3ee475de5b1be
Author: thetaro <[email protected]>
Date:   Fri Mar 7 06:54:40 2025 -0800

    changes the miecz firing sound to something more fitting (#4967)

    * gunsounds

    i did it

    * oops fixd lanca

    * rename and unused files removed

    * i forgot to save this before pushing woops

    * i think this works

    * new sound and attributions

    * Update attributions.txt

    ---------

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

commit a68ccdf50d1a261f5738ba5e423a96d5db72f253
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 01:09:29 2025 +0000

    Automatic changelog compile [ci skip]

commit 1369d6b8e0dac6740e70fa74fff3af226a71540f
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 01:00:52 2025 +0000

    Automatic changelog for PR #4976 [ci skip]

commit e2030154b6ed56915e1a46c7f4b25b432d5770ab
Author: Yobrocharlie <[email protected]>
Date:   Thu Mar 6 15:00:29 2025 -1000

    Opens up the gateways (#4976)

    weh

    enables gateways

commit 5ec757b2f12b6939dfeaf06ee6e7396c833b8c61
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 00:49:55 2025 +0000

    Automatic changelog compile [ci skip]

commit 605a2df763c0c8ce1841dcc325f49a6f7f803364
Author: MrMelbert <[email protected]>
Date:   Wed Mar 5 22:46:46 2025 -0600

    Fix some new sound runtimes (#89822)

    ## About The Pull Request

    - This sound was lower than the min

    ![image](https://github.com/user-attachments/assets/4447ac03-33ea-41f9-9ea6-99e3e0c9725d)

    - Mechanical surgery seemed to cause a `null` preop sound runtime. This
    fix might be silencing a runtime, I'll have to look closer.

    - And `rustle_sound` could be `null`. I think this is actually a
    mistake, and the correct way to mute rustling is `do_rustle = FALSE`,
    but I feel like we could just delete that var and let people dictate it
    by setting it to `null` or not? For a follow up PR nevertheless

    ## Changelog

    :cl: Melbert
    fix: You can hear looping computer sounds again
    /:cl:

commit 9e8a46be5b27badcf97946b4f5d073fc0131505d
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 04:47:06 2025 +0000

    Automatic changelog for PR #89822 [ci skip]

commit 0d61c3d28136119021999cc8e7e6531272f195fa
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 04:22:51 2025 +0000

    Automatic changelog for PR #89855 [ci skip]

commit 45221a0a6e7f060b047cf68c08ca1d1aa3b77015
Author: The Sharkening <[email protected]>
Date:   Wed Mar 5 23:17:46 2025 -0500

    Fixes research hanging the MC (#89855)

    ## About The Pull Request

    So design disks and the techweb have this neat little thing called
    ```copy_research_to``` which chains three **highly expensive** procs
    together which only sleep during CHECK_TICK. So it piles all the bodies
    up in the corner and the Master Controller explodes trying to process a
    fuck load of procs and the speed of my autoclicker

    The entire research chain probally needs to be refactored to be less
    expensive, but for now a 5 second cooldown will hopefully give it plenty
    of time. You only need to click these buttons once. So the cooldown can
    easily be increased without much gameplay effect.

    ![image](https://github.com/user-attachments/assets/5e0c2b5a-0fe5-4afc-b0bd-afa19e528ce6)

    I didn't lag out on my local server using the debug disk so I think this
    is a fix.

    fixes: #89827
    ## Why It's Good For The Game

    I'm sorry mr admin i crashed the server

    ## 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: Design disks now have a cooldown when uploading to no longer crash
    the server.
    /:cl:

    ---------

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

commit 3edbca2a7b3937d65b073a249f055cea261b35f4
Author: itsmeow <[email protected]>
Date:   Wed Mar 5 19:59:55 2025 -0600

    Bumps rust-g to `3.7.0` (#89830)

    ## About The Pull Request

    Fixes for the not-yet-implemented GAGS and better 64bit detection

    Also I moved the SQL methods because they're in the wrong spot when you
    copy from the dmsrc output

    https://github.com/tgstation/rust-g/releases/tag/3.7.0

    ## Why It's Good For The Game

    Routine update

commit 9dc927fc49dae533947e1cf2d481a3fee561a4b6
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 01:25:27 2025 +0000

    Automatic changelog for PR #89620 [ci skip]

commit 77b284c26cc066c8c672d73f1f248152b14f8ea6
Author: necromanceranne <[email protected]>
Date:   Thu Mar 6 12:25:06 2025 +1100

    Last Resort is no longer innate power for changelings (#89620)

    ## About The Pull Request

    https://github.com/tgstation/tgstation/pull/86605 included a change to
    make last resort an innate ability for all lings. This PR reverts that
    specific change.

    ## Why It's Good For The Game

    In what is unfortunately the
    ![image](https://github.com/user-attachments/assets/9e29deea-b42b-4813-9335-b86345472b23)
    of ling changes, this change in particular is fine on the surface until
    you consider that lings actually have a very, very particular
    interaction with one another.

    Killing and absorbing one another in order to improve their own power.

    If every single ling, upon death, can just explode immediately, there is
    no possible way for a ling to be absorbed by another ling under most any
    circumstance that isn't highly specific and that the majority of lings
    are not reliable affected by. Sleepy chems and stuff don't really stick
    to lings. Lings have the few remaining adrenals left in the game. And
    killing whatsoever and trying to absorb them will just result in you
    getting blown up.

    So, this interaction may as well be near impossible, and was already
    VERY difficult. This being as hard as it is means that lings kind of
    lose their antagonistic nature towards their own kind. The only good
    that can come from killing another ling is the removal of a ling from
    the round and to no benefit to you. That ling also cannot reasonably do
    the same to you, as you will also just explode and leave them with
    nothing for their efforts. This means that there is a much greater
    encouragement towards these lings working together instead.

    The game is more interesting if there is the potential for betrayal. So
    removing that aspect really cheapens the potential outcomes of
    inter-antagonist conflict.

    ## Changelog
    :cl:
    balance: Last resort is no longer an innate changeling ability.
    Changeling on changeling violence is back on the menu. (literally)
    /:cl:

commit 3c18f9b8a59b5fbbcb4d3dfd71bcddcd06d4a4ac
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 22:17:13 2025 +0000

    Automatic changelog for PR #89811 [ci skip]

commit 820de1a2a2438a7677dd364b9845a49e6c863892
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 22:17:09 2025 +0000

    Automatic changelog for PR #89777 [ci skip]

commit 4cf94e1d1b4ac47ab1960aa2a3374fa25f2fe730
Author: Kashargul <[email protected]>
Date:   Wed Mar 5 23:14:23 2025 +0100

    tg chat settings export and import (#89811)

    In rare cases, we could lose the telemetry or ready message. We'll now
    have a check to re-request once if we did not receive any telemetry.

    Also the chat was able to init before the setting were loaded, even
    though a rare condition, this could lead to the setting wiped.

    Recommending to TM, as our chat differs heavily from the original and I
    only gave it a short test.

    ## About The Pull Request
    ## Why It's Good For The Game
    ## Changelog
    :cl:
    fix: TG chat can no longer initialize before the settings loading was
    called
    qol: chat settings can be exported and imported
    /:cl:

commit db4c4a9ed199499e052ecc4cc86b57432de10228
Author: harry <[email protected]>
Date:   Wed Mar 5 22:13:54 2025 +0000

    fixes the chat audio player, typescripts it (#89777)

    ## About The Pull Request

    516 broke the funny way we were playing audio before which was built for
    ie8 compatibility. this version works for both ie11 and wv2

    ## Why It's Good For The Game

    for some reason we decided admins playing music was a good idea

    ## Changelog

    :cl:
    fix: the admin music player works again on 516
    /:cl:

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

    from (https://github.com/cmss13-devs/cmss13/pull/8606, but i know the
    guy so it's fine)

    ---------

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

commit 27b659252103e4249849aa2ff7e2c79e56957f7e
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 13:25:51 2025 +0000

    Automatic changelog for PR #89685 [ci skip]

commit c7e78d69797faf3b52f916886de9f070f808cbc1
Author: Ghom <[email protected]>
Date:   Wed Mar 5 14:25:33 2025 +0100

    Follower hoodies can now be crafted (#89685)

    ## About The Pull Request
    Little band-aid atomized from my WIP refactor. As you can see from the
    code comments, it's not a definitive solution, but I can't handle it
    properly right now because I have so muh beef on the plate.

    ## Why It's Good For The Game
    Fixing stuff that no one cares about, yay...

    ## Changelog

    :cl:
    fix: Follower hoodies can now be crafted.
    /:cl:

commit 2028ec27a2af2de911374bfde6c2b03dfb2c2566
Author: Ghom <[email protected]>
Date:   Wed Mar 5 14:25:08 2025 +0100

    Makes atmo pipes crafting recipes less copypasta-y (#89684)

    ## About The Pull Request
    It's both surprising and slightly infuriating that no one thought of
    this before.

    ## Why It's Good For The Game
    Code improvement. Atomized from my refactor.

    ## Changelog
    N/A

commit b671e1e67c20e7ad3202b3edb82b734f4e0194a7
Author: Ghom <[email protected]>
Date:   Wed Mar 5 14:24:35 2025 +0100

    unblacklists botany fruits and vegetables from unit tests. (#89683)

    subtypes of `/obj/item/food/grown` have no reason to not be spawned by
    the `create_and_destroy` unit test, which prevents us from knowing if a
    type fruit or veggie doesn't have a set seed in the tests. The only path
    that needs to be blacklisted is the common `/obj/item/food/grown` path
    itself, since its seed variable needs to remain null so that we can be
    warned about any subtype that hasn't overriden that value.
    This PR also removes the `/obj/item/food/grown/shell` path which serves
    no purpose anymore.

    Backend improvements. Atomizing changes from my refactor.

    N/A

commit 78a447280f2d119a198e2ed882a9101a0dd57157
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 13:04:09 2025 +0000

    Automatic changelog for PR #89812 [ci skip]

commit 22433e878c02ea17ea33b76fde57a010e6562113
Author: Singul0 <[email protected]>
Date:   Wed Mar 5 20:03:49 2025 +0700

    Buffs Borg Factory Spawned Cyborg Cells (#89812)

    ## About The Pull Request
    Atomization of #89810 incase it doesn't go through/while I work on
    rebalancing it.
    Buffs the cells cyborgs spawns with to T2 cells (the same level as
    rounstart cyborgs) instead of their potato battery they currently have
    ## Why It's Good For The Game
    Hopefully this makes the very cool borg factory module be more used, It
    used to be that this endgame module was onpar with doomsday, but people
    just stopped using it I guess. my wish is that, by increasing the cell
    charge the borgs spawns with it would incentivize AIs to actually do
    something else than just doomsdaying for once
    ## Changelog
    :cl:
    balance: Buffs the energy cells borg factory-spawned cyborgs spawn with
    (They are now T2 cells)
    /:cl:

commit f1b91094f36f98e7e25d6d14e00ef3615de26154
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 01:51:37 2025 +0000

    Automatic changelog for PR #89418 [ci skip]

commit 6b77b31542c2b51900334247627bbabde1aad2f5
Author: LemonInTheDark <[email protected]>
Date:   Tue Mar 4 17:51:14 2025 -0800

    Relative Config $imports (#89418)

    <!-- 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

    When you import a config file inside a subdirectory, the config loader
    will now look IN that subdirectory, instead of exiting out to the parent
    folder.

    As a consequence, adds support for ".." to our deduplication system to
    avoid infinite loops due to headmin brain.

    ## Why It's Good For The Game

    jannies are on some shit wanna make their lives a bit nicer

    Note: I am testing on windows and also have only a loose grasp of how
    linux works, might fuck up in that environment idk

    ## 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:
    config: the config loader now supports relatively pathed imports
    (importing a file inside a subfolder now acts as if you were IN that
    subfolder)
    /: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. -->

commit 498d5d1b0b15383977d46eacefb801544306e4ee
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 01:23:45 2025 +0000

    Automatic changelog for PR #89786 [ci skip]

commit ec646130c55ac0339831804469de67a37e792df4
Author: TheRyeGuyWhoWillNowDie <[email protected]>
Date:   Tue Mar 4 17:23:24 2025 -0800

    fixes chameleon IDs not actually making you untrackable by the AI (#89786)

    ## About The Pull Request

    No idea how long this has been broken for.

    ## Why It's Good For The Game

    its supposed to do this and it doesnt which is called a bug

    ## Changelog
    :cl:
    fix: chameleon IDs actually prevent AI tracking now
    /:cl:

    ---------

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

commit 69f9d8a7d4c450635a70b16f083f1a087a68d7ea
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 01:16:07 2025 +0000

    Automatic changelog for PR #89794 [ci skip]

commit a474a0f60adab523e67fcf4580352bbf12608f62
Author: MrMelbert <[email protected]>
Date:   Tue Mar 4 19:15:46 2025 -0600

    Fix Agender Random Names (#89794)

    ## About The Pull Request

    Fixes #89789

    Any non-male genders got random'd.

    ## Changelog

    :cl: Melbert
    fix: Fixed random names always giving male names
    /:cl:

commit 0c24bfb5e33c66d3d70c9c873cc9279538994008
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 00:27:25 2025 +0000

    Automatic changelog for PR #89678 [ci skip]

commit 59f139d9b0c268673bd37edabc70488696779241
Author: Lucy <[email protected]>
Date:   Wed Mar 5 00:27:06 2025 +0000

    Various telepathic/remote messages are now labeled as "radio" chat messages (#89678)

    ## About The Pull Request

    This explicitly specifies `type = MESSAGE_TYPE_RADIO` in `to_chat` for
    various methods of communication (blood cult communion, abductor
    telepathy, xeno hivemind, golem resonator, blob telepathy, changeling
    hivemind, and binary chat), so that they will always be considered under
    the "Radio" category by tgchat.

    Also added `avoid_highlighting` to some, so they won't highlight your
    own messages.

    ## Why It's Good For The Game

    Makes going thru older messages find things that I accidentally missed
    much easier.

    ## Changelog
    :cl:
    qol: Messages from blood cult communion, abductor telepathy, xeno
    hivemind, golem resonator, blob telepathy, changeling hivemind, and
    binary chat are now considered "radio" messages by the chat, so they can
    properly be sorted via chat tabs.
    qol: Your own messages in blood cult communion,
    abductor/xenomorph/changeling hivemind, or golem telepathy will no
    longer be highlighted in chat (to prevent highlight spam whenever you
    talk if you highlight your own name, mainly)
    /:cl:

commit cb4f171847072dfece5aee2db4c6b4ac17f85fc1
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 06:55:48 2025 +0000

    Automatic changelog for PR #89715 [ci skip]

commit fc42f9f7138e69b0f1db88d2e12a0596223d31c1
Author: Jacquerel <[email protected]>
Date:   Tue Mar 4 06:55:26 2025 +0000

    Adds missing apple interactions with jobs (#89715)

    ## About The Pull Request

    If you throw an apple at a doctor they will take 2 damage, successfully
    repelling them for another day.
    If you throw an apple at a scientist and hit them in the head, there is
    a small chance that they will suddenly have an impressive scientific
    insight. This chance is significantly higher if it falls on them from a
    higher z level, because that's going to happen in about 3 rounds ever.

    ## Why It's Good For The Game

    It's how apples work in real life and thus adds to our deep and complex
    simulation.

    ## Changelog

    :cl:
    add: Apples now react appropriately if they impact doctors or scientists
    under the expected circumstances.
    /:cl:

commit 76da98cf274a37f52481070a1fb64258c46c7071
Author: Kashargul <[email protected]>
Date:   Tue Mar 4 07:53:22 2025 +0100

    Fix config FPS/ Ticklag auto handling (#89792)

    FPS / Ticklag should be independent configs, but due to the use of
    `trim()` at
    https://github.com/tgstation/tgstation/blob/49f8d1e81dacfc75c635b13bf182edf1ce59df79/code/controllers/configuration/config_entry.dm#L116
    the number we hand over will simply be turned into an empty string...

    https://github.com/tgstation/tgstation/blob/49f8d1e81dacfc75c635b13bf182edf1ce59df79/code/controllers/configuration/entries/general.dm#L223

    https://github.com/tgstation/tgstation/blob/49f8d1e81dacfc75c635b13bf182edf1ce59df79/code/controllers/configuration/entries/general.dm#L241

    No player facing changes
    ## About The Pull Request
    ## Why It's Good For The Game
    Timers can get fucked up when someone only sets one or the other
    currently...
    ## Changelog

commit 55c10d5d9eea06432feeac1fb53f7866c0eba30d
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 01:52:16 2025 +0000

    Automatic changelog for PR #89791 [ci skip]

commit 0092d3b77b6b3b7b58b575581061888f14f15d97
Author: The Sharkening <[email protected]>
Date:   Mon Mar 3 17:51:49 2025 -0800

    [No GBP] Fixes the battle of the titans (megafauna attacking eachother) (#89791)

    ## About The Pull Request

    Fixes megafauna attacking eachother
    fixes: #89788

    ## Why It's Good For The Game

    haha funny logic fuck up

    ## Changelog

    :cl:
    fix: Megafauna should no longer attack eachother.
    /:cl:

commit 37fa2bdc0587a68a2e5e8d3c002fadac4eed8709
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 00:36:36 2025 +0000

    Automatic changelog for PR #89793 [ci skip]

commit f23c4a2835bc5bfe8a163bf2292a841a539def04
Author: TJatPBnJ <[email protected]>
Date:   Mon Mar 3 18:36:09 2025 -0600

    buffs floor fries (#89793)

    ## About The Pull Request
    Fries dont rot on the floor
    ## Why It's Good For The Game
    cover the floor in french fries
    ## Changelog
    :cl:
    balance: French fries are now immune to the effects of the floor. I miss
    floor fries
    /:cl:

commit 46127a5a9bbb6bb31492cbfc053059661486f7c5
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 00:10:57 2025 +0000

    Automatic changelog for PR #89692 [ci skip]

commit 69bd94a0f97540197e128d31634f1c08d506eab3
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 19:10:37 2025 -0500

    `/datum/ai_behavior/execute_clean/finish_action` will no longer return early if the emagged phrases list is empty (#89692)

    ## About The Pull Request
    For some reason, `/datum/ai_behavior/execute_clean/finish_action` was
    coded such that it returns early if the list of cleanbot emagged phrases
    was empty (or null).

    This shouldn't be a problem with regular cleanbots - they come with
    emagged phrases already set. However, it makes this ai behavior
    unsuitable for use with non-cleanbot controllers (such as Monkestation's
    cleaner slimes - cute little slimes that will dissolve trash and
    blood!), as the statement to clear the `target_key` blackboard value was
    after this.

    This PR handles this by changing around the `if` statements - where we
    previously ended early if the emagged phrase list was empty, we now only
    perform an emagged phrase if the list has any length. (and if you're
    wondering - `length(null) == 0`)

    ## Why It's Good For The Game
    Avoids potentially buggy behavior on admin-made mobs (or those made by
    downstreams).

    Also has the benefit of makes the code shorter and easier to understand!

    ## Changelog
    :cl:MichiRecRoom
    fix: The cleaning AI behavior (generally used by cleanbots) will no
    longer return early if the list of emagged phrases is empty.
    /:cl:

commit e7afb979cf18c202a008dfb28e51802c7493376a
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 00:09:55 2025 +0000

    Automatic changelog for PR #89785 [ci skip]

commit 89f810639fbe5a2a4ff927b851ab87bfeb1a3f50
Author: Rhials <[email protected]>
Date:   Mon Mar 3 16:09:36 2025 -0800

    Fixes 2 Small Typos in Autosurgeon Messages (#89785)

    ## About The Pull Request

    The first typo I saw in-game, the second one while I was fixing the
    first one. Bonus! :)
    ## Why It's Good For The Game

    Speaks words more good.
    ## Changelog
    :cl: Rhials
    spellcheck: Fixes grammar in autosurgeon use message.
    /:cl:

commit 51cfd5dbce142935589ce0adbb3d801871595ce9
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 21:51:34 2025 +0000

    Automatic changelog for PR #89723 [ci skip]

commit 246642c1b51e733f59e454efbfa03931540a7555
Author: Lucy <[email protected]>
Date:   Mon Mar 3 21:47:25 2025 +0000

    Allow more complex regex for chat highlights (#89723)

    ## About The Pull Request

    So, turns out, you couldn't actually do more complex regex in chat
    highlights, specifically because highlights got filtered by this regex:

    ```js
    const allowedRegex = /^[a-zа-яё0-9_\-$/^[\s\]\\]+$/gi;
    ```

    I discovered this while trying to use negative lookaheads in regex (to
    avoid matching different last names, as an example), and that regex
    filtered it out due to the use of parentheses.

    I made it so the `allowedRegex.test(str)` isn't needed if the line is a
    regex (starts and ends with a `/`)

    ## Comparison

    **Regex**:
    ```
    /Shio(?=n)/
    ```

    **Before fix**:
    ![2025-02-26 (1740632218) ~
    dreamseeker](https://github.com/user-attachments/assets/517f1503-2f04-4290-946e-52ce1d26986c)

    **After fix**:

    ![image](https://github.com/user-attachments/assets/199b8fee-c3bc-4204-bfa7-ab8b0c32e964)

    ## Why It's Good For The Game

    i am a masochist who writes complex regex and want to use that in spess

    ## Changelog
    :cl:
    fix: Fixed more advanced regex-based chat highlights not working.
    /:cl:

commit 0d479df2c14721a9264a9ccfcdf0fb60628e948f
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:03:46 2025 +0000

    Automatic changelog for PR #89730 [ci skip]

commit c6e5407b07220f3ba52ffa6a5580e7179e4245ea
Author: Holoo <[email protected]>
Date:   Mon Mar 3 17:03:25 2025 +0200

    Adjusts default spell position for cult (#89730)

    ## About The Pull Request
    Cult spells don't overlap with second row of inventory
    Before:

    ![image](https://github.com/user-attachments/assets/8f21633b-b533-4153-923a-ff238cddd71f)

    After:

    ![image](https://github.com/user-attachments/assets/55026b02-6d57-49a0-9f6f-346ac02300cd)
    ## Why It's Good For The Game
    Better ui
    ## Changelog
    :cl:
    qol: cult spells no longer overlap with second row of inventory
    /:cl:

commit 4f3f9589af37a28cc0a5c56c647169f060c976a1
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:03:07 2025 +0000

    Automatic changelog for PR #89734 [ci skip]

commit ff85aa9259b498e7d0571946b896e5c04d62d63e
Author: Tim <[email protected]>
Date:   Mon Mar 3 09:02:48 2025 -0600

    Fix hauntinum reagent to work when exposed to item objects (#89734)

    ## About The Pull Request
    Hauntium would cause a bunch of runtimes if it was exposed to objects on
    a tile that weren't items. (structures, machinery, etc.) This was due to
    the element rejecting non-item objects and forcing a crash message.

    It also had used the wrong reagent volume settings to determine when it
    should remove the effect. This caused it to instantly remove the haunted
    effect as soon as it was applied.

    Although I would have loved to adjust the length of time per reagent to
    not be stupidly OP (20 secs per 1u) I feel like that's touching balance.

    ## Why It's Good For The Game
    Code that breaks is bad.

    ## Changelog
    :cl:
    fix: Fix hauntinum reagent to work when it is exposed to item objects.
    /:cl:

commit c63b0dc5af8786290cf023073ed64a2cbec54db1
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:02:25 2025 +0000

    Automatic changelog for PR #89704 [ci skip]

commit 99ef833407a5e4ff2b18e8eaac3cc3fa649dd7da
Author: jimmyl <[email protected]>
Date:   Mon Mar 3 16:02:03 2025 +0100

    some fixes for the heretic eldritch id (#89704)

    ## About The Pull Request

    first and primarily the ritual preserves the ID card used
    the id itself may not consume (and cant use in the ritual) non-advanced
    (advanced IDs are mainly the crew and whoever IDs) IDs because it wasnt
    intentional and it kinda breaks a few things and its such a super edge
    case to find a not advanced id and use it with the id
    closes  #89697

    ## Why It's Good For The Game

    makes the ritual not screw people over

    ## Changelog
    :cl:
    fix: the eldritch id (Lock path) now preserves the ID used.
    /:cl:

commit f75c91fb7f804f657ab004a1eda538d952b4deb3
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:01:09 2025 +0000

    Automatic changelog for PR #89711 [ci skip]

commit 3d5369b1ede1cad12982578df898e66be955763b
Author: jimmyl <[email protected]>
Date:   Mon Mar 3 16:00:43 2025 +0100

    prevents stripping in caretakers last refuge (#89711)

    ## About The Pull Request

    prevents stripping in caretakers last refuge

    ## Why It's Good For The Game

    fixes #89710

    ## Changelog
    :cl:
    fix: prevents stripping in caretakers last refuge
    /:cl:

commit adedad5450739913d968a87f089b12c75fcb1776
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 14:57:22 2025 +0000

    Automatic changelog for PR #89752 [ci skip]

commit 42bd391ae9d2ae41513b8a015aa70468c896f398
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 09:57:01 2025 -0500

    Nukes now delete themselves, rather than having SSticker do it through a callback (#89752)

    ## About The Pull Request
    The title pretty much says it all. I'm told that this was done because,
    previously, the station would be exploded by the nuclear device - but
    when that was removed, all that remained was `qdel(bomb)`.

    That said, there's some bizarre stuff behind what pushed me to make this
    PR. See below if you want to know.

    <details><summary>Bizarre stuff</summary>

    For some reason, while trying to port
    <https://github.com/tgstation/tgstation/pull/77868> over to
    Monkestation, I started getting hard-deletes for the nuclear bomb used
    in the `nuke_cinematic` unit test.

    ```
      ## REF SEARCH Beginning search for references to a /obj/machinery/nuclearbomb/syndicate.
      ## REF SEARCH Refcount for /obj/machinery/nuclearbomb/syndicate: 7
      ## REF SEARCH Finished searching globals
      ## REF SEARCH Finished searching native globals
      ## REF SEARCH Finished searching atoms
      ## REF SEARCH Found /obj/machinery/nuclearbomb/syndicate [0x201f850] in list Datums -> /datum/controller/subsystem/garbage [0x2100001c] -> queues (list) -> /list (list) -> /list (list).
      ## REF SEARCH Found /obj/machinery/nuclearbomb/syndicate [0x201f850] in list Datums -> /datum/callback [0x21057da8] (obj: Ticker proc: station_explosion_detonation args: ["the nuclear fission explosive"] user: null) -> arguments (list).
      ## REF SEARCH Finished searching datums
      ## REF SEARCH Finished searching clients
      ## REF SEARCH Completed search for references to a /obj/machinery/nuclearbomb/syndicate.
      ## TESTING: GC: -- [0x201f850] | /obj/machinery/nuclearbomb/syndicate was unable to be GC'd -- (ref count of 3)
      Error: /obj/machinery/nuclearbomb/syndicate hard deleted 1 times out of a total del count of 3
      	FAILURE #1: /obj/machinery/nuclearbomb/syndicate hard deleted 1 times out of a total del count of 3 at code/modules/unit_tests/create_and_destroy.dm:99
    Error: FAIL /datum/unit_test/create_and_destroy 308.1s
    ```

    This hard-del would happen on every integration test, no matter the map
    and no matter the byond version. I was even able to have it happen
    locally.

    Thing is, Monkestation only seems to have two differences in our code
    for actually exploding a nuke:
    1. We mark some z-levels as safe from the nuclear bomb (so you can go to
    the lowest reaches of icebox and be safe from the bomb). This only
    modifies the list of z-levels to call the "gib everyone on z" code for.
    2. We don't have tgstation/tgstation#75967 ported over - but making a
    new branch and cherry-picking both 77868 and 75967 didn't seem to fix
    the issue either.

    So something with how the callback is handled by the `play_cutscene`
    global proc is preventing this from being qdel'd properly - resulting in
    a hard-delete over five minutes after the nuke cinematic plays.

    I tried several things to understand why the callback was causing a
    hard-del, but only one gave me any tangible info - changing the
    reference to the bomb, into a weakref reference, which stopped the
    hard-del.

    However, I eventually realized the callback was entirely pointless -
    right now, all it does is qdel the bomb. So I just moved it from a
    callback to part of the `really_actually_explode()` proc.
    </details>

    ## Why It's Good For The Game
    I'd say it fixes a hard-delete, but that hard-delete was only happening
    on Monkestation.

    So I guess it removes a bit of unnecessary indirection?

    ## Changelog

    :cl:MichiRecRoom
    fix: Nukes will now always be deleted upon exploding, no matter if they
    have a valid cutscene to play.
    /:cl:

commit 33fdcdb30d1e6b11032b5b6a7fc48e522c61f683
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 14:15:27 2025 +0000

    Automatic changelog for PR #89766 [ci skip]

commit 0a8a6b7de9f9d4db66eada1818ea7949d98b5e3d
Author: Kashargul <[email protected]>
Date:   Mon Mar 3 15:15:07 2025 +0100

    some more 516 compat fixes (#89766)

    Ports the helpers from
    https://github.com/BeeStation/BeeStation-Hornet/pull/12240

    This should fix some more of the 516 issues that I've seen while giving
    a quick check through the code

    The remaining browse should work now.

    Also fixing another sass warning while being on it.

    ## About The Pull Request
    ## Why It's Good For The Game
    ## Changelog
    :cl:
    fix: tgui say 516 will no longer change channels when the button is used
    to drag it
    fix: tgui say 516 will no longer leak radio messages into the wrong
    channel
    fix: runechat flickering when faded up messages fade out
    /:cl:

commit 6a1c9a3e448d3734f858752564c47a9df9728021
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 14:00:59 2025 +0000

    Automatic changelog for PR #89763 [ci skip]

commit 7867404954c45a8f9a0182cac11beed2ce438a0f
Author: SmArtKar <[email protected]>
Date:   Mon Mar 3 15:00:36 2025 +0100

    [NO GBP] Fixes external organs not being colored by colorful reagent (#89763)

    ## About The Pull Request
    Closes #89209
    Also fixed clothing being colored on ingestion, and removed a
    nonfunctional check which I didn't notice because, well, it was
    nonfunctional (otherwise only splashing would color you, which isn't
    what I was aiming with the original PR)

    ## Changelog
    :cl:
    fix: Fixed external organs not being colored by colorful reagent
    /:cl:

commit a1c575f7286286dc1f8e9cda59e1b46f38766a87
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 13:58:49 2025 +0000

    Automatic changelog for PR #89478 [ci skip]

commit e33fc5945d3536ee6f2b8b22fe4fd663d13353e0
Author: itsmeow <[email protected]>
Date:   Mon Mar 3 07:58:27 2025 -0600

    IconForge: rust-g Spritesheet Generation (#89478)

    Replaces the asset subsystem's spritesheet generator with a rust-based
    implementation (https://github.com/tgstation/rust-g/pull/160).

    This is a rough port of
    https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it
    includes fixes for some cases I didn't catch that apply on TG.

    (FWIW we've been using this system on prod for over a year and
    encountered no major issues.)

    ![image](https://github.com/user-attachments/assets/53bd2b44-9bb5-42d2-b33f-093651edebc0)

    `/datum/asset/spritesheet_batched`: A version of the spritesheet system
    that collects a list of `/datum/universal_icon`s and sends them off to
    rustg asynchronously, and the generation also runs on another thread, so
    the game doesn't block during realize_spritesheet. The rust generation
    is about 10x faster when it comes to actual icon generation, but the
    biggest perk of the batched spritesheets is the caching system.

    This PR notably does not convert a few things to the new spritesheet
    generator.

    - Species and antagonist icons in the preferences view because they use
    getFlatIcon ~~which can't be converted to universal icons~~.
    - Yes, this is still a *massive* cost to init, unfortunately. On Bee, I
    actually enabled the 'legacy' cache on prod and development, which you
    can see in my PR. That's why I added the 'clear cache' verb and the
    `unregister()` procs, because it can force a regeneration at runtime. I
    decided not to port this, since I think it would be detrimental to the
    large amount of contributors here.
    - It is *technically* possible to port parts of this to the uni_icon
    system by making a uni_icon version of getFlatIcon. However, some
    overlays use runtime-generated icons which are ~~completely unparseable
    to IconForge, since they're stored in the RSC and don't exist as files
    anywhere~~. This is most noticeable with things like hair (which blend
    additively with the hair mask on the server, thus making them invisible
    to `get_flat_uni_icon`). It also doesn't help that species and antag
    icons will still need to generate a bunch of dummies and delete them to
    even verify cache validity.
    - It is actually possible to write the RSC icons to the filesystem
    (using fcopy) and reference them in IconForge. However, I'm going to
    wait on doing this until I port my GAGS implementation because it
    requires GAGS to exist on the filesystem as well.

    IconForge generates a cache based on the set of icons used, all
    transform operations applied, and the source DMIs of each icon used
    within the spritesheet. It can compare the hashes and invalidate the
    cache automatically if any of these change. This means we can enable
    caching on development, and have absolutely no downsides, because if
    anything changes, the cache invalidates itself.

    The caching has a mean cost of ~5ms and saves a lot of time compared to
    generating the spritesheet, even with rust's faster generation. The main
    downside is that the cache still requires building the list of icons and
    their transforms, then json encoding it to send to rustg.

    Here's an abbreviated example of a cache JSON. All of these need to
    match for the cache to be valid. `input_hash` contains the transform
    definitions for all the sprites in the spritesheet, so if the input to
    iconforge changes, that hash catches it. The `sizes` and `sprites` are
    loaded into DM.

    ```json
    {
    	"input_hash": "99f1bc67d590e000",
    	"dmi_hashes": {
    		"icons/ui/achievements/achievements.dmi": "771200c75da11c62"
    	},
    	"sizes": [
    		"76x76"
    	],
    	"sprites": {
    		"achievement-rustascend": {
    			"size_id": "76x76",
    			"position": 1
    		}
    	},
    	"rustg_version": "3.6.0",
    	"dm_version": 1
    }
    ```

    Universal icons are just a collection of DMI, Icon State, and any icon
    transformation procs you apply (blends, crops, scales). They can be
    convered to DM icons via `to_icon()`. I've included an implementation of
    GAGS that produces universal icons, allowing GAGS items to be converted
    into them. IconForge can read universal icons and add them to
    spritesheets. It's basically just a wrapper that reimplements BYOND icon
    procs.

    Converts some uses of md5asfile within legacy spritesheets to use
    rustg_hash_file instead, improving the performance of their generation.

    Fixes lizard body markings not showing in previews, and re-adds eyes to
    the ethereal color preview. This is a side effect of IconForge having
    *much* better error handling than DM icon procs. Invalid stuff that gets
    passed around will error instead of silently doing nothing.

    Changes the CSS used in legacy spritesheet generation to split
    `background: url(...) no-repeat` into separate props. This is necessary
    for WebView2, as IE treats these properties differently - adding
    `background-color` to an icon object (as seen in the R&D console) won't
    work if you don't split these out.

    Deletes unused spritesheets and their associated icons (condiments
    spritesheet, old PDA spritesheet)

    If you press "Character Setup", the 10-13sec of lag is now approximately
    0.5-2 seconds.

    Tracy profile showing the time spent on get_asset_datum. I pressed the
    preferences button during init on both branches. Do note that this was
    ran with a smart cache HIT, so no generation occurred.

    ![image](https://github.com/user-attachments/assets/3efa71ab-972b-4f5a-acab-0892496ef999)

    Much lower worst-case for /datum/asset/New (which includes
    `create_spritesheets()` and `register()`)

    ![image](https://github.com/user-attachments/assets/9ad8ceee-7bd6-4c48-b5f3-006520f527ef)

    Here's a look at the internal costs from rustg - as you can see
    `generate_spritesheet()` is very fast:

    ![image](https://github.com/user-attachments/assets/e6892c28-8c31-4af5-96d4-501e966d0ce9)

    **Before**

    ![image](https://github.com/user-attachments/assets/cbd65787-42ba-4278-a45c-bd3d538da986)

    **After**

    ![image](https://github.com/user-attachments/assets/d750899a-bd07-4b57-80fb-420fcc0ae416)

    :cl:
    fix: Fixed lizard body markings and ethereal feature previews in the
    preference menu missing some overlays.
    refactor: Optimized spritesheet asset generation greatly using rustg
    IconForge, greatly reducing post-initialization lag as well as reducing
    init times and saving server computation.
    config: Added 'smart' asset caching, for batched rustg IconForge
    spritesheets. It is persistent and suitable for use on local, with
    automatic invalidation.
    add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for
    spritesheets.
    fix: Fixed R&D console icons breaking on WebView2/516
    /:cl:

commit f9059ed737f9ab53b8b650dc9d89ebbbbd865dad
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 11:24:57 2025 +0000

    Automatic changelog for PR #4958 [ci skip]

commit f1dcdcbc7995aed593aa561f943b0357052d18e6
Author: Winter Frost <[email protected]>
Date:   Thu Mar 6 03:24:31 2025 -0800

    Adds GAGs Support for Port Tarkon Uniform (#4958)

    * Turns tarkon uniforms to GAGS Support

    * General fixes for the uniform

    * Apply suggestions from code review

    Thank you vinyl!

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

    * Apply suggestions from code review

    ---------

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

commit 3609cfdf593e48fc090de486f52b103ee15a31d3
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 12:49:14 2025 +0000

    Automatic changelog for PR #89755 [ci skip]

commit 02e6b2d1fd1584c66432b40183dc78dbf8db924d
Author: _0Steven <[email protected]>
Date:   Mon Mar 3 13:48:46 2025 +0100

    Add screentips to big manipulators, move wire interactions to is_wire_tool(...) usage (#89755)

    ## About The Pull Request

    While working on another pr I noticed big manipulators didn't have
    screentips yet, so here we add those.
    In the process of doing _that_, I noticed we do some awkward usage of
    `wirecutter/multitool_act(...)` for interacting with wires, which
    doesn't actually cover the assembly use case of interacting with wires.
    So to solve this, we move it to checking for `is_wire_tool(...)` on
    `item_interaction(...)` instead, which actually runs for all of our
    wire-interacting items.
    ## Why It's Good For The Game

    screentips make everything less obtuse
    being able to actually open the menu with all the items we're supposed
    to be able to open the menu with is good, and the code is slightly less
    cluttered from having the wire tool logic in one spot than y'know
    several procs
    ## Changelog
    :cl:
    qol: Added screentips to the big manipulator.
    fix: You can actually open the big manipulator's wires UI while holding
    an assembly.
    /:cl:

commit d4d7646cb3f71dac60ab8c52796a282bbf33cc76
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 09:35:40 2025 +0000

    Automatic changelog for PR #89759 [ci skip]

commit 807130d5f107f922a1163c287fc194587de2194e
Author: SmArtKar <[email protected]>
Date:   Mon Mar 3 10:26:52 2025 +0100

    Fixes an old simplemob damage bug (#89759)

    ## About The Pull Request

    Literally every single bit of our code assumes that adjustXLoss returns
    the total health delta (old_damage - new_damage), so negative values
    when damage was taken and positive when it was healed, ***except***
    simplemobs had this inverted for (supposedly) two years. Yeah. This
    broke crushers, mending touch and slime feeding - not sure if anything
    else was screwed due to this.

    Closes #87550

    ## Why It's Good For The Game

    ![despair-suffer](https://github.com/user-attachments/assets/cc18bc20-2fd5-48fc-833e-046433185ec5)

    ## Changelog
    :cl:
    fix: Fixed inconsistent crusher trophy droprates
    /:cl:

commit 283658f42041525041d004ddc791c25f81ed95f7
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 05:04:43 2025 +0000

    Automatic changelog for PR #89762 [ci skip]

commit 63f39695170c087aa242edb9a7f08c48a74bf35a
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 00:04:23 2025 -0500

    Fix the component printer not showing item icons in its UI (#89762)

    ## About The Pull Request
    Whilst testing a PR for Monkestation, I found out the component printer
    wasn't showing icons for the items in its UI. This PR fixes that.

    In fairness, the icons don't really do much here - most of the component
    printer designs are the same icon (screenshot taken from monkestation):

    ![image](https://github.com/user-attachments/assets/af81ce46-4351-467b-bc72-3ec95cd60ca1)

    But they're already in the asset datum, and it makes this UI look a
    little nicer, so why not use them?

    ## Why It's Good For The Game
    Makes this UI more consistent with other UIs that look like it (i.e. the
    protolathe).

    ## Changelog

    :cl:MichiRecRoom
    fix: The component printer now shows icons for the items in its UI.
    /:cl:

commit 65b5bda77baec20beeebd77e4b28a9431c87eaa7
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 00:02:50 2025 -0500

    Fix chem smoke runtiming when it tries to cancel its spread (#89750)

    ## About The Pull Request
    Chem smoke asks the smoke subsystem to cancel its spread, if it's qdel'd
    or otherwise reaches the end of its lifetime before it finishes
    spreading.

    However, an error in how chem smoke was coded causes it to queue
    spreading with the *foam* subsystem, rather than the *smoke* subsystem.
    This causes a runtime in SSsmoke, as it attempts to index into the
    spread carousel at a bucket index that was returned from SSfoam.

    This runtime actually happens spuriously during CI over on Monkestation.
    However, I only started noticing it because it kept appearing in failed
    runs on my fork - where I have the "Rerun flaky tests" workflow
    disabled.

    I was able to replicate the runtime locally, whilst debugging it on the
    Monkestation fork:
    1. Tag any turf as the place to spawn the smoke at (I chose one right
    next to a door)
    2. Use Debug -> Advanced ProcCall to spawn in chem smoke with a high
    range (`/proc/do_chem_smoke`, `range` = 10, `location` = the tagged
    turf) (Technically speaking, the high range isn't needed, but it makes
    it easier to trigger the runtime.)
    3. Wait some time (I found that around 12 seconds worked on my machine,
    when using `range = 10`)
    4. Do something to make the chem smoke start spreading (opening a door
    works)
    5. Wait - if the chem smoke is still spreading when its lifetime is up,
    it will cancel its spread - and in turn, trigger the runtime.

    Following these same steps after the change in this PR seems to show
    that this fixes the runtime.

    ## Why It's Good For The Game
    Less runtimes = More gooder

    ## Changelog
    No player-facing changes.

commit 958bf44b9e60ec24c548e263455e7562df947045
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 04:58:41 2025 +0000

    Automatic changelog for PR #89749 [ci skip]

commit a415c8d9edb4d7c21d6643bcb0370279f28c289c
Author: Aylong <[email protected]>
Date:   Mon Mar 3 06:58:21 2025 +0200

    Fix random TGchat BSOD on 516 (#89749)

    ## About The Pull Request
    Fixing random chat BSOD on 516

    Proof of BSOD

    ![image](https://github.com/user-attachments/assets/e9fdcf45-637e-4adf-9dff-f49cd3a2483b)

    And also adds min image width, so icons will not make text "flexing"

    ## Why It's Good For The Game
    No BSOD on 516

    ## Changelog

    :cl:
    fix: Fixed random chat BSOD on Byond 516
    /:cl:

commit 3c9fdaf2246080f877a36989dcd00c1052ba5836
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 04:58:07 2025 +0000

    Automatic changelog for PR #89773 [ci skip]

commit 04ca4d0fb29a3c49c6625498657b7996221cf136
Author: adamsong <[email protected]>
Date:   Sun Mar 2 23:57:44 2025 -0500

    Fixes borgs not being able to navigate through access restricted doors (#89773)

    ## About The Pull Request
    Currently if a borg attempts to use nav to access a waypoint in a
    restricted area of the station (brig for example) it will fail with "no
    valid path with current access" because get_access on a borg return
    nothing because they don't have an ID. get_access for silicons will now
    return all station accesses.
    ## Why It's Good For The Game

    Borgs need to find things, and not being able to nav into any restricted
    areas is annoying.
    ## Changelog
    :cl:
    add: Added the ability for borgs to pathfind into and through restricted
    areas.
    /:cl:

commit 27a278a3bd0534a4c95d2dd75e752c098f1418ce
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 15:48:09 2025 +0000

    Automatic changelog for PR #89709 [ci skip]

commit a6fa723228c7b7b60c9dd2ac2e8f01c656e05ff1
Author: TheRyeGuyWhoWillNowDie <[email protected]>
Date:   Sun Mar 2 07:47:46 2025 -0800

    removes wildcard limit from agent IDs (#89709)

    ## About The Pull Request

    With the trim system added years ago, agent IDs have become essentially
    worthless. This is because they can only hold SIX COMMON ACCESSES, TWO
    COMMAND ACCESSES, AND ONE CAPTAIN LEVEL ACCESS. This leads to the
    current situation, where agent IDs are essentially legacy content
    included in certain bundles like Contractor, but ultimately go entirely
    unused, with players instead opting to simply steal ID cards off of
    people and juggle them around.

    This PR makes them act more like they used to, where scanning an ID with
    one will let you take all of the access codes on the ID card, and add
    them to your agent ID.

    ## Why It's Good For The Game

    Having your ID card stolen is extremely frustrating. It's also very
    frustrating for traitors to need to carry literally a box of stolen ID
    cards to have access to various parts of the station, and it also
    hinders stealthy gameplay, since the stealthy ID card doesn't actually
    hold access.

    ## Changelog
    :cl:
    balance: wildcard limits have been removed from Agent ID cards
    balance: the specops crate gets a variation of the agent ID card which
    can only hold limited access (same as it is now)
    /:cl:
    # Conflicts:
    #	code/game/objects/items/cards_ids.dm

commit 4391c8c1dba6fe0ee1476dde9fa6608b8881681e
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 14:17:25 2025 +0000

    Automatic changelog for PR #89757 [ci skip]

commit f853b706f5874c78861180cc07f029e6475c0e72
Author: subject217 <[email protected]>
Date:   Sun Mar 2 08:17:03 2025 -0600

    Contractor Kit out of lowpop  (#89757)

    ## About The Pull Request

    Contractor Kit is only available on a population greater than the config
    defined lowpop number.

    ## Why It's Good For The Game

    Antags on lowpop are impossible to balance, since there's usually few or
    no security or headstaff. Contractor Kit allows access to extremely
    strong tools that give a huge advantage in one-on-one combat, meaning
    that it's very easy and common for them to basically run unopposed in
    lowpop. This is happening more now, because of the removal of progtot
    has made the contractor kit a more popular option, being the remaining
    progression based choice for traitors.

    Lowpop murderboning is against the rules now on all servers, for good
    reason. And the reason why I think Contractor Kit doesn't belong on
    lowpop either is for very similar reasons. In higher pop where there is
    adequate security, it's good enough to have antags that create conflict
    and incentive to capture or kill them, and they don't really need to be
    creative about how they antag. In lowpop though, the lack of meaningful
    opponents for an antag makes it functionally an auto-win. The problem
    with Contractor Kit in particular, is that for everyone else on the
    station, it's a misery-generating machine. It makes Cargo impossible to
    play as you will constantly have 0 credits, and everyone on the station
    is regularly getting their 5 minute timeouts to the punishment zone.

    The fun of antags for the station as a whole is in the struggle for who
    will win, not an antag winning on minute 1 and subjecting everyone else
    to your shit until they call the shuttle. Even an antag who has won can
    theoretically be interesting with a gimmick, but much like how ProgTot
    incentivized traitors to play in a boring manner, Contractor Kit
    mechanically incentivizes people who take it into playing in a boring
    way. Some people think that the kit is too powerful, but I think a good
    start right now is simply to get it out of lowpop.

    ## Changelog

    :cl:
    balance: Contractor Kit is no longer available in lowpop.
    /:cl:

commit e6910c1b15971d4f658aef94f899dc6f9025f101
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 12:27:23 2025 +0000

    Automatic changelog for PR #89751 [ci skip]

commit e7dc83defd9c6d442ae9d4f3d3240e77b93ce4ee
Author: SmArtKar <[email protected]>
Date:   Sun Mar 2 13:26:47 2025 +0100

    Breaks up mining loot into multiple files, refactors the hierophant club (#89751)

    Splits up tendril_loot.dm and megafauna_loot.dm (both over a thousand
    lines long) into group/item specific files, and megafauna-specific files
    respectively. Also pulls a few loot items scattered around the codebase
    into those files as well.

    Additionally while doing so I've cleaned up the code for some of them,
    and rewrote the hierophant club's code because it was abominable and a
    potential source of harddels.

    Its absolutely unnavigateable.

    :cl:
    code: Split and cleaned up mining loot's code
    refactor: Refactored the hierophant club.
    fix: Hierophant club's beacon no longer can go missing (until you try
    using it)
    /:cl:

commit cd37c1cf81969172af6db0ccaedfc7dbdc666b9c
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 12:15:26 2025 +0000

    Automatic changelog for PR #89687 [ci skip]

commit 960d937fc25bbbfbe11815bce6ed8da24fe5c93f
Author: Ghom <[email protected]>
Date:   Sun Mar 2 13:15:08 2025 +0100

    The edible component now uses DUPE_SOURCE mode (#89687)

    ## About The Pull Request
    The edible component now uses DUPE_SOURCE mode, which is needed to avoid
    conflicts between sources. This includes some other tidbits from my
    refactor like renaming dcs/flags.dm to ds/declarations.dm (in virtue of
    the fact it doesn't only contain flags anymore even before this PR),
    meat materials giving protein and fat reagents to affected atoms instead
    of generic nutriment and oil, and the pizza material no longer
    containing meat, because margherita pizza, which the material is
    extracted from, doesn't contain meat either. The pepperonis were
    magically conjured space bs.

    ## Why It's Good For The Game
    There are multiple sources of the edible component and we don't want
    issues with that. Also atomizing stuff from my refactor.

    ## Changelog

    :cl:
    balance: objects made out of meat are no longer classified as gross food
    on top of being raw and meaty, and actually contain protein and fat
    instead of standard nutriment and oil.
    balance: the pizza material stacks, crafted with margherita pizza and
    rollig pin mind you, no longer magically contain pepperoni.
    /:cl:

commit 7d9adc9427c742aff7a5f68e74678da157c20797
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 11:42:10 2025 +0000

    Automatic changelog for PR #89746 [ci skip]

commit 4a3957e31ca7f5597b777ffba6a67f458ba02351
Author: TiviPlus <[email protected]>
Date:   Sun Mar 2 12:41:32 2025 +0100

    Make too low vols and no soundin scream for playsound instead of failing silently (#89746)

    …ing silently
    ## About The Pull Request
    While reviewing the recent sound optimization PR I noticed that a bunch
    of checks here really make no sense to just fail silently when nobody
    should be doing this in the first place

    Immediately started screaming on run so thats a good sign

    ## Changelog
    :cl:
    code: previously silent failures due to empty sounds or too low volumes
    will now create a runtime in the runtime log
    fix: some footstep sounds like robotic or slimes are no longer silent
    /:cl:

    ---------

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

commit 73451ab44ef22bd5b7e3c629ab0671cbc2c47d18
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 11:40:35 2025 +0000

    Automatic changelog for PR #89743 [ci skip]

commit 41b5fdaae43d74ff2b3fe38d5afb2f397e5e0cc3
Author: MrMelbert <[email protected]>
Date:   Sun Mar 2 05:40:16 2025 -0600

    Replaces the holofirelocks in Icebox Botany with walkable plastic flaps (#89743)

    ## About The Pull Request

    As before.

    ## Why It's Good For The Game

    Bit less magical than the holofirelocks (well, depending on who you ask)

    ## Changelog

    :cl: Melbert
    qol: [Icebox] Botany's Holofirelocks are now walkable plastic flaps
    /:cl:

commit 6fba259164d049ca4b01bd39e5abb0067581c2b2
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 05:09:49 2025 +0000

    Automatic changelog for PR #89753 [ci skip]

commit 961767f2f6e41d7c5bc5d8207e49f77bb193806b
Author: _0Steven <[email protected]>
Date:   Sun Mar 2 05:44:38 2025 +0100

    Harvesting botany plants now uses `drop_location()` instead of `loc` (#89753)

    ## About The Pull Request

    So previously harvesting botany plants would use `user.loc` if you were
    adjacent. This, however, caused the issue where a monkey hardworker on a
    ~~bug~~ big manipulator harvesting plants would send them directly into
    the contents of the big manipulator they're riding.
    Here we just make it use `drop_location()`, so it actually drops in a
    valid location.
    ## Why It's Good For The Game

    Fix jank :+1:
    ## Changelog
    :cl:
    fix: Harvesting botany plants actually uses the right drop location.
    Botany plants harvested by monkey hardworkers on big manipulators
    harvesting using a full plant bag no longer puts the resulting items
    inside of the big manipulator.
    /:cl:

commit 97cf397b38a5042a8ef094ab988980ebd6e5f6e8
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 03:34:59 2025 +0000

    Automatic changelog for PR #89748 [ci skip]

commit 238575bdd0e9a1f76…
Iajret pushed a commit that referenced this pull request Mar 16, 2025
…nced AI Upgrades (#4936)

* patch + design

* minor spelling mistake

* buff recipe cost a little bit

* additional check if AI is inside

* Apply suggestions from code review

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

* Modular + check 4 organics

* Apply suggestions from code review

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

* Check deadstate + give languages + give synth emotes

* Squashed commit of the following:

commit b8e6ed2cb96e4cd1c43ca1203a8881eb67176431
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 9 00:58:33 2025 +0000

    Automatic changelog for PR #4988 [ci skip]

commit 35f3a6fc9c654e30c8b1b08241c54277f4347a52
Author: RatFromTheJungle <[email protected]>
Date:   Sat Mar 8 19:58:09 2025 -0500

    a 1 line change giving the blueshield's beret its armor values (#4988)

    1 line

commit b7e38d7b434b148dc3a47d662edacfd57421d853
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Sat Mar 8 13:42:14 2025 +0000

    Automatic changelog compile [ci skip]

commit b7c4eb26b4b79e1924583be048461f7045188b90
Merge: d1eb3409478 d217cf32eff
Author: Bloop <[email protected]>
Date:   Sat Mar 8 06:45:06 2025 -0500

    Batch of TG PRs 3/5 (#4985)

    ## About The Pull Request
    Currently includes up to and including `1b404098fd0`
    Closes #4872
    ## Changelog
    AutoCL Included

commit d217cf32effb0162d151d7617b5556ba8aec796f
Author: Fluffles <[email protected]>
Date:   Thu Mar 6 15:57:55 2025 -0700

    Modular changes for batch

commit d1eb34094786cce4fbed6cfa35a2e8c2f4a80bd6
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 19:58:00 2025 +0000

    Automatic changelog compile [ci skip]

commit 2ae4c0410dbb750e7c91c563c8ec7c3cc5dc0ce4
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 17:53:10 2025 +0000

    Automatic changelog for PR #4986 [ci skip]

commit fff325650a8c5b12e4e4329a558db11979fa35f5
Author: thetaro <[email protected]>
Date:   Fri Mar 7 09:52:39 2025 -0800

    makes strongarm not restricted to medical (#4986)

    * does the thing

    * curse of hardcoding?? idk this doesnt work

    * Update modular_nova/master_files/code/modules/cargo/packs/medical.dm

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

    * it works im krilling someone

    ---------

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

commit 490c743ec019c26c969e0acc3521e61c7128498b
Author: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Date:   Fri Mar 7 10:33:34 2025 -0500

    Bump robinraju/release-downloader from 1.11 to 1.12 (#4987)

    Bumps [robinraju/release-downloader](https://github.com/robinraju/release-downloader) from 1.11 to 1.12.
    - [Release notes](https://github.com/robinraju/release-downloader/releases)
    - [Commits](https://github.com/robinraju/release-downloader/compare/v1.11...v1.12)

    ---
    updated-dependencies:
    - dependency-name: robinraju/release-downloader
      dependency-type: direct:production
      update-type: version-update:semver-minor
    ...

    Signed-off-by: dependabot[bot] <[email protected]>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

commit 26e4ddc0ff272bcfe326fe5b1d37ac765e2911a1
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 14:55:07 2025 +0000

    Automatic changelog for PR #4967 [ci skip]

commit 7f761262c0149012a62c9aeefff3ee475de5b1be
Author: thetaro <[email protected]>
Date:   Fri Mar 7 06:54:40 2025 -0800

    changes the miecz firing sound to something more fitting (#4967)

    * gunsounds

    i did it

    * oops fixd lanca

    * rename and unused files removed

    * i forgot to save this before pushing woops

    * i think this works

    * new sound and attributions

    * Update attributions.txt

    ---------

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

commit a68ccdf50d1a261f5738ba5e423a96d5db72f253
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 01:09:29 2025 +0000

    Automatic changelog compile [ci skip]

commit 1369d6b8e0dac6740e70fa74fff3af226a71540f
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 01:00:52 2025 +0000

    Automatic changelog for PR #4976 [ci skip]

commit e2030154b6ed56915e1a46c7f4b25b432d5770ab
Author: Yobrocharlie <[email protected]>
Date:   Thu Mar 6 15:00:29 2025 -1000

    Opens up the gateways (#4976)

    weh

    enables gateways

commit 5ec757b2f12b6939dfeaf06ee6e7396c833b8c61
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Fri Mar 7 00:49:55 2025 +0000

    Automatic changelog compile [ci skip]

commit 605a2df763c0c8ce1841dcc325f49a6f7f803364
Author: MrMelbert <[email protected]>
Date:   Wed Mar 5 22:46:46 2025 -0600

    Fix some new sound runtimes (#89822)

    ## About The Pull Request

    - This sound was lower than the min

    ![image](https://github.com/user-attachments/assets/4447ac03-33ea-41f9-9ea6-99e3e0c9725d)

    - Mechanical surgery seemed to cause a `null` preop sound runtime. This
    fix might be silencing a runtime, I'll have to look closer.

    - And `rustle_sound` could be `null`. I think this is actually a
    mistake, and the correct way to mute rustling is `do_rustle = FALSE`,
    but I feel like we could just delete that var and let people dictate it
    by setting it to `null` or not? For a follow up PR nevertheless

    ## Changelog

    :cl: Melbert
    fix: You can hear looping computer sounds again
    /:cl:

commit 9e8a46be5b27badcf97946b4f5d073fc0131505d
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 04:47:06 2025 +0000

    Automatic changelog for PR #89822 [ci skip]

commit 0d61c3d28136119021999cc8e7e6531272f195fa
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 04:22:51 2025 +0000

    Automatic changelog for PR #89855 [ci skip]

commit 45221a0a6e7f060b047cf68c08ca1d1aa3b77015
Author: The Sharkening <[email protected]>
Date:   Wed Mar 5 23:17:46 2025 -0500

    Fixes research hanging the MC (#89855)

    ## About The Pull Request

    So design disks and the techweb have this neat little thing called
    ```copy_research_to``` which chains three **highly expensive** procs
    together which only sleep during CHECK_TICK. So it piles all the bodies
    up in the corner and the Master Controller explodes trying to process a
    fuck load of procs and the speed of my autoclicker

    The entire research chain probally needs to be refactored to be less
    expensive, but for now a 5 second cooldown will hopefully give it plenty
    of time. You only need to click these buttons once. So the cooldown can
    easily be increased without much gameplay effect.

    ![image](https://github.com/user-attachments/assets/5e0c2b5a-0fe5-4afc-b0bd-afa19e528ce6)

    I didn't lag out on my local server using the debug disk so I think this
    is a fix.

    fixes: #89827
    ## Why It's Good For The Game

    I'm sorry mr admin i crashed the server

    ## 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: Design disks now have a cooldown when uploading to no longer crash
    the server.
    /:cl:

    ---------

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

commit 3edbca2a7b3937d65b073a249f055cea261b35f4
Author: itsmeow <[email protected]>
Date:   Wed Mar 5 19:59:55 2025 -0600

    Bumps rust-g to `3.7.0` (#89830)

    ## About The Pull Request

    Fixes for the not-yet-implemented GAGS and better 64bit detection

    Also I moved the SQL methods because they're in the wrong spot when you
    copy from the dmsrc output

    https://github.com/tgstation/rust-g/releases/tag/3.7.0

    ## Why It's Good For The Game

    Routine update

commit 9dc927fc49dae533947e1cf2d481a3fee561a4b6
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 01:25:27 2025 +0000

    Automatic changelog for PR #89620 [ci skip]

commit 77b284c26cc066c8c672d73f1f248152b14f8ea6
Author: necromanceranne <[email protected]>
Date:   Thu Mar 6 12:25:06 2025 +1100

    Last Resort is no longer innate power for changelings (#89620)

    ## About The Pull Request

    https://github.com/tgstation/tgstation/pull/86605 included a change to
    make last resort an innate ability for all lings. This PR reverts that
    specific change.

    ## Why It's Good For The Game

    In what is unfortunately the
    ![image](https://github.com/user-attachments/assets/9e29deea-b42b-4813-9335-b86345472b23)
    of ling changes, this change in particular is fine on the surface until
    you consider that lings actually have a very, very particular
    interaction with one another.

    Killing and absorbing one another in order to improve their own power.

    If every single ling, upon death, can just explode immediately, there is
    no possible way for a ling to be absorbed by another ling under most any
    circumstance that isn't highly specific and that the majority of lings
    are not reliable affected by. Sleepy chems and stuff don't really stick
    to lings. Lings have the few remaining adrenals left in the game. And
    killing whatsoever and trying to absorb them will just result in you
    getting blown up.

    So, this interaction may as well be near impossible, and was already
    VERY difficult. This being as hard as it is means that lings kind of
    lose their antagonistic nature towards their own kind. The only good
    that can come from killing another ling is the removal of a ling from
    the round and to no benefit to you. That ling also cannot reasonably do
    the same to you, as you will also just explode and leave them with
    nothing for their efforts. This means that there is a much greater
    encouragement towards these lings working together instead.

    The game is more interesting if there is the potential for betrayal. So
    removing that aspect really cheapens the potential outcomes of
    inter-antagonist conflict.

    ## Changelog
    :cl:
    balance: Last resort is no longer an innate changeling ability.
    Changeling on changeling violence is back on the menu. (literally)
    /:cl:

commit 3c18f9b8a59b5fbbcb4d3dfd71bcddcd06d4a4ac
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 22:17:13 2025 +0000

    Automatic changelog for PR #89811 [ci skip]

commit 820de1a2a2438a7677dd364b9845a49e6c863892
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 22:17:09 2025 +0000

    Automatic changelog for PR #89777 [ci skip]

commit 4cf94e1d1b4ac47ab1960aa2a3374fa25f2fe730
Author: Kashargul <[email protected]>
Date:   Wed Mar 5 23:14:23 2025 +0100

    tg chat settings export and import (#89811)

    In rare cases, we could lose the telemetry or ready message. We'll now
    have a check to re-request once if we did not receive any telemetry.

    Also the chat was able to init before the setting were loaded, even
    though a rare condition, this could lead to the setting wiped.

    Recommending to TM, as our chat differs heavily from the original and I
    only gave it a short test.

    ## About The Pull Request
    ## Why It's Good For The Game
    ## Changelog
    :cl:
    fix: TG chat can no longer initialize before the settings loading was
    called
    qol: chat settings can be exported and imported
    /:cl:

commit db4c4a9ed199499e052ecc4cc86b57432de10228
Author: harry <[email protected]>
Date:   Wed Mar 5 22:13:54 2025 +0000

    fixes the chat audio player, typescripts it (#89777)

    ## About The Pull Request

    516 broke the funny way we were playing audio before which was built for
    ie8 compatibility. this version works for both ie11 and wv2

    ## Why It's Good For The Game

    for some reason we decided admins playing music was a good idea

    ## Changelog

    :cl:
    fix: the admin music player works again on 516
    /:cl:

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

    from (https://github.com/cmss13-devs/cmss13/pull/8606, but i know the
    guy so it's fine)

    ---------

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

commit 27b659252103e4249849aa2ff7e2c79e56957f7e
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 13:25:51 2025 +0000

    Automatic changelog for PR #89685 [ci skip]

commit c7e78d69797faf3b52f916886de9f070f808cbc1
Author: Ghom <[email protected]>
Date:   Wed Mar 5 14:25:33 2025 +0100

    Follower hoodies can now be crafted (#89685)

    ## About The Pull Request
    Little band-aid atomized from my WIP refactor. As you can see from the
    code comments, it's not a definitive solution, but I can't handle it
    properly right now because I have so muh beef on the plate.

    ## Why It's Good For The Game
    Fixing stuff that no one cares about, yay...

    ## Changelog

    :cl:
    fix: Follower hoodies can now be crafted.
    /:cl:

commit 2028ec27a2af2de911374bfde6c2b03dfb2c2566
Author: Ghom <[email protected]>
Date:   Wed Mar 5 14:25:08 2025 +0100

    Makes atmo pipes crafting recipes less copypasta-y (#89684)

    ## About The Pull Request
    It's both surprising and slightly infuriating that no one thought of
    this before.

    ## Why It's Good For The Game
    Code improvement. Atomized from my refactor.

    ## Changelog
    N/A

commit b671e1e67c20e7ad3202b3edb82b734f4e0194a7
Author: Ghom <[email protected]>
Date:   Wed Mar 5 14:24:35 2025 +0100

    unblacklists botany fruits and vegetables from unit tests. (#89683)

    subtypes of `/obj/item/food/grown` have no reason to not be spawned by
    the `create_and_destroy` unit test, which prevents us from knowing if a
    type fruit or veggie doesn't have a set seed in the tests. The only path
    that needs to be blacklisted is the common `/obj/item/food/grown` path
    itself, since its seed variable needs to remain null so that we can be
    warned about any subtype that hasn't overriden that value.
    This PR also removes the `/obj/item/food/grown/shell` path which serves
    no purpose anymore.

    Backend improvements. Atomizing changes from my refactor.

    N/A

commit 78a447280f2d119a198e2ed882a9101a0dd57157
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 13:04:09 2025 +0000

    Automatic changelog for PR #89812 [ci skip]

commit 22433e878c02ea17ea33b76fde57a010e6562113
Author: Singul0 <[email protected]>
Date:   Wed Mar 5 20:03:49 2025 +0700

    Buffs Borg Factory Spawned Cyborg Cells (#89812)

    ## About The Pull Request
    Atomization of #89810 incase it doesn't go through/while I work on
    rebalancing it.
    Buffs the cells cyborgs spawns with to T2 cells (the same level as
    rounstart cyborgs) instead of their potato battery they currently have
    ## Why It's Good For The Game
    Hopefully this makes the very cool borg factory module be more used, It
    used to be that this endgame module was onpar with doomsday, but people
    just stopped using it I guess. my wish is that, by increasing the cell
    charge the borgs spawns with it would incentivize AIs to actually do
    something else than just doomsdaying for once
    ## Changelog
    :cl:
    balance: Buffs the energy cells borg factory-spawned cyborgs spawn with
    (They are now T2 cells)
    /:cl:

commit f1b91094f36f98e7e25d6d14e00ef3615de26154
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 01:51:37 2025 +0000

    Automatic changelog for PR #89418 [ci skip]

commit 6b77b31542c2b51900334247627bbabde1aad2f5
Author: LemonInTheDark <[email protected]>
Date:   Tue Mar 4 17:51:14 2025 -0800

    Relative Config $imports (#89418)

    <!-- 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

    When you import a config file inside a subdirectory, the config loader
    will now look IN that subdirectory, instead of exiting out to the parent
    folder.

    As a consequence, adds support for ".." to our deduplication system to
    avoid infinite loops due to headmin brain.

    ## Why It's Good For The Game

    jannies are on some shit wanna make their lives a bit nicer

    Note: I am testing on windows and also have only a loose grasp of how
    linux works, might fuck up in that environment idk

    ## 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:
    config: the config loader now supports relatively pathed imports
    (importing a file inside a subfolder now acts as if you were IN that
    subfolder)
    /: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. -->

commit 498d5d1b0b15383977d46eacefb801544306e4ee
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 01:23:45 2025 +0000

    Automatic changelog for PR #89786 [ci skip]

commit ec646130c55ac0339831804469de67a37e792df4
Author: TheRyeGuyWhoWillNowDie <[email protected]>
Date:   Tue Mar 4 17:23:24 2025 -0800

    fixes chameleon IDs not actually making you untrackable by the AI (#89786)

    ## About The Pull Request

    No idea how long this has been broken for.

    ## Why It's Good For The Game

    its supposed to do this and it doesnt which is called a bug

    ## Changelog
    :cl:
    fix: chameleon IDs actually prevent AI tracking now
    /:cl:

    ---------

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

commit 69f9d8a7d4c450635a70b16f083f1a087a68d7ea
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 01:16:07 2025 +0000

    Automatic changelog for PR #89794 [ci skip]

commit a474a0f60adab523e67fcf4580352bbf12608f62
Author: MrMelbert <[email protected]>
Date:   Tue Mar 4 19:15:46 2025 -0600

    Fix Agender Random Names (#89794)

    ## About The Pull Request

    Fixes #89789

    Any non-male genders got random'd.

    ## Changelog

    :cl: Melbert
    fix: Fixed random names always giving male names
    /:cl:

commit 0c24bfb5e33c66d3d70c9c873cc9279538994008
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Wed Mar 5 00:27:25 2025 +0000

    Automatic changelog for PR #89678 [ci skip]

commit 59f139d9b0c268673bd37edabc70488696779241
Author: Lucy <[email protected]>
Date:   Wed Mar 5 00:27:06 2025 +0000

    Various telepathic/remote messages are now labeled as "radio" chat messages (#89678)

    ## About The Pull Request

    This explicitly specifies `type = MESSAGE_TYPE_RADIO` in `to_chat` for
    various methods of communication (blood cult communion, abductor
    telepathy, xeno hivemind, golem resonator, blob telepathy, changeling
    hivemind, and binary chat), so that they will always be considered under
    the "Radio" category by tgchat.

    Also added `avoid_highlighting` to some, so they won't highlight your
    own messages.

    ## Why It's Good For The Game

    Makes going thru older messages find things that I accidentally missed
    much easier.

    ## Changelog
    :cl:
    qol: Messages from blood cult communion, abductor telepathy, xeno
    hivemind, golem resonator, blob telepathy, changeling hivemind, and
    binary chat are now considered "radio" messages by the chat, so they can
    properly be sorted via chat tabs.
    qol: Your own messages in blood cult communion,
    abductor/xenomorph/changeling hivemind, or golem telepathy will no
    longer be highlighted in chat (to prevent highlight spam whenever you
    talk if you highlight your own name, mainly)
    /:cl:

commit cb4f171847072dfece5aee2db4c6b4ac17f85fc1
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 06:55:48 2025 +0000

    Automatic changelog for PR #89715 [ci skip]

commit fc42f9f7138e69b0f1db88d2e12a0596223d31c1
Author: Jacquerel <[email protected]>
Date:   Tue Mar 4 06:55:26 2025 +0000

    Adds missing apple interactions with jobs (#89715)

    ## About The Pull Request

    If you throw an apple at a doctor they will take 2 damage, successfully
    repelling them for another day.
    If you throw an apple at a scientist and hit them in the head, there is
    a small chance that they will suddenly have an impressive scientific
    insight. This chance is significantly higher if it falls on them from a
    higher z level, because that's going to happen in about 3 rounds ever.

    ## Why It's Good For The Game

    It's how apples work in real life and thus adds to our deep and complex
    simulation.

    ## Changelog

    :cl:
    add: Apples now react appropriately if they impact doctors or scientists
    under the expected circumstances.
    /:cl:

commit 76da98cf274a37f52481070a1fb64258c46c7071
Author: Kashargul <[email protected]>
Date:   Tue Mar 4 07:53:22 2025 +0100

    Fix config FPS/ Ticklag auto handling (#89792)

    FPS / Ticklag should be independent configs, but due to the use of
    `trim()` at
    https://github.com/tgstation/tgstation/blob/49f8d1e81dacfc75c635b13bf182edf1ce59df79/code/controllers/configuration/config_entry.dm#L116
    the number we hand over will simply be turned into an empty string...

    https://github.com/tgstation/tgstation/blob/49f8d1e81dacfc75c635b13bf182edf1ce59df79/code/controllers/configuration/entries/general.dm#L223

    https://github.com/tgstation/tgstation/blob/49f8d1e81dacfc75c635b13bf182edf1ce59df79/code/controllers/configuration/entries/general.dm#L241

    No player facing changes
    ## About The Pull Request
    ## Why It's Good For The Game
    Timers can get fucked up when someone only sets one or the other
    currently...
    ## Changelog

commit 55c10d5d9eea06432feeac1fb53f7866c0eba30d
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 01:52:16 2025 +0000

    Automatic changelog for PR #89791 [ci skip]

commit 0092d3b77b6b3b7b58b575581061888f14f15d97
Author: The Sharkening <[email protected]>
Date:   Mon Mar 3 17:51:49 2025 -0800

    [No GBP] Fixes the battle of the titans (megafauna attacking eachother) (#89791)

    ## About The Pull Request

    Fixes megafauna attacking eachother
    fixes: #89788

    ## Why It's Good For The Game

    haha funny logic fuck up

    ## Changelog

    :cl:
    fix: Megafauna should no longer attack eachother.
    /:cl:

commit 37fa2bdc0587a68a2e5e8d3c002fadac4eed8709
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 00:36:36 2025 +0000

    Automatic changelog for PR #89793 [ci skip]

commit f23c4a2835bc5bfe8a163bf2292a841a539def04
Author: TJatPBnJ <[email protected]>
Date:   Mon Mar 3 18:36:09 2025 -0600

    buffs floor fries (#89793)

    ## About The Pull Request
    Fries dont rot on the floor
    ## Why It's Good For The Game
    cover the floor in french fries
    ## Changelog
    :cl:
    balance: French fries are now immune to the effects of the floor. I miss
    floor fries
    /:cl:

commit 46127a5a9bbb6bb31492cbfc053059661486f7c5
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 00:10:57 2025 +0000

    Automatic changelog for PR #89692 [ci skip]

commit 69bd94a0f97540197e128d31634f1c08d506eab3
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 19:10:37 2025 -0500

    `/datum/ai_behavior/execute_clean/finish_action` will no longer return early if the emagged phrases list is empty (#89692)

    ## About The Pull Request
    For some reason, `/datum/ai_behavior/execute_clean/finish_action` was
    coded such that it returns early if the list of cleanbot emagged phrases
    was empty (or null).

    This shouldn't be a problem with regular cleanbots - they come with
    emagged phrases already set. However, it makes this ai behavior
    unsuitable for use with non-cleanbot controllers (such as Monkestation's
    cleaner slimes - cute little slimes that will dissolve trash and
    blood!), as the statement to clear the `target_key` blackboard value was
    after this.

    This PR handles this by changing around the `if` statements - where we
    previously ended early if the emagged phrase list was empty, we now only
    perform an emagged phrase if the list has any length. (and if you're
    wondering - `length(null) == 0`)

    ## Why It's Good For The Game
    Avoids potentially buggy behavior on admin-made mobs (or those made by
    downstreams).

    Also has the benefit of makes the code shorter and easier to understand!

    ## Changelog
    :cl:MichiRecRoom
    fix: The cleaning AI behavior (generally used by cleanbots) will no
    longer return early if the list of emagged phrases is empty.
    /:cl:

commit e7afb979cf18c202a008dfb28e51802c7493376a
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Tue Mar 4 00:09:55 2025 +0000

    Automatic changelog for PR #89785 [ci skip]

commit 89f810639fbe5a2a4ff927b851ab87bfeb1a3f50
Author: Rhials <[email protected]>
Date:   Mon Mar 3 16:09:36 2025 -0800

    Fixes 2 Small Typos in Autosurgeon Messages (#89785)

    ## About The Pull Request

    The first typo I saw in-game, the second one while I was fixing the
    first one. Bonus! :)
    ## Why It's Good For The Game

    Speaks words more good.
    ## Changelog
    :cl: Rhials
    spellcheck: Fixes grammar in autosurgeon use message.
    /:cl:

commit 51cfd5dbce142935589ce0adbb3d801871595ce9
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 21:51:34 2025 +0000

    Automatic changelog for PR #89723 [ci skip]

commit 246642c1b51e733f59e454efbfa03931540a7555
Author: Lucy <[email protected]>
Date:   Mon Mar 3 21:47:25 2025 +0000

    Allow more complex regex for chat highlights (#89723)

    ## About The Pull Request

    So, turns out, you couldn't actually do more complex regex in chat
    highlights, specifically because highlights got filtered by this regex:

    ```js
    const allowedRegex = /^[a-zа-яё0-9_\-$/^[\s\]\\]+$/gi;
    ```

    I discovered this while trying to use negative lookaheads in regex (to
    avoid matching different last names, as an example), and that regex
    filtered it out due to the use of parentheses.

    I made it so the `allowedRegex.test(str)` isn't needed if the line is a
    regex (starts and ends with a `/`)

    ## Comparison

    **Regex**:
    ```
    /Shio(?=n)/
    ```

    **Before fix**:
    ![2025-02-26 (1740632218) ~
    dreamseeker](https://github.com/user-attachments/assets/517f1503-2f04-4290-946e-52ce1d26986c)

    **After fix**:

    ![image](https://github.com/user-attachments/assets/199b8fee-c3bc-4204-bfa7-ab8b0c32e964)

    ## Why It's Good For The Game

    i am a masochist who writes complex regex and want to use that in spess

    ## Changelog
    :cl:
    fix: Fixed more advanced regex-based chat highlights not working.
    /:cl:

commit 0d479df2c14721a9264a9ccfcdf0fb60628e948f
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:03:46 2025 +0000

    Automatic changelog for PR #89730 [ci skip]

commit c6e5407b07220f3ba52ffa6a5580e7179e4245ea
Author: Holoo <[email protected]>
Date:   Mon Mar 3 17:03:25 2025 +0200

    Adjusts default spell position for cult (#89730)

    ## About The Pull Request
    Cult spells don't overlap with second row of inventory
    Before:

    ![image](https://github.com/user-attachments/assets/8f21633b-b533-4153-923a-ff238cddd71f)

    After:

    ![image](https://github.com/user-attachments/assets/55026b02-6d57-49a0-9f6f-346ac02300cd)
    ## Why It's Good For The Game
    Better ui
    ## Changelog
    :cl:
    qol: cult spells no longer overlap with second row of inventory
    /:cl:

commit 4f3f9589af37a28cc0a5c56c647169f060c976a1
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:03:07 2025 +0000

    Automatic changelog for PR #89734 [ci skip]

commit ff85aa9259b498e7d0571946b896e5c04d62d63e
Author: Tim <[email protected]>
Date:   Mon Mar 3 09:02:48 2025 -0600

    Fix hauntinum reagent to work when exposed to item objects (#89734)

    ## About The Pull Request
    Hauntium would cause a bunch of runtimes if it was exposed to objects on
    a tile that weren't items. (structures, machinery, etc.) This was due to
    the element rejecting non-item objects and forcing a crash message.

    It also had used the wrong reagent volume settings to determine when it
    should remove the effect. This caused it to instantly remove the haunted
    effect as soon as it was applied.

    Although I would have loved to adjust the length of time per reagent to
    not be stupidly OP (20 secs per 1u) I feel like that's touching balance.

    ## Why It's Good For The Game
    Code that breaks is bad.

    ## Changelog
    :cl:
    fix: Fix hauntinum reagent to work when it is exposed to item objects.
    /:cl:

commit c63b0dc5af8786290cf023073ed64a2cbec54db1
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:02:25 2025 +0000

    Automatic changelog for PR #89704 [ci skip]

commit 99ef833407a5e4ff2b18e8eaac3cc3fa649dd7da
Author: jimmyl <[email protected]>
Date:   Mon Mar 3 16:02:03 2025 +0100

    some fixes for the heretic eldritch id (#89704)

    ## About The Pull Request

    first and primarily the ritual preserves the ID card used
    the id itself may not consume (and cant use in the ritual) non-advanced
    (advanced IDs are mainly the crew and whoever IDs) IDs because it wasnt
    intentional and it kinda breaks a few things and its such a super edge
    case to find a not advanced id and use it with the id
    closes  #89697

    ## Why It's Good For The Game

    makes the ritual not screw people over

    ## Changelog
    :cl:
    fix: the eldritch id (Lock path) now preserves the ID used.
    /:cl:

commit f75c91fb7f804f657ab004a1eda538d952b4deb3
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 15:01:09 2025 +0000

    Automatic changelog for PR #89711 [ci skip]

commit 3d5369b1ede1cad12982578df898e66be955763b
Author: jimmyl <[email protected]>
Date:   Mon Mar 3 16:00:43 2025 +0100

    prevents stripping in caretakers last refuge (#89711)

    ## About The Pull Request

    prevents stripping in caretakers last refuge

    ## Why It's Good For The Game

    fixes #89710

    ## Changelog
    :cl:
    fix: prevents stripping in caretakers last refuge
    /:cl:

commit adedad5450739913d968a87f089b12c75fcb1776
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 14:57:22 2025 +0000

    Automatic changelog for PR #89752 [ci skip]

commit 42bd391ae9d2ae41513b8a015aa70468c896f398
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 09:57:01 2025 -0500

    Nukes now delete themselves, rather than having SSticker do it through a callback (#89752)

    ## About The Pull Request
    The title pretty much says it all. I'm told that this was done because,
    previously, the station would be exploded by the nuclear device - but
    when that was removed, all that remained was `qdel(bomb)`.

    That said, there's some bizarre stuff behind what pushed me to make this
    PR. See below if you want to know.

    <details><summary>Bizarre stuff</summary>

    For some reason, while trying to port
    <https://github.com/tgstation/tgstation/pull/77868> over to
    Monkestation, I started getting hard-deletes for the nuclear bomb used
    in the `nuke_cinematic` unit test.

    ```
      ## REF SEARCH Beginning search for references to a /obj/machinery/nuclearbomb/syndicate.
      ## REF SEARCH Refcount for /obj/machinery/nuclearbomb/syndicate: 7
      ## REF SEARCH Finished searching globals
      ## REF SEARCH Finished searching native globals
      ## REF SEARCH Finished searching atoms
      ## REF SEARCH Found /obj/machinery/nuclearbomb/syndicate [0x201f850] in list Datums -> /datum/controller/subsystem/garbage [0x2100001c] -> queues (list) -> /list (list) -> /list (list).
      ## REF SEARCH Found /obj/machinery/nuclearbomb/syndicate [0x201f850] in list Datums -> /datum/callback [0x21057da8] (obj: Ticker proc: station_explosion_detonation args: ["the nuclear fission explosive"] user: null) -> arguments (list).
      ## REF SEARCH Finished searching datums
      ## REF SEARCH Finished searching clients
      ## REF SEARCH Completed search for references to a /obj/machinery/nuclearbomb/syndicate.
      ## TESTING: GC: -- [0x201f850] | /obj/machinery/nuclearbomb/syndicate was unable to be GC'd -- (ref count of 3)
      Error: /obj/machinery/nuclearbomb/syndicate hard deleted 1 times out of a total del count of 3
      	FAILURE #1: /obj/machinery/nuclearbomb/syndicate hard deleted 1 times out of a total del count of 3 at code/modules/unit_tests/create_and_destroy.dm:99
    Error: FAIL /datum/unit_test/create_and_destroy 308.1s
    ```

    This hard-del would happen on every integration test, no matter the map
    and no matter the byond version. I was even able to have it happen
    locally.

    Thing is, Monkestation only seems to have two differences in our code
    for actually exploding a nuke:
    1. We mark some z-levels as safe from the nuclear bomb (so you can go to
    the lowest reaches of icebox and be safe from the bomb). This only
    modifies the list of z-levels to call the "gib everyone on z" code for.
    2. We don't have tgstation/tgstation#75967 ported over - but making a
    new branch and cherry-picking both 77868 and 75967 didn't seem to fix
    the issue either.

    So something with how the callback is handled by the `play_cutscene`
    global proc is preventing this from being qdel'd properly - resulting in
    a hard-delete over five minutes after the nuke cinematic plays.

    I tried several things to understand why the callback was causing a
    hard-del, but only one gave me any tangible info - changing the
    reference to the bomb, into a weakref reference, which stopped the
    hard-del.

    However, I eventually realized the callback was entirely pointless -
    right now, all it does is qdel the bomb. So I just moved it from a
    callback to part of the `really_actually_explode()` proc.
    </details>

    ## Why It's Good For The Game
    I'd say it fixes a hard-delete, but that hard-delete was only happening
    on Monkestation.

    So I guess it removes a bit of unnecessary indirection?

    ## Changelog

    :cl:MichiRecRoom
    fix: Nukes will now always be deleted upon exploding, no matter if they
    have a valid cutscene to play.
    /:cl:

commit 33fdcdb30d1e6b11032b5b6a7fc48e522c61f683
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 14:15:27 2025 +0000

    Automatic changelog for PR #89766 [ci skip]

commit 0a8a6b7de9f9d4db66eada1818ea7949d98b5e3d
Author: Kashargul <[email protected]>
Date:   Mon Mar 3 15:15:07 2025 +0100

    some more 516 compat fixes (#89766)

    Ports the helpers from
    https://github.com/BeeStation/BeeStation-Hornet/pull/12240

    This should fix some more of the 516 issues that I've seen while giving
    a quick check through the code

    The remaining browse should work now.

    Also fixing another sass warning while being on it.

    ## About The Pull Request
    ## Why It's Good For The Game
    ## Changelog
    :cl:
    fix: tgui say 516 will no longer change channels when the button is used
    to drag it
    fix: tgui say 516 will no longer leak radio messages into the wrong
    channel
    fix: runechat flickering when faded up messages fade out
    /:cl:

commit 6a1c9a3e448d3734f858752564c47a9df9728021
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 14:00:59 2025 +0000

    Automatic changelog for PR #89763 [ci skip]

commit 7867404954c45a8f9a0182cac11beed2ce438a0f
Author: SmArtKar <[email protected]>
Date:   Mon Mar 3 15:00:36 2025 +0100

    [NO GBP] Fixes external organs not being colored by colorful reagent (#89763)

    ## About The Pull Request
    Closes #89209
    Also fixed clothing being colored on ingestion, and removed a
    nonfunctional check which I didn't notice because, well, it was
    nonfunctional (otherwise only splashing would color you, which isn't
    what I was aiming with the original PR)

    ## Changelog
    :cl:
    fix: Fixed external organs not being colored by colorful reagent
    /:cl:

commit a1c575f7286286dc1f8e9cda59e1b46f38766a87
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 13:58:49 2025 +0000

    Automatic changelog for PR #89478 [ci skip]

commit e33fc5945d3536ee6f2b8b22fe4fd663d13353e0
Author: itsmeow <[email protected]>
Date:   Mon Mar 3 07:58:27 2025 -0600

    IconForge: rust-g Spritesheet Generation (#89478)

    Replaces the asset subsystem's spritesheet generator with a rust-based
    implementation (https://github.com/tgstation/rust-g/pull/160).

    This is a rough port of
    https://github.com/BeeStation/BeeStation-Hornet/pull/10404, but it
    includes fixes for some cases I didn't catch that apply on TG.

    (FWIW we've been using this system on prod for over a year and
    encountered no major issues.)

    ![image](https://github.com/user-attachments/assets/53bd2b44-9bb5-42d2-b33f-093651edebc0)

    `/datum/asset/spritesheet_batched`: A version of the spritesheet system
    that collects a list of `/datum/universal_icon`s and sends them off to
    rustg asynchronously, and the generation also runs on another thread, so
    the game doesn't block during realize_spritesheet. The rust generation
    is about 10x faster when it comes to actual icon generation, but the
    biggest perk of the batched spritesheets is the caching system.

    This PR notably does not convert a few things to the new spritesheet
    generator.

    - Species and antagonist icons in the preferences view because they use
    getFlatIcon ~~which can't be converted to universal icons~~.
    - Yes, this is still a *massive* cost to init, unfortunately. On Bee, I
    actually enabled the 'legacy' cache on prod and development, which you
    can see in my PR. That's why I added the 'clear cache' verb and the
    `unregister()` procs, because it can force a regeneration at runtime. I
    decided not to port this, since I think it would be detrimental to the
    large amount of contributors here.
    - It is *technically* possible to port parts of this to the uni_icon
    system by making a uni_icon version of getFlatIcon. However, some
    overlays use runtime-generated icons which are ~~completely unparseable
    to IconForge, since they're stored in the RSC and don't exist as files
    anywhere~~. This is most noticeable with things like hair (which blend
    additively with the hair mask on the server, thus making them invisible
    to `get_flat_uni_icon`). It also doesn't help that species and antag
    icons will still need to generate a bunch of dummies and delete them to
    even verify cache validity.
    - It is actually possible to write the RSC icons to the filesystem
    (using fcopy) and reference them in IconForge. However, I'm going to
    wait on doing this until I port my GAGS implementation because it
    requires GAGS to exist on the filesystem as well.

    IconForge generates a cache based on the set of icons used, all
    transform operations applied, and the source DMIs of each icon used
    within the spritesheet. It can compare the hashes and invalidate the
    cache automatically if any of these change. This means we can enable
    caching on development, and have absolutely no downsides, because if
    anything changes, the cache invalidates itself.

    The caching has a mean cost of ~5ms and saves a lot of time compared to
    generating the spritesheet, even with rust's faster generation. The main
    downside is that the cache still requires building the list of icons and
    their transforms, then json encoding it to send to rustg.

    Here's an abbreviated example of a cache JSON. All of these need to
    match for the cache to be valid. `input_hash` contains the transform
    definitions for all the sprites in the spritesheet, so if the input to
    iconforge changes, that hash catches it. The `sizes` and `sprites` are
    loaded into DM.

    ```json
    {
    	"input_hash": "99f1bc67d590e000",
    	"dmi_hashes": {
    		"icons/ui/achievements/achievements.dmi": "771200c75da11c62"
    	},
    	"sizes": [
    		"76x76"
    	],
    	"sprites": {
    		"achievement-rustascend": {
    			"size_id": "76x76",
    			"position": 1
    		}
    	},
    	"rustg_version": "3.6.0",
    	"dm_version": 1
    }
    ```

    Universal icons are just a collection of DMI, Icon State, and any icon
    transformation procs you apply (blends, crops, scales). They can be
    convered to DM icons via `to_icon()`. I've included an implementation of
    GAGS that produces universal icons, allowing GAGS items to be converted
    into them. IconForge can read universal icons and add them to
    spritesheets. It's basically just a wrapper that reimplements BYOND icon
    procs.

    Converts some uses of md5asfile within legacy spritesheets to use
    rustg_hash_file instead, improving the performance of their generation.

    Fixes lizard body markings not showing in previews, and re-adds eyes to
    the ethereal color preview. This is a side effect of IconForge having
    *much* better error handling than DM icon procs. Invalid stuff that gets
    passed around will error instead of silently doing nothing.

    Changes the CSS used in legacy spritesheet generation to split
    `background: url(...) no-repeat` into separate props. This is necessary
    for WebView2, as IE treats these properties differently - adding
    `background-color` to an icon object (as seen in the R&D console) won't
    work if you don't split these out.

    Deletes unused spritesheets and their associated icons (condiments
    spritesheet, old PDA spritesheet)

    If you press "Character Setup", the 10-13sec of lag is now approximately
    0.5-2 seconds.

    Tracy profile showing the time spent on get_asset_datum. I pressed the
    preferences button during init on both branches. Do note that this was
    ran with a smart cache HIT, so no generation occurred.

    ![image](https://github.com/user-attachments/assets/3efa71ab-972b-4f5a-acab-0892496ef999)

    Much lower worst-case for /datum/asset/New (which includes
    `create_spritesheets()` and `register()`)

    ![image](https://github.com/user-attachments/assets/9ad8ceee-7bd6-4c48-b5f3-006520f527ef)

    Here's a look at the internal costs from rustg - as you can see
    `generate_spritesheet()` is very fast:

    ![image](https://github.com/user-attachments/assets/e6892c28-8c31-4af5-96d4-501e966d0ce9)

    **Before**

    ![image](https://github.com/user-attachments/assets/cbd65787-42ba-4278-a45c-bd3d538da986)

    **After**

    ![image](https://github.com/user-attachments/assets/d750899a-bd07-4b57-80fb-420fcc0ae416)

    :cl:
    fix: Fixed lizard body markings and ethereal feature previews in the
    preference menu missing some overlays.
    refactor: Optimized spritesheet asset generation greatly using rustg
    IconForge, greatly reducing post-initialization lag as well as reducing
    init times and saving server computation.
    config: Added 'smart' asset caching, for batched rustg IconForge
    spritesheets. It is persistent and suitable for use on local, with
    automatic invalidation.
    add: Added admin verbs - Debug -> Clear Smart/Legacy Asset Cache for
    spritesheets.
    fix: Fixed R&D console icons breaking on WebView2/516
    /:cl:

commit f9059ed737f9ab53b8b650dc9d89ebbbbd865dad
Author: novasector-ci[bot] <181600888+novasector-ci[bot]@users.noreply.github.com>
Date:   Thu Mar 6 11:24:57 2025 +0000

    Automatic changelog for PR #4958 [ci skip]

commit f1dcdcbc7995aed593aa561f943b0357052d18e6
Author: Winter Frost <[email protected]>
Date:   Thu Mar 6 03:24:31 2025 -0800

    Adds GAGs Support for Port Tarkon Uniform (#4958)

    * Turns tarkon uniforms to GAGS Support

    * General fixes for the uniform

    * Apply suggestions from code review

    Thank you vinyl!

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

    * Apply suggestions from code review

    ---------

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

commit 3609cfdf593e48fc090de486f52b103ee15a31d3
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 12:49:14 2025 +0000

    Automatic changelog for PR #89755 [ci skip]

commit 02e6b2d1fd1584c66432b40183dc78dbf8db924d
Author: _0Steven <[email protected]>
Date:   Mon Mar 3 13:48:46 2025 +0100

    Add screentips to big manipulators, move wire interactions to is_wire_tool(...) usage (#89755)

    ## About The Pull Request

    While working on another pr I noticed big manipulators didn't have
    screentips yet, so here we add those.
    In the process of doing _that_, I noticed we do some awkward usage of
    `wirecutter/multitool_act(...)` for interacting with wires, which
    doesn't actually cover the assembly use case of interacting with wires.
    So to solve this, we move it to checking for `is_wire_tool(...)` on
    `item_interaction(...)` instead, which actually runs for all of our
    wire-interacting items.
    ## Why It's Good For The Game

    screentips make everything less obtuse
    being able to actually open the menu with all the items we're supposed
    to be able to open the menu with is good, and the code is slightly less
    cluttered from having the wire tool logic in one spot than y'know
    several procs
    ## Changelog
    :cl:
    qol: Added screentips to the big manipulator.
    fix: You can actually open the big manipulator's wires UI while holding
    an assembly.
    /:cl:

commit d4d7646cb3f71dac60ab8c52796a282bbf33cc76
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 09:35:40 2025 +0000

    Automatic changelog for PR #89759 [ci skip]

commit 807130d5f107f922a1163c287fc194587de2194e
Author: SmArtKar <[email protected]>
Date:   Mon Mar 3 10:26:52 2025 +0100

    Fixes an old simplemob damage bug (#89759)

    ## About The Pull Request

    Literally every single bit of our code assumes that adjustXLoss returns
    the total health delta (old_damage - new_damage), so negative values
    when damage was taken and positive when it was healed, ***except***
    simplemobs had this inverted for (supposedly) two years. Yeah. This
    broke crushers, mending touch and slime feeding - not sure if anything
    else was screwed due to this.

    Closes #87550

    ## Why It's Good For The Game

    ![despair-suffer](https://github.com/user-attachments/assets/cc18bc20-2fd5-48fc-833e-046433185ec5)

    ## Changelog
    :cl:
    fix: Fixed inconsistent crusher trophy droprates
    /:cl:

commit 283658f42041525041d004ddc791c25f81ed95f7
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 05:04:43 2025 +0000

    Automatic changelog for PR #89762 [ci skip]

commit 63f39695170c087aa242edb9a7f08c48a74bf35a
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 00:04:23 2025 -0500

    Fix the component printer not showing item icons in its UI (#89762)

    ## About The Pull Request
    Whilst testing a PR for Monkestation, I found out the component printer
    wasn't showing icons for the items in its UI. This PR fixes that.

    In fairness, the icons don't really do much here - most of the component
    printer designs are the same icon (screenshot taken from monkestation):

    ![image](https://github.com/user-attachments/assets/af81ce46-4351-467b-bc72-3ec95cd60ca1)

    But they're already in the asset datum, and it makes this UI look a
    little nicer, so why not use them?

    ## Why It's Good For The Game
    Makes this UI more consistent with other UIs that look like it (i.e. the
    protolathe).

    ## Changelog

    :cl:MichiRecRoom
    fix: The component printer now shows icons for the items in its UI.
    /:cl:

commit 65b5bda77baec20beeebd77e4b28a9431c87eaa7
Author: MichiRecRoom <[email protected]>
Date:   Mon Mar 3 00:02:50 2025 -0500

    Fix chem smoke runtiming when it tries to cancel its spread (#89750)

    ## About The Pull Request
    Chem smoke asks the smoke subsystem to cancel its spread, if it's qdel'd
    or otherwise reaches the end of its lifetime before it finishes
    spreading.

    However, an error in how chem smoke was coded causes it to queue
    spreading with the *foam* subsystem, rather than the *smoke* subsystem.
    This causes a runtime in SSsmoke, as it attempts to index into the
    spread carousel at a bucket index that was returned from SSfoam.

    This runtime actually happens spuriously during CI over on Monkestation.
    However, I only started noticing it because it kept appearing in failed
    runs on my fork - where I have the "Rerun flaky tests" workflow
    disabled.

    I was able to replicate the runtime locally, whilst debugging it on the
    Monkestation fork:
    1. Tag any turf as the place to spawn the smoke at (I chose one right
    next to a door)
    2. Use Debug -> Advanced ProcCall to spawn in chem smoke with a high
    range (`/proc/do_chem_smoke`, `range` = 10, `location` = the tagged
    turf) (Technically speaking, the high range isn't needed, but it makes
    it easier to trigger the runtime.)
    3. Wait some time (I found that around 12 seconds worked on my machine,
    when using `range = 10`)
    4. Do something to make the chem smoke start spreading (opening a door
    works)
    5. Wait - if the chem smoke is still spreading when its lifetime is up,
    it will cancel its spread - and in turn, trigger the runtime.

    Following these same steps after the change in this PR seems to show
    that this fixes the runtime.

    ## Why It's Good For The Game
    Less runtimes = More gooder

    ## Changelog
    No player-facing changes.

commit 958bf44b9e60ec24c548e263455e7562df947045
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 04:58:41 2025 +0000

    Automatic changelog for PR #89749 [ci skip]

commit a415c8d9edb4d7c21d6643bcb0370279f28c289c
Author: Aylong <[email protected]>
Date:   Mon Mar 3 06:58:21 2025 +0200

    Fix random TGchat BSOD on 516 (#89749)

    ## About The Pull Request
    Fixing random chat BSOD on 516

    Proof of BSOD

    ![image](https://github.com/user-attachments/assets/e9fdcf45-637e-4adf-9dff-f49cd3a2483b)

    And also adds min image width, so icons will not make text "flexing"

    ## Why It's Good For The Game
    No BSOD on 516

    ## Changelog

    :cl:
    fix: Fixed random chat BSOD on Byond 516
    /:cl:

commit 3c9fdaf2246080f877a36989dcd00c1052ba5836
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Mon Mar 3 04:58:07 2025 +0000

    Automatic changelog for PR #89773 [ci skip]

commit 04ca4d0fb29a3c49c6625498657b7996221cf136
Author: adamsong <[email protected]>
Date:   Sun Mar 2 23:57:44 2025 -0500

    Fixes borgs not being able to navigate through access restricted doors (#89773)

    ## About The Pull Request
    Currently if a borg attempts to use nav to access a waypoint in a
    restricted area of the station (brig for example) it will fail with "no
    valid path with current access" because get_access on a borg return
    nothing because they don't have an ID. get_access for silicons will now
    return all station accesses.
    ## Why It's Good For The Game

    Borgs need to find things, and not being able to nav into any restricted
    areas is annoying.
    ## Changelog
    :cl:
    add: Added the ability for borgs to pathfind into and through restricted
    areas.
    /:cl:

commit 27a278a3bd0534a4c95d2dd75e752c098f1418ce
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 15:48:09 2025 +0000

    Automatic changelog for PR #89709 [ci skip]

commit a6fa723228c7b7b60c9dd2ac2e8f01c656e05ff1
Author: TheRyeGuyWhoWillNowDie <[email protected]>
Date:   Sun Mar 2 07:47:46 2025 -0800

    removes wildcard limit from agent IDs (#89709)

    ## About The Pull Request

    With the trim system added years ago, agent IDs have become essentially
    worthless. This is because they can only hold SIX COMMON ACCESSES, TWO
    COMMAND ACCESSES, AND ONE CAPTAIN LEVEL ACCESS. This leads to the
    current situation, where agent IDs are essentially legacy content
    included in certain bundles like Contractor, but ultimately go entirely
    unused, with players instead opting to simply steal ID cards off of
    people and juggle them around.

    This PR makes them act more like they used to, where scanning an ID with
    one will let you take all of the access codes on the ID card, and add
    them to your agent ID.

    ## Why It's Good For The Game

    Having your ID card stolen is extremely frustrating. It's also very
    frustrating for traitors to need to carry literally a box of stolen ID
    cards to have access to various parts of the station, and it also
    hinders stealthy gameplay, since the stealthy ID card doesn't actually
    hold access.

    ## Changelog
    :cl:
    balance: wildcard limits have been removed from Agent ID cards
    balance: the specops crate gets a variation of the agent ID card which
    can only hold limited access (same as it is now)
    /:cl:
    # Conflicts:
    #	code/game/objects/items/cards_ids.dm

commit 4391c8c1dba6fe0ee1476dde9fa6608b8881681e
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 14:17:25 2025 +0000

    Automatic changelog for PR #89757 [ci skip]

commit f853b706f5874c78861180cc07f029e6475c0e72
Author: subject217 <[email protected]>
Date:   Sun Mar 2 08:17:03 2025 -0600

    Contractor Kit out of lowpop  (#89757)

    ## About The Pull Request

    Contractor Kit is only available on a population greater than the config
    defined lowpop number.

    ## Why It's Good For The Game

    Antags on lowpop are impossible to balance, since there's usually few or
    no security or headstaff. Contractor Kit allows access to extremely
    strong tools that give a huge advantage in one-on-one combat, meaning
    that it's very easy and common for them to basically run unopposed in
    lowpop. This is happening more now, because of the removal of progtot
    has made the contractor kit a more popular option, being the remaining
    progression based choice for traitors.

    Lowpop murderboning is against the rules now on all servers, for good
    reason. And the reason why I think Contractor Kit doesn't belong on
    lowpop either is for very similar reasons. In higher pop where there is
    adequate security, it's good enough to have antags that create conflict
    and incentive to capture or kill them, and they don't really need to be
    creative about how they antag. In lowpop though, the lack of meaningful
    opponents for an antag makes it functionally an auto-win. The problem
    with Contractor Kit in particular, is that for everyone else on the
    station, it's a misery-generating machine. It makes Cargo impossible to
    play as you will constantly have 0 credits, and everyone on the station
    is regularly getting their 5 minute timeouts to the punishment zone.

    The fun of antags for the station as a whole is in the struggle for who
    will win, not an antag winning on minute 1 and subjecting everyone else
    to your shit until they call the shuttle. Even an antag who has won can
    theoretically be interesting with a gimmick, but much like how ProgTot
    incentivized traitors to play in a boring manner, Contractor Kit
    mechanically incentivizes people who take it into playing in a boring
    way. Some people think that the kit is too powerful, but I think a good
    start right now is simply to get it out of lowpop.

    ## Changelog

    :cl:
    balance: Contractor Kit is no longer available in lowpop.
    /:cl:

commit e6910c1b15971d4f658aef94f899dc6f9025f101
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 12:27:23 2025 +0000

    Automatic changelog for PR #89751 [ci skip]

commit e7dc83defd9c6d442ae9d4f3d3240e77b93ce4ee
Author: SmArtKar <[email protected]>
Date:   Sun Mar 2 13:26:47 2025 +0100

    Breaks up mining loot into multiple files, refactors the hierophant club (#89751)

    Splits up tendril_loot.dm and megafauna_loot.dm (both over a thousand
    lines long) into group/item specific files, and megafauna-specific files
    respectively. Also pulls a few loot items scattered around the codebase
    into those files as well.

    Additionally while doing so I've cleaned up the code for some of them,
    and rewrote the hierophant club's code because it was abominable and a
    potential source of harddels.

    Its absolutely unnavigateable.

    :cl:
    code: Split and cleaned up mining loot's code
    refactor: Refactored the hierophant club.
    fix: Hierophant club's beacon no longer can go missing (until you try
    using it)
    /:cl:

commit cd37c1cf81969172af6db0ccaedfc7dbdc666b9c
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 12:15:26 2025 +0000

    Automatic changelog for PR #89687 [ci skip]

commit 960d937fc25bbbfbe11815bce6ed8da24fe5c93f
Author: Ghom <[email protected]>
Date:   Sun Mar 2 13:15:08 2025 +0100

    The edible component now uses DUPE_SOURCE mode (#89687)

    ## About The Pull Request
    The edible component now uses DUPE_SOURCE mode, which is needed to avoid
    conflicts between sources. This includes some other tidbits from my
    refactor like renaming dcs/flags.dm to ds/declarations.dm (in virtue of
    the fact it doesn't only contain flags anymore even before this PR),
    meat materials giving protein and fat reagents to affected atoms instead
    of generic nutriment and oil, and the pizza material no longer
    containing meat, because margherita pizza, which the material is
    extracted from, doesn't contain meat either. The pepperonis were
    magically conjured space bs.

    ## Why It's Good For The Game
    There are multiple sources of the edible component and we don't want
    issues with that. Also atomizing stuff from my refactor.

    ## Changelog

    :cl:
    balance: objects made out of meat are no longer classified as gross food
    on top of being raw and meaty, and actually contain protein and fat
    instead of standard nutriment and oil.
    balance: the pizza material stacks, crafted with margherita pizza and
    rollig pin mind you, no longer magically contain pepperoni.
    /:cl:

commit 7d9adc9427c742aff7a5f68e74678da157c20797
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 11:42:10 2025 +0000

    Automatic changelog for PR #89746 [ci skip]

commit 4a3957e31ca7f5597b777ffba6a67f458ba02351
Author: TiviPlus <[email protected]>
Date:   Sun Mar 2 12:41:32 2025 +0100

    Make too low vols and no soundin scream for playsound instead of failing silently (#89746)

    …ing silently
    ## About The Pull Request
    While reviewing the recent sound optimization PR I noticed that a bunch
    of checks here really make no sense to just fail silently when nobody
    should be doing this in the first place

    Immediately started screaming on run so thats a good sign

    ## Changelog
    :cl:
    code: previously silent failures due to empty sounds or too low volumes
    will now create a runtime in the runtime log
    fix: some footstep sounds like robotic or slimes are no longer silent
    /:cl:

    ---------

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

commit 73451ab44ef22bd5b7e3c629ab0671cbc2c47d18
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 11:40:35 2025 +0000

    Automatic changelog for PR #89743 [ci skip]

commit 41b5fdaae43d74ff2b3fe38d5afb2f397e5e0cc3
Author: MrMelbert <[email protected]>
Date:   Sun Mar 2 05:40:16 2025 -0600

    Replaces the holofirelocks in Icebox Botany with walkable plastic flaps (#89743)

    ## About The Pull Request

    As before.

    ## Why It's Good For The Game

    Bit less magical than the holofirelocks (well, depending on who you ask)

    ## Changelog

    :cl: Melbert
    qol: [Icebox] Botany's Holofirelocks are now walkable plastic flaps
    /:cl:

commit 6fba259164d049ca4b01bd39e5abb0067581c2b2
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 05:09:49 2025 +0000

    Automatic changelog for PR #89753 [ci skip]

commit 961767f2f6e41d7c5bc5d8207e49f77bb193806b
Author: _0Steven <[email protected]>
Date:   Sun Mar 2 05:44:38 2025 +0100

    Harvesting botany plants now uses `drop_location()` instead of `loc` (#89753)

    ## About The Pull Request

    So previously harvesting botany plants would use `user.loc` if you were
    adjacent. This, however, caused the issue where a monkey hardworker on a
    ~~bug~~ big manipulator harvesting plants would send them directly into
    the contents of the big manipulator they're riding.
    Here we just make it use `drop_location()`, so it actually drops in a
    valid location.
    ## Why It's Good For The Game

    Fix jank :+1:
    ## Changelog
    :cl:
    fix: Harvesting botany plants actually uses the right drop location.
    Botany plants harvested by monkey hardworkers on big manipulators
    harvesting using a full plant bag no longer puts the resulting items
    inside of the big manipulator.
    /:cl:

commit 97cf397b38a5042a8ef094ab988980ebd6e5f6e8
Author: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com>
Date:   Sun Mar 2 03:34:59 2025 +0000

    Automatic changelog for PR #89748 [ci skip]

commit 238575bdd0e9a1f76…
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.