Skip to content

Comments

Automatic TGS DMAPI Update#1

Open
github-actions[bot] wants to merge 1 commit intomasterfrom
tgs-dmapi-update
Open

Automatic TGS DMAPI Update#1
github-actions[bot] wants to merge 1 commit intomasterfrom
tgs-dmapi-update

Conversation

@github-actions
Copy link

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.

@github-actions github-actions bot added the Tools label Feb 25, 2025
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 7 times, most recently from 8d146f3 to 5c70efa Compare March 4, 2025 01:06
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 8 times, most recently from a55feac to 188b3db Compare March 12, 2025 01:05
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 7 times, most recently from aa2e784 to 8869fbb Compare March 19, 2025 01:07
Jedi-Toothpaste pushed a commit that referenced this pull request Mar 19, 2025
…h 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
<tgstation/tgstation#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:
Jedi-Toothpaste pushed a commit that referenced this pull request Mar 19, 2025
…nced AI Upgrades (NovaSector#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 <13398309+vinylspiders@users.noreply.github.com>

* Modular + check 4 organics

* Apply suggestions from code review

Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>

* 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 <62520989+RatFromTheJungle@users.noreply.github.com>
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 <13398309+vinylspiders@users.noreply.github.com>
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 <piecopresident@gmail.com>
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 <21stbrighthorizon@gmail.com>
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 <13398309+vinylspiders@users.noreply.github.com>

    * it works im krilling someone

    ---------

    Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>

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] <support@github.com>
    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 <21stbrighthorizon@gmail.com>
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 <13398309+vinylspiders@users.noreply.github.com>

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 <Charliemiller5617@gmail.com>
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 <51863163+MrMelbert@users.noreply.github.com>
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 <95130227+StrangeWeirdKitten@users.noreply.github.com>
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 <lucy@absolucy.moe>

commit 3edbca2a7b3937d65b073a249f055cea261b35f4
Author: itsmeow <itsmeow@itsmeow.dev>
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 <40847847+necromanceranne@users.noreply.github.com>
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 <144968721+Kashargul@users.noreply.github.com>
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 <me@harryob.live>
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 <55142896+harryob@users.noreply.github.com>

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 <42542238+Ghommie@users.noreply.github.com>
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 <42542238+Ghommie@users.noreply.github.com>
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 <42542238+Ghommie@users.noreply.github.com>
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 <127663818+Singul0@users.noreply.github.com>
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 <58055496+LemonInTheDark@users.noreply.github.com>
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 <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
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 <51863163+MrMelbert@users.noreply.github.com>

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 <51863163+MrMelbert@users.noreply.github.com>
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 <lucy@absolucy.moe>
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 <hnevard@gmail.com>
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 <144968721+Kashargul@users.noreply.github.com>
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 <95130227+StrangeWeirdKitten@users.noreply.github.com>
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 <69724863+TJatPBnJ@users.noreply.github.com>
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 <1008889+LikeLakers2@users.noreply.github.com>
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 <28870487+Rhials@users.noreply.github.com>
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 <lucy@absolucy.moe>
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 <38228316+Holoo-1@users.noreply.github.com>
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 <timothymtorres@gmail.com>
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 <70376633+mc-oofert@users.noreply.github.com>
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 <70376633+mc-oofert@users.noreply.github.com>
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 <1008889+LikeLakers2@users.noreply.github.com>
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 <144968721+Kashargul@users.noreply.github.com>
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 <44720187+SmArtKar@users.noreply.github.com>
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 <itsmeow@itsmeow.dev>
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 <98187980+RealWinterFrost@users.noreply.github.com>
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 <13398309+vinylspiders@users.noreply.github.com>

    * Apply suggestions from code review

    ---------

    Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>

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 <42909981+00-Steven@users.noreply.github.com>
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 <44720187+SmArtKar@users.noreply.github.com>
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 <1008889+LikeLakers2@users.noreply.github.com>
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 <1008889+LikeLakers2@users.noreply.github.com>
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 <69762909+AyIong@users.noreply.github.com>
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 <adamsong@users.noreply.github.com>
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 <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com>
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 <38303698+subject217@users.noreply.github.com>
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 <44720187+SmArtKar@users.noreply.github.com>
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 <42542238+Ghommie@users.noreply.github.com>
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 <57223640+TiviPlus@users.noreply.github.com>
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 <572233640+TiviPlus@users.noreply.com>

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 <51863163+MrMelbert@users.noreply.github.com>
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 <42909981+00-Steven@users.noreply.github.com>
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…
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 5 times, most recently from 25706b4 to 39523c0 Compare March 24, 2025 01:09
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 7 times, most recently from 354d20e to ab9cc9f Compare January 30, 2026 01:43
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 7 times, most recently from a7e95ab to 95defb7 Compare February 6, 2026 01:44
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 7 times, most recently from 7aacaad to 9cbdb28 Compare February 13, 2026 01:53
@github-actions github-actions bot force-pushed the tgs-dmapi-update branch 7 times, most recently from a2f46a9 to d92ff4b Compare February 20, 2026 01:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants