upstream 01.09.2025#24
Closed
Bruh-24 wants to merge 284 commits into
Closed
Conversation
…(Settler) (#92541) ## About The Pull Request https://github.com/user-attachments/assets/858081ed-114a-4f34-a925-e6b0250c29e2 Fixes spraycan-painted clothing not appearing painted when worn by short-height characters (e.g., with the Settler quirk). The item color filter was being effectively dropped when height displacement filters were applied to worn overlays. Implementation: update color_atom_overlay() to apply the atom’s color as a named filter on the overlay (and recursively on child overlays/underlays), preserving coloration even when additional filters (like height) are later added. ## Why It's Good For The Game Fixes #92536 Fixes a visible inconsistency: painted clothes now look painted on-mob for short-height characters. Improves clarity and player feedback; reduces confusion when using spray cans. The approach is robust and benefits other cases where overlays receive filters after coloration. ## Changelog :cl: fix: Spraycan-painted clothing now displays correctly when worn by short-height characters (e.g., Settler); paint no longer disappears on the mob sprite. code: Worn overlay coloration now uses named filters and recurses to child overlays, making it resilient to later filter changes (like height displacement). /:cl:
… "1 minute" (#92539) ## About The Pull Request <img width="397" height="190" alt="image" src="https://github.com/user-attachments/assets/41e915bc-6d8c-4180-83f1-12380c76554c" /> <img width="220" height="112" alt="image" src="https://github.com/user-attachments/assets/ef3aa542-e6e3-4983-8917-66009d4f843e" /> ## Why It's Good For The Game It. is good 👍 ## Changelog :cl: spellcheck: shuttles will now say "arriving in 1 minute" instead of "1 minutes" /:cl:
…or toggling it (#92523) ## About The Pull Request Don't let un-detachable or un-toggleable equipment be detached or toggled. ## Changelog :cl: Melbert fix: Fixes some potential exploits in mecha ui code /:cl:
## About The Pull Request Fixes #92558 Currently `attacked_by` does not differentiate an attack that did 0 damage with an attack that failed (due to blocking or whatnot) See also: This hack I left in https://github.com/tgstation/tgstation/blob/ce958c77c006a5fe279fb46fed513206e341cfce/code/_onclick/item_attack.dm#L346-L347 This causes problems because successful attacks can deal 0 damage. See linked issue. This PR addresses the issue by having `attacked_by` return `-1` (`ATTACK_FAILED`) for attacks which entirely do not connect. -1 was used so consumers can easily check if an attack did 0 damage OR failed (via checking `<= 0`) This isn't the preferred fix - I'd prefer if all block checking and zone targeting was moved to `/item/proc/attack`, but that requires attack itself be reigned in a bit (cuz it's still a bit of a mess). ## Changelog :cl: Melbert fix: Item on-attack effects will trigger as expected when hitting a limb at damage cap /:cl:
## About The Pull Request This change reduces the cost of Unmelting Protection by 300 favor points and Blazing Star by 500 favor points. Unmelting Protection: 1000 -> 700 Blazing Star: 2000 -> 1500 Why such a change? Simple, 1000 and 2000 are round numbers without a deeper thought about favor economy. By making the Unmelting Protection cost 700 now a Chaplain can try getting a one PERFECT Burning Sacrifice to cover the cost. It would require him to get a body with all limbs attached and without a scratch as any brute dmg means it can't get the most burn damage. (600 burn damage = 600 favor points + 100 extra points) As for Blazing Star, it would require 2 perfect rituals and few candles (3). ## Why It's Good For The Game Favor points balance economy - not simple round number. Chaplain player can try to achieve better results by preparing bodies before sacrificing them. For example tend their brute wounds and attach limbs. Quality over quantity! ## Changelog :cl: balance: Reduced cost of Unmelting Protection and Blazing Star /:cl:
## About The Pull Request Turns the surface z-level of icebox into a 1x3 area, effectively adding 2 wilderness new z-levels surrounding the station Because it's not always clear to other people what I'm talking about, this is what I mean with making the surface level a 3x3 z-level The wilderness z-levels are gridlinked, instead of crosslinked, which just means the connections are consistent and not randomized. If you keep going right, you will always end up where you started again, eventually. This also removes the black border around the surface icebox z-level (cause you can just go there now) **Wilderness levels** I've added some Z-level templates that can be generated. They're incredibly basic, but all can spawn runes on them as well. - Snow planes (5x) - Ice planes (1x) - Forest planes (1x) - Mountain planes (1x) I've also tweaked surface generation quite a bit. It being completely covered in bones always felt weird, and the intersparsed rocks and chasms never sat right with me. The default overworldgen is now more like the Forested trait, but with more sparse trees. All of this is modular btw. You can increase the amount of z-levels, make any space z-level be unrandomized gridlinked or add your own wilderness z-levels (either to your own map or icebox) ## Why It's Good For The Game Icebox exploration is kind of depressing. We have this unique setting, but we can't really go anywhere? You can go down and find that one pool, which is about the peak of exploration of icebox. Now you can literally explore the entire round and get incredibly lost! It's also a great opportunity for mappers! (Especially since the templates I made were made rather quickly as I wasn't sure if this had merit). 2 extra z-levels isn't a lot, but it'll let us further develop planetary wilderness z-levels further without impacting load times that much. Maybe 3x3 icebox can be real in the future, but for now 1x3 icebox will have to do
## About The Pull Request This is a follow up patch for #92508, otherwise than said in coderbus, calling the cleanup too early can lead to bad assets. We'll now keep track of the count of assets in generation and only clean up after they all have passed the generation. <img width="3067" height="455" alt="grafik" src="https://github.com/user-attachments/assets/0b65acf3-464f-436c-8a60-84c9472be6cd" /> ## Why It's Good For The Game ## Changelog There should be nothing player facing here as the asset job fails straight up if the cache was cleared too early.
…e condition from brimdemon fang (#92498) ## About The Pull Request Tin, some more hard dels that were found. Additionally there was a balloon alert meant to display phrases like "Kapow!" "Bam!" etc but it is runtiming before it can do so because the mob gets deleted before the balloon alert gets displayed. (solution for these sorts of issues is to display the balloon alert on the `loc` instead. ## Why It's Good For The Game Less chug, and a bugfix. ## Changelog Probably nothing worth mentioning
## About The Pull Request Jukebox now has context tips & has a new RMB that allows you to quick toggle music playing on/off. Also replaces messages to chat with balloon alerts. ## Why It's Good For The Game To be honest I'm just clicking random files and making things use balloon alerts & context tips, I think the more consistent we are w/ it the better it will be for players. ## Changelog :cl: qol: Jukebox now has context tips, balloon alerts over messages to chat, and can now RMB to quick toggle music from playing. /:cl:
## About The Pull Request I found out this admin only mech couldn't move because the 0 it had as step power consumption ended up as infinity somewhere. I removed it since there's no real reason why it shouldn't use power for movement. ## Why It's Good For The Game Mechs have legs for a reason.
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 5. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/download-artifact/releases">actions/download-artifact's releases</a>.</em></p> <blockquote> <h2>v5.0.0</h2> <h2>What's Changed</h2> <ul> <li>Update README.md by <a href="https://github.com/nebuk89"><code>@nebuk89</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/407">actions/download-artifact#407</a></li> <li>BREAKING fix: inconsistent path behavior for single artifact downloads by ID by <a href="https://github.com/GrantBirki"><code>@GrantBirki</code></a> in <a href="https://redirect.github.com/actions/download-artifact/pull/416">actions/download-artifact#416</a></li> </ul> <h2>v5.0.0</h2> <h3>🚨 Breaking Change</h3> <p>This release fixes an inconsistency in path behavior for single artifact downloads by ID. <strong>If you're downloading single artifacts by ID, the output path may change.</strong></p> <h4>What Changed</h4> <p>Previously, <strong>single artifact downloads</strong> behaved differently depending on how you specified the artifact:</p> <ul> <li><strong>By name</strong>: <code>name: my-artifact</code> → extracted to <code>path/</code> (direct)</li> <li><strong>By ID</strong>: <code>artifact-ids: 12345</code> → extracted to <code>path/my-artifact/</code> (nested)</li> </ul> <p>Now both methods are consistent:</p> <ul> <li><strong>By name</strong>: <code>name: my-artifact</code> → extracted to <code>path/</code> (unchanged)</li> <li><strong>By ID</strong>: <code>artifact-ids: 12345</code> → extracted to <code>path/</code> (fixed - now direct)</li> </ul> <h4>Migration Guide</h4> <h5>✅ No Action Needed If:</h5> <ul> <li>You download artifacts by <strong>name</strong></li> <li>You download <strong>multiple</strong> artifacts by ID</li> <li>You already use <code>merge-multiple: true</code> as a workaround</li> </ul> <h5>⚠️ Action Required If:</h5> <p>You download <strong>single artifacts by ID</strong> and your workflows expect the nested directory structure.</p> <p><strong>Before v5 (nested structure):</strong></p> <pre lang="yaml"><code>- uses: actions/download-artifact@v4 with: artifact-ids: 12345 path: dist # Files were in: dist/my-artifact/ </code></pre> <blockquote> <p>Where <code>my-artifact</code> is the name of the artifact you previously uploaded</p> </blockquote> <p><strong>To maintain old behavior (if needed):</strong></p> <pre lang="yaml"><code></tr></table> </code></pre> </blockquote> <p>... (truncated)</p> </details> <details> <summary>Commits</summary> <ul> <li><a href="https://github.com/actions/download-artifact/commit/634f93cb2916e3fdff6788551b99b062d0335ce0"><code>634f93c</code></a> Merge pull request <a href="https://redirect.github.com/actions/download-artifact/issues/416">#416</a> from actions/single-artifact-id-download-path</li> <li><a href="https://github.com/actions/download-artifact/commit/b19ff4302770b82aa4694b63703b547756dacce6"><code>b19ff43</code></a> refactor: resolve download path correctly in artifact download tests (mainly ...</li> <li><a href="https://github.com/actions/download-artifact/commit/e262cbee4ab8c473c61c59a81ad8e9dc760e90db"><code>e262cbe</code></a> bundle dist</li> <li><a href="https://github.com/actions/download-artifact/commit/bff23f9308ceb2f06d673043ea6311519be6a87b"><code>bff23f9</code></a> update docs</li> <li><a href="https://github.com/actions/download-artifact/commit/fff8c148a8fdd56aa81fcb019f0b5f6c65700c4d"><code>fff8c14</code></a> fix download path logic when downloading a single artifact by id</li> <li><a href="https://github.com/actions/download-artifact/commit/448e3f862ab3ef47aa50ff917776823c9946035b"><code>448e3f8</code></a> Merge pull request <a href="https://redirect.github.com/actions/download-artifact/issues/407">#407</a> from actions/nebuk89-patch-1</li> <li><a href="https://github.com/actions/download-artifact/commit/47225c44b359a5155efdbbbc352041b3e249fb1b"><code>47225c4</code></a> Update README.md</li> <li>See full diff in <a href="https://github.com/actions/download-artifact/compare/v4...v5">compare view</a></li> </ul> </details> <br /> [](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) --- <details> <summary>Dependabot commands and options</summary> <br /> You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) </details> Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…sync (#92553) ## About The Pull Request Followup to tgstation/tgstation#92504 Removes the conditional that was stopping the labeler from checking the PR body for labels on sync. <details><summary>No more of this weirdness</summary> <img width="877" height="488" alt="firefox_zppJmK5qz2" src="https://github.com/user-attachments/assets/74a556b5-a3e3-40e7-93dd-e18c62ed9649" /> </details> Any time someone updates a PR and it syncs, you can potentially lose some of the PR labels from the body (the changelog specifically) if they are not configured as `add_only` in the autoLabelConfig.js I had kept it in previously since it was how it was before, but thinking on it I do not think this is even necessary anymore now that the php webhook method is replaced with the action. Let's remove it! ## Why It's Good For The Game QoL for maintainers and contributors ## Changelog Nothing player-facing
ough ## About The Pull Request diode disk fucky mc wucky ## Why It's Good For The Game bugg ## Changelog :cl: fix: Diode Disks are no longer improperly /improper. /:cl:
… suit storage able to hold any "tiny" item (#92406)
…r ability to use them. (#92598) ## About The Pull Request So I was notified MODlinks break after you use them, sometimes! Looking into it, seems the culprit code was this: https://github.com/tgstation/tgstation/blob/138a670347eee4127d4713cbf11b3d8f0642cbe1/code/modules/mod/mod_link.dm#L461-L467 Specifically, MODlinks use `TRAIT_IN_CALL` to check whether the given user is already in a call to block them from opening new calls even with other MODlink devices. However, as seen above, the call datum actually gets the *current* user when cleaning up after itself, which if the call was ended by for example taking off a scryer... returns null, and thus doesn't remove the trait, and bars you from making new calls forever. A similar issue exists when deleting the visuals! Where it fails to unregister its signals on the user for the same reason. We fix this by tracking our current calling user in a weakref, and use/forward it where necessary. We also move more of the behaviour away from the call itself, and instead tell the MODlinks we've entered or exited a call. I feel this entire system should really be refactored, but due to how many hooks it needs and different ways to interact with it I'm not 100% certain on the best way to do it. So, well, posting this fix instead of letting it sit for the indeterminate amount of time needed for me to work that out. ## Why It's Good For The Game It's good if the things are actually functional. ## Changelog :cl: fix: Ending a MODlink call in any non-standard way no longer bricks your ability to use MODlinks. fix: Ending a MODlink call in any non-standard way and then giving the item to someone else to call with no longer moves the visuals based on the first person to try to use the item. /:cl:
## About The Pull Request the family heirloom quirk runs `get_all_contents` on the quirk holder every process. which is kinda dumb and wasteful when we are looking to see if the quirk holder has an item _that we already have a reference to_... `/atom/proc/contains` exists and works just fine for this. ## Why It's Good For The Game `get_all_contents` is very wasteful and unneeded for this use-case ## Changelog no user-facing changes
…s (#92585) ## About The Pull Request https://github.com/user-attachments/assets/074a0959-5dce-40ef-8eb5-d2ad86117d83 Fixes an old bug where abductor agent disguises were revealed after moving between z-levels. While stealth is active, the vest now listens for z-level changes and reasserts the disguise overlays on the next tick; it unregisters this listener when stealth is deactivated. ## Why It's Good For The Game Fixes #92555 Prevents unintended reveal of abductors during multi-Z movement ## Changelog :cl: fix: Abductor agent disguises no longer break when moving between z-levels. /:cl:
## About The Pull Request Adds portable wind turbines that can be put in your back slot or anchored to the ground. They accept a cell-powered item and charge it while you walk, or when space wind passes over them. Can be purchased for 400 credits or crafted with 3 kitchen knives, plastic, and servos. Requires a capacitor to charge things, and higher tiers charge faster, faster walkspeed also charges faster. <img width="592" height="644" alt="im222age" src="https://github.com/user-attachments/assets/e9997536-5ee0-4417-a31c-cb58666d4d07" /> https://github.com/user-attachments/assets/1cf7fce5-d385-4e3e-be97-fb15e253c308 ## Why It's Good For The Game Sometimes you don't have a cell charger. And you need to charge something. Now you can charge something by running laps around the station. During a blob, rechargers are brought to the front lines to charge energy guns and such but what if the blob turns off the power? And what are bar-rp'ers to do? Kill two birds with one stone by having them run laps instead of sitting around doing nothing. Also its funny. ## Changelog :cl: add: Added a portable wind turbine which can charge things when you walk around add: Added a signal that procs when an object resists space wind (from being anchored / pulled) sound: added woosh.ogg as a low "wooshing" noise image: added a wind turbine sprite /:cl: --------- Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
## About The Pull Request Alternative to 3️⃣(#92591), which has been fatally shot. Makes it so that His Grace can be turned into Her Grace via a xenobiology gender-change potion. Her Grace turns the souls of the consumed into confetti, creating a nice party atmosphere. Also adds pronoun helpers for /atom/s, as they weren't there before. ## Why It's Good For The Game I thought this was a good idea <img width="934" height="153" alt="image" src="https://github.com/user-attachments/assets/aff7abe0-86b6-47e1-a8e6-2c233544e9aa" /> It's a silly little variation, and it's purely voluntary. Couldn't hurt. ## Changelog :cl: add: His Grace will now drink gender-change potions /:cl: --------- Co-authored-by: Thunder12345 <Thunder12345@users.noreply.github.com>
…anel (#92813) ## About The Pull Request Adds a new bind `AltShiftClickOn` for explicitly opening the TGUI loot panel at some tile without raising any signals or calling into an override-able proc. This bind is in addition to the already existing alt-click and it is not intended to replace it. This is similar to [this pr](tgstation/tgstation#92307) but does not replace the old bind nor add any features beyond the bind opening the loot panel. ## Why It's Good For The Game Originally I started looking into this because it was very obnoxious that I was able to interact with pipes placed in walls, but not pipes placed underneath windows. I had thought the issue was because the window overlapped the pipe and was unable to open the loot panel to get at it because the window handles alt-clicks through the `simple_rotation` component's signal handler. Unfortunately the pipe is still obscured by the window, so this does not fix that. However I still see this as useful as it allows opening the very nice and wonderful loot panel on a pile of items which may or may not handle the alt click signal without needing to hunt for a pixel of the tile (or of an item you _think_ may not handle it) to do so. ## Changelog :cl: qol: shift+alt will open the tgui loot panel on any tile without being intercepted by items that may be on the tile code: adds a shift+alt click on proc for living mobs to explicitly open the tgui loot panel in addition to the already existing alt bind /:cl:
## About The Pull Request This fixes several bitfield operations that were missing parenthesis encapsulation. I noticed this problem in: - #92601 And decided to use regex to search for similar patterns which I came across in: - Move loops bypassing the `MOVELOOP_STATUS_RUNNING` status - Elastic arms mutation bypassing `ABSTRACT` object flags for picking up objects - Species radiation bypassing `HEAD_HAIR` hairstyle flags for balding - Damaged APC board status bypassing `EMAGGED` and `BROKEN` status for screentips - Shuttle cleanup code bypassing `MOVE_CONTENTS` for moving old turfs - Tram crossing signals bypassing `NORTH` and `EAST` direction checks ## Why It's Good For The Game Code behaves as intended.
## About The Pull Request Adds config to github readme ## Why It's Good For The Game Im lazy, its easy accessible from the tgstation github itself and removes some unneccesary hyperlinks (including the link itself aswell) ## Changelog
## About The Pull Request If a migo somehow (adminbus, ahem ahem) gets 100% dodge chance, it will create an infinite move recursion and crash the server. Or if we just get incredibly unlucky with a low health migo, as each failed dodge has a 75% chance to result in another dodge (due to calling move twice), even more so with diagonal movement. Happened twice already, if you're wondering. ## Changelog :cl: fix: Fixed a potential server crash caused by Mi-Gos /:cl:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.