From 70a8df91353aeeb9218fc768757394cd8e19a56d Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Thu, 23 Oct 2025 17:54:33 -0500 Subject: [PATCH 01/33] Angry monkeys are violent again (#93581) ## About The Pull Request ### Fix If a monkey has no enemies, it will not attack anything. For normal monkeys, this just caused nothing to happen. For angry monkeys, this allowed them to run `monkey_set_combat_target` and pick a target from view rather than enemies list. However, when determining "am I allowed to attack this guy", it checked the enemies list. Which is still empty. Meaning angry monkeys would not attack the target they just selected. I fixed this by adding a check for target in addition to a check for enemies. ### Other I also reduced the chance of screeching from 100% to 25% (or 10% for humans). ## Why It's Good For The Game - Bugfix - In testing this bugfix, monkeys screeching literally every attack is a bit excessive and spammy, especially if you're not a monkey. Bumping the odds down keeps the "rabid monkey" effect without overdoing it. ## Changelog :cl: Melbert fix: Angry monkeys (and the primal instincts trauma) are VIOLENT again qol: Monkeys no longer screech every tick they are attacking someone (now ~1 in 4 ticks, or ~1 in 10 for primal instincts) /:cl: --- code/datums/ai/monkey/monkey_controller.dm | 4 ++++ code/datums/ai/monkey/monkey_subtrees.dm | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/code/datums/ai/monkey/monkey_controller.dm b/code/datums/ai/monkey/monkey_controller.dm index 4c778f66122..d7929bf9a8e 100644 --- a/code/datums/ai/monkey/monkey_controller.dm +++ b/code/datums/ai/monkey/monkey_controller.dm @@ -31,8 +31,12 @@ have ways of interacting with a specific mob and control it. /datum/targeting_strategy/basic/monkey /datum/targeting_strategy/basic/monkey/faction_check(datum/ai_controller/controller, mob/living/living_mob, mob/living/the_target) + // if they wronged us, all bets are off if(controller.blackboard[BB_MONKEY_ENEMIES][the_target]) return FALSE + // target was forcibly set, all bets are off again + if(controller.blackboard[BB_MONKEY_CURRENT_ATTACK_TARGET] == the_target) + return FALSE return ..() /datum/ai_controller/monkey/process(seconds_per_tick) diff --git a/code/datums/ai/monkey/monkey_subtrees.dm b/code/datums/ai/monkey/monkey_subtrees.dm index 1210fe44ba1..9feb69df99c 100644 --- a/code/datums/ai/monkey/monkey_subtrees.dm +++ b/code/datums/ai/monkey/monkey_subtrees.dm @@ -55,7 +55,8 @@ controller.queue_behavior(/datum/ai_behavior/recruit_monkeys, BB_MONKEY_CURRENT_ATTACK_TARGET) return - controller.queue_behavior(/datum/ai_behavior/battle_screech/monkey) + if(SPT_PROB(ismonkey(living_pawn) ? 25 : 10, seconds_per_tick)) + controller.queue_behavior(/datum/ai_behavior/battle_screech/monkey) controller.queue_behavior(/datum/ai_behavior/monkey_attack_mob, BB_MONKEY_CURRENT_ATTACK_TARGET) return SUBTREE_RETURN_FINISH_PLANNING From e29c44020c1723e7d20393ec64b1827c4a010af5 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:54:57 +0000 Subject: [PATCH 02/33] Automatic changelog for PR #93581 [ci skip] --- html/changelogs/AutoChangeLog-pr-93581.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93581.yml diff --git a/html/changelogs/AutoChangeLog-pr-93581.yml b/html/changelogs/AutoChangeLog-pr-93581.yml new file mode 100644 index 00000000000..8438f431d2f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93581.yml @@ -0,0 +1,5 @@ +author: "Melbert" +delete-after: True +changes: + - bugfix: "Angry monkeys (and the primal instincts trauma) are VIOLENT again" + - qol: "Monkeys no longer screech every tick they are attacking someone (now ~1 in 4 ticks, or ~1 in 10 for primal instincts)" \ No newline at end of file From aac5fb011bd2e70aff97acf7da2248bceebaf483 Mon Sep 17 00:00:00 2001 From: ArchBTW <230859540+glue0000@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:55:21 +0000 Subject: [PATCH 03/33] (2) Changes Wallet Priority: Standard ID cards now go in order properly: from left to right (#93575) ## About The Pull Request [previous PR](https://github.com/tgstation/tgstation/pull/93290) now command ID (silver & gold IDs) priority remain unchanged example 1 Screenshot 2025-10-22 112002 before Screenshot 2025-10-22 111655 ^ if you were to remove engi id from the wallet above, it will show robotics id (instead of secoff) ^ before this PR, engi IDs even took priority over wardens after Screenshot 2025-10-22 112010 example 2 Screenshot 2025-10-22 111714 before Screenshot 2025-10-22 111655 after Screenshot 2025-10-22 111646 example 3 before the pr, a geneticist id would take wallet priority over a chemist id (for instance) priority used to tally up how many 'command/secure access' areas on the ID, rather than simply sort order. for reference, these were the areas: `ACCESS_AI_UPLOAD, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_ARMORY, ACCESS_CHANGE_IDS, ACCESS_COMMAND, ACCESS_EVA, ACCESS_KEYCARD_AUTH, ACCESS_MINISAT, ACCESS_RC_ANNOUNCE, ACCESS_TCOMMS, ACCESS_TECH_STORAGE, ACCESS_TELEPORTER, ACCESS_VAULT` ACCESS_FLAG_COMMAND -> ACCESS_FLAG_PRV_COMMAND so now it only checks if you have specifically head of staff access instead ## Why It's Good For The Game - player friendly - previously lead to wallet tediousness and unpredictability - make the core functionality and purpose of wallets simple and easy to understand - the previous functionality was more unpredictable and confusing when considering low pop granting extra access to IDs ## Changelog :cl: ArchBTW qol: Changes Wallet Priority: Standard ID cards now go in order properly: from left to right /:cl: --- code/game/objects/items/storage/wallets.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 8ab4b176ee1..51bb6b6e0e1 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -35,7 +35,7 @@ is_magnetic_found = TRUE if(!is_magnetic_found) - var/card_tally = SSid_access.tally_access(id_card, ACCESS_FLAG_COMMAND) + var/card_tally = SSid_access.tally_access(id_card, ACCESS_FLAG_PRV_COMMAND) if(card_tally > winning_tally) winning_tally = card_tally front_id = id_card From cb2bd1dfce91aedfb6becd3c8f54846377a51d3b Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Thu, 23 Oct 2025 22:55:47 +0000 Subject: [PATCH 04/33] Automatic changelog for PR #93575 [ci skip] --- html/changelogs/AutoChangeLog-pr-93575.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93575.yml diff --git a/html/changelogs/AutoChangeLog-pr-93575.yml b/html/changelogs/AutoChangeLog-pr-93575.yml new file mode 100644 index 00000000000..99826403931 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93575.yml @@ -0,0 +1,4 @@ +author: "ArchBTW" +delete-after: True +changes: + - qol: "Changes Wallet Priority: Standard ID cards now go in order properly: from left to right" \ No newline at end of file From 81fdf71a7bbfb3037e957e1978c4e83d5dc741da Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:27:14 +0000 Subject: [PATCH 05/33] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-93461.yml | 6 ----- html/changelogs/AutoChangeLog-pr-93499.yml | 4 --- html/changelogs/AutoChangeLog-pr-93521.yml | 4 --- html/changelogs/AutoChangeLog-pr-93534.yml | 5 ---- html/changelogs/AutoChangeLog-pr-93552.yml | 4 --- html/changelogs/AutoChangeLog-pr-93554.yml | 4 --- html/changelogs/AutoChangeLog-pr-93559.yml | 4 --- html/changelogs/AutoChangeLog-pr-93566.yml | 4 --- html/changelogs/AutoChangeLog-pr-93575.yml | 4 --- html/changelogs/AutoChangeLog-pr-93581.yml | 5 ---- html/changelogs/archive/2025-10.yml | 30 ++++++++++++++++++++++ 11 files changed, 30 insertions(+), 44 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-93461.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93499.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93521.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93534.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93552.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93554.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93559.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93566.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93575.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93581.yml diff --git a/html/changelogs/AutoChangeLog-pr-93461.yml b/html/changelogs/AutoChangeLog-pr-93461.yml deleted file mode 100644 index f0f660598cb..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93461.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghommie" -delete-after: True -changes: - - qol: "The fish analyzer UI should update more reliably." - - bugfix: "Fixed some of the fishes being unable to reproduce." - - balance: "Fish acquired through means other than fish farming itself takes less time to be able to reproduce." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93499.yml b/html/changelogs/AutoChangeLog-pr-93499.yml deleted file mode 100644 index 93afa6515e0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93499.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Krysonism" -delete-after: True -changes: - - balance: "prosthetic item limbs are no longer considered equipped items for some purposes such as ventcrawling." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93521.yml b/html/changelogs/AutoChangeLog-pr-93521.yml deleted file mode 100644 index c5a531e96df..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93521.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed dropped limbs rotating and disappearing when pulled/thrown" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93534.yml b/html/changelogs/AutoChangeLog-pr-93534.yml deleted file mode 100644 index 06e318aec4a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93534.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "wall mounts placed by player now falls off when the wall they are mounted on is destroyed" - - code_imp: "cleaned up wall mount code" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93552.yml b/html/changelogs/AutoChangeLog-pr-93552.yml deleted file mode 100644 index 9c12166aabc..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93552.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed glow bleeding through chair and sofa armrests" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93554.yml b/html/changelogs/AutoChangeLog-pr-93554.yml deleted file mode 100644 index 7092bb04750..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93554.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheNobodyofimportance" -delete-after: True -changes: - - balance: "Vomit drinking now checks for fly mouth instead of fly species" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93559.yml b/html/changelogs/AutoChangeLog-pr-93559.yml deleted file mode 100644 index 92d408c0e1e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93559.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed an issue which could randomly completely break a player's visuals until an admin resets their HUD" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93566.yml b/html/changelogs/AutoChangeLog-pr-93566.yml deleted file mode 100644 index e1141113e33..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93566.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Aliceee2ch" -delete-after: True -changes: - - balance: "Minimal hacked APC amount for purchasing doomsday module was lowered from 15 to 10." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93575.yml b/html/changelogs/AutoChangeLog-pr-93575.yml deleted file mode 100644 index 99826403931..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93575.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ArchBTW" -delete-after: True -changes: - - qol: "Changes Wallet Priority: Standard ID cards now go in order properly: from left to right" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93581.yml b/html/changelogs/AutoChangeLog-pr-93581.yml deleted file mode 100644 index 8438f431d2f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93581.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Melbert" -delete-after: True -changes: - - bugfix: "Angry monkeys (and the primal instincts trauma) are VIOLENT again" - - qol: "Monkeys no longer screech every tick they are attacking someone (now ~1 in 4 ticks, or ~1 in 10 for primal instincts)" \ No newline at end of file diff --git a/html/changelogs/archive/2025-10.yml b/html/changelogs/archive/2025-10.yml index ae298c065aa..c06f086cc31 100644 --- a/html/changelogs/archive/2025-10.yml +++ b/html/changelogs/archive/2025-10.yml @@ -761,3 +761,33 @@ layout, pipes and cables too - map: CATWALK - AI Upload - Re-balanced to have extra protection similar to every other map, layout tweaks for style as well as clearer layout of modules +2025-10-24: + Aliceee2ch: + - balance: Minimal hacked APC amount for purchasing doomsday module was lowered + from 15 to 10. + ArchBTW: + - qol: 'Changes Wallet Priority: Standard ID cards now go in order properly: from + left to right' + Ghommie: + - qol: The fish analyzer UI should update more reliably. + - bugfix: Fixed some of the fishes being unable to reproduce. + - balance: Fish acquired through means other than fish farming itself takes less + time to be able to reproduce. + Krysonism: + - balance: prosthetic item limbs are no longer considered equipped items for some + purposes such as ventcrawling. + Melbert: + - bugfix: Angry monkeys (and the primal instincts trauma) are VIOLENT again + - qol: Monkeys no longer screech every tick they are attacking someone (now ~1 in + 4 ticks, or ~1 in 10 for primal instincts) + SmArtKar: + - bugfix: Fixed dropped limbs rotating and disappearing when pulled/thrown + - bugfix: Fixed an issue which could randomly completely break a player's visuals + until an admin resets their HUD + - bugfix: Fixed glow bleeding through chair and sofa armrests + SyncIt21: + - bugfix: wall mounts placed by player now falls off when the wall they are mounted + on is destroyed + - code_imp: cleaned up wall mount code + TheNobodyofimportance: + - balance: Vomit drinking now checks for fly mouth instead of fly species From 61faa5e0306e977dddeb85e94efb5ee41ce58c67 Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Fri, 24 Oct 2025 05:59:42 +0200 Subject: [PATCH 06/33] Fixes PKC mark underlays not respecting mob offsets and pixel_w/z (#93561) ## About The Pull Request Mobs should offset using ``pixel_w/z`` (not always for y-z), not ``pixel_x/y``, and crushers weren't respecting that. They also checked for current offsets rather than base, meaning that the underlay always stayed in the same place at the center of the tile, or offset to the side if the mob used w/z offsets ## Changelog :cl: fix: Fixed PKC mark effect being offset to the side when applied to some mobs. /:cl: --- code/datums/status_effects/debuffs/debuffs.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/status_effects/debuffs/debuffs.dm b/code/datums/status_effects/debuffs/debuffs.dm index cc1c9cecfcb..743ee86ba4c 100644 --- a/code/datums/status_effects/debuffs/debuffs.dm +++ b/code/datums/status_effects/debuffs/debuffs.dm @@ -370,8 +370,8 @@ return FALSE marked_underlay = new() - marked_underlay.pixel_w = -owner.pixel_x - marked_underlay.pixel_z = -owner.pixel_y + marked_underlay.pixel_w = -(owner.base_pixel_x + owner.base_pixel_w) + marked_underlay.pixel_z = -(owner.base_pixel_y + owner.base_pixel_z) marked_underlay.transform *= 0.5 owner.vis_contents += marked_underlay animate(marked_underlay, ready_delay, transform = matrix() * 1.2, flags = CIRCULAR_EASING | EASE_IN) From 900403da2d80726eeb76d95d8dbc46953d03c40a Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 04:00:07 +0000 Subject: [PATCH 07/33] Automatic changelog for PR #93561 [ci skip] --- html/changelogs/AutoChangeLog-pr-93561.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93561.yml diff --git a/html/changelogs/AutoChangeLog-pr-93561.yml b/html/changelogs/AutoChangeLog-pr-93561.yml new file mode 100644 index 00000000000..1c0e052f73d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93561.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - bugfix: "Fixed PKC mark effect being offset to the side when applied to some mobs." \ No newline at end of file From 0374acfbc605bde175fbb60a5a05aac0f20a6ab3 Mon Sep 17 00:00:00 2001 From: MGOOOOOO <97645027+MGOOOOOO@users.noreply.github.com> Date: Fri, 24 Oct 2025 00:00:14 -0400 Subject: [PATCH 08/33] Fixes Sterilizine not applying its surgical speed modifier (#93563) ## About The Pull Request Sterilizine is supposed to provide a 20% surgery speed bonus in surgeries, but that part of the reagent's effects don't work due to it using max( instead of min( like the other surgery modifying reagents. This PR fixes that so Sterilizine can once again make surgeries faster. ## Why It's Good For The Game Bugfix, the reagent has made surgeries faster before and should still do it now. ## Changelog :cl: fix: Sterilizine will now correctly apply its 20% surgery speed bonus. /:cl: --- code/modules/reagents/chemistry/reagents/other_reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 9d6baed2e51..fa2338a3a3d 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1101,7 +1101,7 @@ return for(var/datum/surgery/surgery as anything in exposed_carbon.surgeries) - surgery.speed_modifier = max(0.2, surgery.speed_modifier) + surgery.speed_modifier = min(0.8, surgery.speed_modifier) /datum/reagent/space_cleaner/sterilizine/on_burn_wound_processing(datum/wound/burn/flesh/burn_wound) burn_wound.sanitization += 0.9 From 7e92a70429da9d192f7248fa85d0e0ff5931822d Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 04:00:39 +0000 Subject: [PATCH 09/33] Automatic changelog for PR #93563 [ci skip] --- html/changelogs/AutoChangeLog-pr-93563.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93563.yml diff --git a/html/changelogs/AutoChangeLog-pr-93563.yml b/html/changelogs/AutoChangeLog-pr-93563.yml new file mode 100644 index 00000000000..c56716dbfbd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93563.yml @@ -0,0 +1,4 @@ +author: "MGOOOOOO" +delete-after: True +changes: + - bugfix: "Sterilizine will now correctly apply its 20% surgery speed bonus." \ No newline at end of file From 54198986b7f9e769978712c82e40e866658fa8f4 Mon Sep 17 00:00:00 2001 From: die <96586172+grungussuss@users.noreply.github.com> Date: Fri, 24 Oct 2025 10:42:10 +0300 Subject: [PATCH 10/33] generic device handling sounds (#93536) --- code/__DEFINES/sound.dm | 2 ++ code/game/objects/items/cosmetics.dm | 3 +++ code/game/objects/items/devices/aicard.dm | 3 +++ code/game/objects/items/devices/flashlight.dm | 4 ++++ code/game/objects/items/devices/gps.dm | 3 +++ .../items/devices/radio/electropack.dm | 3 +++ .../game/objects/items/devices/radio/radio.dm | 3 +++ .../items/devices/scanners/autopsy_scanner.dm | 3 +++ .../items/devices/scanners/health_analyzer.dm | 3 +++ .../items/devices/scanners/plant_analyzer.dm | 3 +++ .../devices/scanners/sequence_scanner.dm | 3 +++ .../items/devices/scanners/t_scanner.dm | 3 +++ .../objects/items/devices/sensor_device.dm | 3 +++ code/game/objects/items/holosign_creator.dm | 3 +++ code/game/objects/items/inspector.dm | 3 +++ code/game/objects/items/pinpointer.dm | 3 +++ code/game/objects/items/teleportation.dm | 3 +++ code/game/objects/items/wall_mounted.dm | 3 +++ code/game/sound/sound_keys/sound_keys.dm | 19 ++++++++++++++++++ code/modules/experisci/handheld_scanner.dm | 3 +++ code/modules/mod/modules/_module.dm | 3 +++ .../modular_computers/computers/item/pda.dm | 3 +++ code/modules/pai/card.dm | 3 +++ code/modules/recycling/sortingmachinery.dm | 3 +++ code/modules/research/stock_parts.dm | 3 +++ code/modules/surgery/tools.dm | 3 +++ code/modules/vehicles/mecha/mecha_parts.dm | 3 +++ sound/items/generic_device/attribution.txt | 1 + .../generic_device/generic_device_drop1.ogg | Bin 0 -> 9558 bytes .../generic_device/generic_device_drop2.ogg | Bin 0 -> 7144 bytes .../generic_device/generic_device_drop3.ogg | Bin 0 -> 7153 bytes .../generic_device/generic_device_drop4.ogg | Bin 0 -> 7751 bytes .../generic_device/generic_device_drop5.ogg | Bin 0 -> 7597 bytes .../generic_device/generic_device_pickup1.ogg | Bin 0 -> 8987 bytes .../generic_device/generic_device_pickup2.ogg | Bin 0 -> 7260 bytes .../generic_device/generic_device_pickup3.ogg | Bin 0 -> 8041 bytes .../generic_device/generic_device_pickup4.ogg | Bin 0 -> 7322 bytes .../generic_device/generic_device_pickup5.ogg | Bin 0 -> 8644 bytes 38 files changed, 98 insertions(+) create mode 100644 sound/items/generic_device/attribution.txt create mode 100644 sound/items/generic_device/generic_device_drop1.ogg create mode 100644 sound/items/generic_device/generic_device_drop2.ogg create mode 100644 sound/items/generic_device/generic_device_drop3.ogg create mode 100644 sound/items/generic_device/generic_device_drop4.ogg create mode 100644 sound/items/generic_device/generic_device_drop5.ogg create mode 100644 sound/items/generic_device/generic_device_pickup1.ogg create mode 100644 sound/items/generic_device/generic_device_pickup2.ogg create mode 100644 sound/items/generic_device/generic_device_pickup3.ogg create mode 100644 sound/items/generic_device/generic_device_pickup4.ogg create mode 100644 sound/items/generic_device/generic_device_pickup5.ogg diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index 51f0936b717..32b07aef803 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -315,6 +315,8 @@ GLOBAL_LIST_EMPTY(sfx_datum_by_key) #define SFX_GAS_MASK_PICKUP "gas_mask_pickup" #define SFX_GAS_MASK_DROP "gas_mask_drop" #define SFX_GAS_MASK_EQUIP "gas_mask_equip" +#define SFX_GENERIC_DEVICE_PICKUP "generic_device_pickup" +#define SFX_GENERIC_DEVICE_DROP "generic_device_drop" // Standard is 44.1khz #define MIN_EMOTE_PITCH 40000 diff --git a/code/game/objects/items/cosmetics.dm b/code/game/objects/items/cosmetics.dm index a96f38cf99f..4550b7cf6b8 100644 --- a/code/game/objects/items/cosmetics.dm +++ b/code/game/objects/items/cosmetics.dm @@ -194,6 +194,9 @@ inhand_icon_state = "razor" obj_flags = CONDUCTS_ELECTRICITY w_class = WEIGHT_CLASS_TINY + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /obj/item/razor/suicide_act(mob/living/carbon/user) user.visible_message(span_suicide("[user] begins shaving [user.p_them()]self without the razor guard! It looks like [user.p_theyre()] trying to commit suicide!")) diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 759790ab155..62ff966c91c 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -11,6 +11,9 @@ w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT item_flags = NOBLUDGEON + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP var/flush = FALSE var/mob/living/silicon/ai/AI diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index 4ee61917f16..f38aa9147cf 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -25,6 +25,10 @@ light_range = 4 light_power = 1 light_on = FALSE + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP + /// If we've been forcibly disabled for a temporary amount of time. COOLDOWN_DECLARE(disabled_time) /// Can we toggle this light on and off (used for contexual screentips only) diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 7b8257d9ede..c3b17c4ce1f 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -11,6 +11,9 @@ w_class = WEIGHT_CLASS_SMALL slot_flags = ITEM_SLOT_BELT obj_flags = UNIQUE_RENAME + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP var/gpstag var/tracking_on = TRUE var/debug_mode = FALSE diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 3867ace4fc1..c7507b31bd0 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -9,6 +9,9 @@ obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BACK w_class = WEIGHT_CLASS_HUGE + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP custom_materials = list(/datum/material/iron=SHEET_MATERIAL_AMOUNT *5, /datum/material/glass=SHEET_MATERIAL_AMOUNT * 1.25) var/on = TRUE diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index d2d479693f9..9245f00a0ed 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -11,6 +11,9 @@ desc = "A basic handheld radio that communicates with local telecommunication networks." dog_fashion = /datum/dog_fashion/back interaction_flags_atom = parent_type::interaction_flags_atom | INTERACT_ATOM_ALLOW_USER_LOCATION | INTERACT_ATOM_IGNORE_MOBILITY + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT diff --git a/code/game/objects/items/devices/scanners/autopsy_scanner.dm b/code/game/objects/items/devices/scanners/autopsy_scanner.dm index af0ff55abd1..d407ce6b8e3 100644 --- a/code/game/objects/items/devices/scanners/autopsy_scanner.dm +++ b/code/game/objects/items/devices/scanners/autopsy_scanner.dm @@ -13,6 +13,9 @@ w_class = WEIGHT_CLASS_NORMAL custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*2) custom_price = PAYCHECK_COMMAND + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /obj/item/autopsy_scanner/interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) if(!isliving(interacting_with)) diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index 7e70edc5f5e..bb0f7fdde8d 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -22,6 +22,9 @@ custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT *2) interaction_flags_click = NEED_LITERACY|NEED_LIGHT|ALLOW_RESTING custom_price = PAYCHECK_COMMAND + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /// Verbose/condensed var/mode = SCANNER_VERBOSE /// HEALTH/WOUND diff --git a/code/game/objects/items/devices/scanners/plant_analyzer.dm b/code/game/objects/items/devices/scanners/plant_analyzer.dm index 857454fb7fc..e653d09dcb8 100644 --- a/code/game/objects/items/devices/scanners/plant_analyzer.dm +++ b/code/game/objects/items/devices/scanners/plant_analyzer.dm @@ -13,6 +13,9 @@ w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT*0.3, /datum/material/glass =SMALL_MATERIAL_AMOUNT*0.2) + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /// Cached data from ui_interact var/list/last_scan_data /// Weakref to the last thing we scanned diff --git a/code/game/objects/items/devices/scanners/sequence_scanner.dm b/code/game/objects/items/devices/scanners/sequence_scanner.dm index d22372fa108..938c5637b74 100644 --- a/code/game/objects/items/devices/scanners/sequence_scanner.dm +++ b/code/game/objects/items/devices/scanners/sequence_scanner.dm @@ -15,6 +15,9 @@ throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT*2) + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP var/list/discovered = list() //hit a dna console to update the scanners database var/list/buffer diff --git a/code/game/objects/items/devices/scanners/t_scanner.dm b/code/game/objects/items/devices/scanners/t_scanner.dm index 0e8e2c44182..30083139abd 100644 --- a/code/game/objects/items/devices/scanners/t_scanner.dm +++ b/code/game/objects/items/devices/scanners/t_scanner.dm @@ -11,6 +11,9 @@ lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' custom_materials = list(/datum/material/iron=SMALL_MATERIAL_AMOUNT * 1.5) + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /// Is this T-Ray scanner currently on? var/on = FALSE diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index e68c8095fe0..97320669be8 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -11,6 +11,9 @@ slot_flags = ITEM_SLOT_BELT custom_price = PAYCHECK_CREW * 5 custom_premium_price = PAYCHECK_CREW * 6 + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /obj/item/sensor_device/attack_self(mob/user) GLOB.crewmonitor.show(user,src) //Proc already exists, just had to call it diff --git a/code/game/objects/items/holosign_creator.dm b/code/game/objects/items/holosign_creator.dm index 23db75e850c..6e46cdb2a4d 100644 --- a/code/game/objects/items/holosign_creator.dm +++ b/code/game/objects/items/holosign_creator.dm @@ -13,6 +13,9 @@ throw_speed = 3 throw_range = 7 item_flags = NOBLUDGEON + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP var/list/signs var/max_signs = 10 //time to create a holosign in deciseconds. diff --git a/code/game/objects/items/inspector.dm b/code/game/objects/items/inspector.dm index 2f96f3fb737..8a08562bd84 100644 --- a/code/game/objects/items/inspector.dm +++ b/code/game/objects/items/inspector.dm @@ -22,6 +22,9 @@ interaction_flags_click = NEED_DEXTERITY throw_range = 1 throw_speed = 1 + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP ///How long it takes to print on time each mode, ordered NORMAL, FAST, HONK var/list/time_list = list(5 SECONDS, 1 SECONDS, 0.1 SECONDS) ///Which print time mode we're on. diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm index 2e0f7af6102..dfff30effdc 100644 --- a/code/game/objects/items/pinpointer.dm +++ b/code/game/objects/items/pinpointer.dm @@ -14,6 +14,9 @@ throw_speed = 3 throw_range = 7 custom_materials = list(/datum/material/iron = SMALL_MATERIAL_AMOUNT * 5, /datum/material/glass = SMALL_MATERIAL_AMOUNT * 2.5) + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP var/active = FALSE var/atom/movable/target //The thing we're searching for var/minimum_range = 0 //at what range the pinpointer declares you to be at your destination diff --git a/code/game/objects/items/teleportation.dm b/code/game/objects/items/teleportation.dm index a442cc327ab..18eabb3f816 100644 --- a/code/game/objects/items/teleportation.dm +++ b/code/game/objects/items/teleportation.dm @@ -87,6 +87,9 @@ custom_materials = list(/datum/material/iron = SHEET_MATERIAL_AMOUNT * 5) armor_type = /datum/armor/item_hand_tele resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP ///List of portal pairs created by this hand tele var/list/active_portal_pairs = list() ///Maximum concurrent active portal pairs allowed diff --git a/code/game/objects/items/wall_mounted.dm b/code/game/objects/items/wall_mounted.dm index b6ad4ecd9f7..1abf80b5a19 100644 --- a/code/game/objects/items/wall_mounted.dm +++ b/code/game/objects/items/wall_mounted.dm @@ -94,3 +94,6 @@ custom_materials = list(/datum/material/iron= SMALL_MATERIAL_AMOUNT * 0.5, /datum/material/glass= SMALL_MATERIAL_AMOUNT * 0.5) grind_results = list(/datum/reagent/iron = 10, /datum/reagent/silicon = 10) custom_price = PAYCHECK_CREW * 0.5 + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP diff --git a/code/game/sound/sound_keys/sound_keys.dm b/code/game/sound/sound_keys/sound_keys.dm index 0a7c4ea9e0f..e8d528408e1 100644 --- a/code/game/sound/sound_keys/sound_keys.dm +++ b/code/game/sound/sound_keys/sound_keys.dm @@ -1089,3 +1089,22 @@ 'sound/items/gas_mask/gas_mask_equip3.ogg', ) +/datum/sound_effect/generic_device_pickup + key = SFX_GENERIC_DEVICE_PICKUP + file_paths = list( + 'sound/items/generic_device/generic_device_pickup1.ogg', + 'sound/items/generic_device/generic_device_pickup2.ogg', + 'sound/items/generic_device/generic_device_pickup3.ogg', + 'sound/items/generic_device/generic_device_pickup4.ogg', + 'sound/items/generic_device/generic_device_pickup5.ogg', + ) + +/datum/sound_effect/generic_device_drop + key = SFX_GENERIC_DEVICE_DROP + file_paths = list( + 'sound/items/generic_device/generic_device_drop1.ogg', + 'sound/items/generic_device/generic_device_drop2.ogg', + 'sound/items/generic_device/generic_device_drop3.ogg', + 'sound/items/generic_device/generic_device_drop4.ogg', + 'sound/items/generic_device/generic_device_drop5.ogg', + ) diff --git a/code/modules/experisci/handheld_scanner.dm b/code/modules/experisci/handheld_scanner.dm index 67850aedd28..f89fda97f3f 100644 --- a/code/modules/experisci/handheld_scanner.dm +++ b/code/modules/experisci/handheld_scanner.dm @@ -11,6 +11,9 @@ icon_state = "experiscanner" lefthand_file = 'icons/mob/inhands/items/devices_lefthand.dmi' righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /obj/item/experi_scanner/Initialize(mapload) ..() diff --git a/code/modules/mod/modules/_module.dm b/code/modules/mod/modules/_module.dm index 17d72f2e68f..c2a43b6dd95 100644 --- a/code/modules/mod/modules/_module.dm +++ b/code/modules/mod/modules/_module.dm @@ -4,6 +4,9 @@ icon = 'icons/obj/clothing/modsuit/mod_modules.dmi' icon_state = "module" abstract_type = /obj/item/mod/module + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /// If it can be removed var/removable = TRUE /// If it's passive, togglable, usable or active diff --git a/code/modules/modular_computers/computers/item/pda.dm b/code/modules/modular_computers/computers/item/pda.dm index 0946903ee17..25ef899febb 100644 --- a/code/modules/modular_computers/computers/item/pda.dm +++ b/code/modules/modular_computers/computers/item/pda.dm @@ -31,6 +31,9 @@ shell_capacity = SHELL_CAPACITY_SMALL action_slots = ALL + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP ///The item currently inserted into the PDA, starts with a pen. var/obj/item/inserted_item = /obj/item/pen diff --git a/code/modules/pai/card.dm b/code/modules/pai/card.dm index 0c394227c6c..b5d2e183c9f 100644 --- a/code/modules/pai/card.dm +++ b/code/modules/pai/card.dm @@ -11,6 +11,9 @@ slot_flags = ITEM_SLOT_BELT w_class = WEIGHT_CLASS_SMALL worn_icon_state = "electronic" + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /// Spam alert prevention var/alert_cooldown diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index aab830e0304..696134e7893 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -263,6 +263,9 @@ righthand_file = 'icons/mob/inhands/items/devices_righthand.dmi' obj_flags = CONDUCTS_ELECTRICITY slot_flags = ITEM_SLOT_BELT + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /obj/item/dest_tagger/borg name = "cyborg destination tagger" diff --git a/code/modules/research/stock_parts.dm b/code/modules/research/stock_parts.dm index 5a2a2a47630..ffbf453f393 100644 --- a/code/modules/research/stock_parts.dm +++ b/code/modules/research/stock_parts.dm @@ -9,6 +9,9 @@ If you create T5+ please take a pass at mech_fabricator.dm. The parts being good ///The generic category type that the stock part belongs to. Generic objects that should not be instantiated should have the same type and abstract_type abstract_type = /obj/item/stock_parts w_class = WEIGHT_CLASS_SMALL + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP var/rating = 1 ///Used when a base part has a different name to higher tiers of part. For example, machine frames want any servo and not just a micro-servo. var/base_name diff --git a/code/modules/surgery/tools.dm b/code/modules/surgery/tools.dm index ec2c59bd640..7291157ba48 100644 --- a/code/modules/surgery/tools.dm +++ b/code/modules/surgery/tools.dm @@ -643,6 +643,9 @@ attack_verb_simple = list("pump", "siphon") tool_behaviour = TOOL_BLOODFILTER toolspeed = 1 + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /// Assoc list of chem ids to names, used for deciding which chems to filter when used for surgery var/list/whitelist = list() var/surgical_tray_overlay = "filter" diff --git a/code/modules/vehicles/mecha/mecha_parts.dm b/code/modules/vehicles/mecha/mecha_parts.dm index a8719eb1d4d..e0a31c762da 100644 --- a/code/modules/vehicles/mecha/mecha_parts.dm +++ b/code/modules/vehicles/mecha/mecha_parts.dm @@ -9,6 +9,9 @@ abstract_type = /obj/item/mecha_parts w_class = WEIGHT_CLASS_GIGANTIC obj_flags = CONDUCTS_ELECTRICITY + sound_vary = TRUE + pickup_sound = SFX_GENERIC_DEVICE_PICKUP + drop_sound = SFX_GENERIC_DEVICE_DROP /obj/item/mecha_parts/proc/try_attach_part(mob/user, obj/vehicle/sealed/mecha/M, attach_right = FALSE) //For attaching parts to a finished mech if(!user.transferItemToLoc(src, M)) diff --git a/sound/items/generic_device/attribution.txt b/sound/items/generic_device/attribution.txt new file mode 100644 index 00000000000..86532e8255b --- /dev/null +++ b/sound/items/generic_device/attribution.txt @@ -0,0 +1 @@ +generic_device sounds made by grungussuss, license: CC-BY-SA \ No newline at end of file diff --git a/sound/items/generic_device/generic_device_drop1.ogg b/sound/items/generic_device/generic_device_drop1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..b2974510021c0e1a27650e2edfcd60a7ea885f00 GIT binary patch literal 9558 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 literal 0 HcmV?d00001 diff --git a/sound/items/generic_device/generic_device_drop3.ogg b/sound/items/generic_device/generic_device_drop3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..d58e1dd736cc46d4f0d837f0b4ee575d9ed1d528 GIT binary patch literal 7153 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 literal 0 HcmV?d00001 diff --git a/sound/items/generic_device/generic_device_drop5.ogg b/sound/items/generic_device/generic_device_drop5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f272337c26e47714dfea1c3cc52842f70e543434 GIT binary patch literal 7597 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 literal 0 HcmV?d00001 diff --git a/sound/items/generic_device/generic_device_pickup1.ogg b/sound/items/generic_device/generic_device_pickup1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8d0c89d628e3e62ec17b802a77f7a51fff4ba66d GIT binary patch literal 8987 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�LHO)R=7z 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 literal 0 HcmV?d00001 diff --git a/sound/items/generic_device/generic_device_pickup3.ogg b/sound/items/generic_device/generic_device_pickup3.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f6dd7cb8002d62da6e43f1d26448349cc0b698c9 GIT binary patch literal 8041 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 Xfj(I|x*~tKZN-(`WC{tt=ZF3eZ2z4H literal 0 HcmV?d00001 diff --git a/sound/items/generic_device/generic_device_pickup5.ogg b/sound/items/generic_device/generic_device_pickup5.ogg new file mode 100644 index 0000000000000000000000000000000000000000..f4ed65563e10c2d40896b94d6a9b1f38e358cfb5 GIT binary patch literal 8644 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 literal 0 HcmV?d00001 From c729c3690a8e121d99a735ee854c3f32dbccb0e0 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Fri, 24 Oct 2025 07:42:34 +0000 Subject: [PATCH 11/33] Automatic changelog for PR #93536 [ci skip] --- html/changelogs/AutoChangeLog-pr-93536.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93536.yml diff --git a/html/changelogs/AutoChangeLog-pr-93536.yml b/html/changelogs/AutoChangeLog-pr-93536.yml new file mode 100644 index 00000000000..799e3518c09 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93536.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - sound: "added handling sounds for various devices" \ No newline at end of file From 97432bbdf72365a39ebcff39a3cb81e9fca2e2d5 Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:42:26 +0200 Subject: [PATCH 12/33] [NO GBP] Fixing the fish scanner UI (#93583) ## About The Pull Request Ok, I'm going to be real honest, somehow I've ended up thinking building two separate data lists for the same fish without associating them to a key or something when building tgui data would've worked, when in fact it doesn't. The ideal solution could've been to use refs, change the tsx code a fair bit and keep both static and non-static ui data procs, but it's also past AM here, I made a mistake, I don't have the mental capacity to do it right now and it's honestly just a insignificant micro-optimization, considering aquariums are (hard)coded to hold at most 20 fishes. Not a huge impact. TL;DR It's all ui_data now. ## Why It's Good For The Game Fixing the fish scanner UI. ## Changelog N/A until an issue report is (if) made. --- .../modules/fishing/aquarium/fish_analyzer.dm | 33 +++---------------- 1 file changed, 4 insertions(+), 29 deletions(-) diff --git a/code/modules/fishing/aquarium/fish_analyzer.dm b/code/modules/fishing/aquarium/fish_analyzer.dm index 35b01e1edc9..9202420ee1f 100644 --- a/code/modules/fishing/aquarium/fish_analyzer.dm +++ b/code/modules/fishing/aquarium/fish_analyzer.dm @@ -72,37 +72,30 @@ if(target != scanned_object) unregister_scanned() register_scanned(target) - update_static_data_for_all_viewers() ui_interact(user) return ITEM_INTERACT_SUCCESS /obj/item/fish_analyzer/proc/register_scanned(atom/target) scanned_object = target RegisterSignal(target, COMSIG_QDELETING, PROC_REF(on_target_deleted)) - if(HAS_TRAIT(target, TRAIT_IS_AQUARIUM)) - RegisterSignals(target, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_EXITED), PROC_REF(aquarium_update)) /obj/item/fish_analyzer/proc/unregister_scanned() if(!scanned_object) return - UnregisterSignal(scanned_object, list(COMSIG_QDELETING, COMSIG_ATOM_ENTERED, COMSIG_ATOM_AFTER_SUCCESSFUL_INITIALIZED_ON, COMSIG_ATOM_EXITED)) + UnregisterSignal(scanned_object, COMSIG_QDELETING) scanned_object = null /obj/item/fish_analyzer/proc/on_target_deleted() SIGNAL_HANDLER unregister_scanned() -/obj/item/fish_analyzer/proc/aquarium_update() - SIGNAL_HANDLER - //update static data on the next tick. to give time to offsprings to properly inherit the parents' traits and all. - addtimer(CALLBACK(src, TYPE_PROC_REF(/datum, update_static_data_for_all_viewers)), 0) - /obj/item/fish_analyzer/ui_interact(mob/user, datum/tgui/ui) if(isnull(scanned_object)) balloon_alert(user, "no specimen data!") return TRUE if(!(scanned_object in view(7, get_turf(src)))) balloon_alert(user, "specimen data lost!") + unregister_scanned() return TRUE ui = SStgui.try_update_ui(user, src, ui) @@ -117,25 +110,13 @@ return UI_CLOSE return ..() -/obj/item/fish_analyzer/ui_static_data(mob/user) +/obj/item/fish_analyzer/ui_data(mob/user) var/list/data = list() data["fish_list"] = list() data["fish_scanned"] = FALSE if(isfish(scanned_object)) data["fish_scanned"] = TRUE - return extract_static_fish_info(data, scanned_object) - - for(var/obj/item/fish/fishie in scanned_object) - extract_static_fish_info(data, fishie) - - return data - -/obj/item/fish_analyzer/ui_data(mob/user) - var/list/data = list() - data["fish_list"] = list() - - if(isfish(scanned_object)) return extract_fish_info(data, scanned_object) for(var/obj/item/fish/fishie in scanned_object) @@ -143,7 +124,7 @@ return data -/obj/item/fish_analyzer/proc/extract_static_fish_info(list/data, obj/item/fish/fishie) +/obj/item/fish_analyzer/proc/extract_fish_info(list/data, obj/item/fish/fishie) var/list/fish_traits = list() var/list/fish_evolutions = list() @@ -175,12 +156,6 @@ "fish_traits" = fish_traits, "fish_evolutions" = fish_evolutions, "fish_suitable_temp" = fishie.fish_flags & FISH_FLAG_SAFE_TEMPERATURE, - )) - - return data - -/obj/item/fish_analyzer/proc/extract_fish_info(list/data, obj/item/fish/fishie) - data["fish_list"] += list(list( "fish_health" = fishie.status == FISH_DEAD ? 0 : PERCENT(fishie.get_health_percentage()), "fish_size" = fishie.size, "fish_weight" = fishie.weight, From 133a796ae02b50527597f3f48ecb9ceaca355511 Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Fri, 24 Oct 2025 20:10:44 -0400 Subject: [PATCH 13/33] Fix flaky fish mount CI runtimes (#93602) ## About The Pull Request Holo fish were being selected as starting fish for fish mounts when they were coded not to be, I have no idea how this only started runtiming now but it did, I tested this fix and it produces a list without holo fish or the chrystarfish ## Why It's Good For The Game https://github.com/tgstation/tgstation/actions/runs/18764652594/attempts/1 ## Changelog N/A --- code/modules/fishing/fish_mount.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/fishing/fish_mount.dm b/code/modules/fishing/fish_mount.dm index 491abe25ce7..3f5671e653e 100644 --- a/code/modules/fishing/fish_mount.dm +++ b/code/modules/fishing/fish_mount.dm @@ -69,7 +69,8 @@ return ITEM_INTERACT_SUCCESS /obj/structure/fish_mount/proc/add_first_fish() - var/obj/item/fish/fish_path = pick(subtypesof(/obj/item/fish) - list(typesof(/obj/item/fish/holo) + list(/obj/item/fish/starfish/chrystarfish))) // chrystarfish immediately shatters when placed + var/list/valid_picks = subtypesof(/obj/item/fish) - typesof(/obj/item/fish/holo) - /obj/item/fish/starfish/chrystarfish // chrystarfish immediately shatters when placed + var/obj/item/fish/fish_path = pick(valid_picks) if(fish_path.fish_id_redirect_path) fish_path = fish_path.fish_id_redirect_path var/fluff_name = pick("John Trasen III", "a nameless intern", "Pun Pun", AQUARIUM_COMPANY, "Unknown", "Central Command") From 49c373da342138201987a6fbd57ac1a39bfad39b Mon Sep 17 00:00:00 2001 From: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Date: Sat, 25 Oct 2025 02:17:59 +0200 Subject: [PATCH 14/33] Resprites boulder platforms and adds smoothing to them (#93588) ## About The Pull Request Changes platforms to a more topdown perspective to be in line with lava turfs and adds smoothing to them, ensuring that they always take up all the space on their lava tile but don't go onto basalt dreamseeker_07DHZsrM1C ## Why It's Good For The Game Currently large sections of platforms look a bit jank, as can be seen in the original vent platform PR 489234293-9c222c28-f63a-4955-b4b4-c600e934c0c9 This should make it much easier to discern which tiles are safe to step on during hectic combat of vent defense ## Changelog :cl: image: Boulder platforms spawned by throwing boulders on lava or activating vents now have new sprites that smooth together /:cl: --- code/__DEFINES/icon_smoothing.dm | 2 ++ code/game/objects/structures/lattice.dm | 16 +++++++--------- icons/obj/ore.dmi | Bin 11084 -> 10149 bytes .../smooth_structures/boulder_platform.dmi | Bin 0 -> 6839 bytes .../smooth_structures/boulder_platform.png | Bin 0 -> 1716 bytes .../boulder_platform.png.toml | 2 ++ 6 files changed, 11 insertions(+), 9 deletions(-) create mode 100644 icons/obj/smooth_structures/boulder_platform.dmi create mode 100644 icons/obj/smooth_structures/boulder_platform.png create mode 100644 icons/obj/smooth_structures/boulder_platform.png.toml diff --git a/code/__DEFINES/icon_smoothing.dm b/code/__DEFINES/icon_smoothing.dm index ff27bbd65dc..63a7b2b2f93 100644 --- a/code/__DEFINES/icon_smoothing.dm +++ b/code/__DEFINES/icon_smoothing.dm @@ -219,6 +219,8 @@ DEFINE_BITFIELD(smoothing_junction, list( #define SMOOTH_GROUP_PLATFORMS_PIZZA S_OBJ(85) ///obj/structure/platform/pizza #define SMOOTH_GROUP_PLATFORMS_PAPER S_OBJ(86) ///obj/structure/platform/paper +#define SMOOTH_GROUP_BOULDER_PLATFORM S_OBJ(89) ///obj/structure/lattice/catwalk/boulder + /// Performs the work to set smoothing_groups and canSmoothWith. /// An inlined function used in both turf/Initialize and atom/Initialize. #define SETUP_SMOOTHING(...) \ diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 34279684ce1..4791a50f6fe 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -196,12 +196,11 @@ /obj/structure/lattice/catwalk/boulder name = "boulder platform" desc = "A boulder, floating on the molten hot deadly lava. More like a BOATlder." - icon = 'icons/obj/ore.dmi' - icon_state = "boulder_platform" + icon = 'icons/obj/smooth_structures/boulder_platform.dmi' + icon_state = "boulder_platform-0" base_icon_state = "boulder_platform" - smoothing_flags = NONE - smoothing_groups = null - canSmoothWith = null + smoothing_groups = SMOOTH_GROUP_BOULDER_PLATFORM + canSmoothWith = SMOOTH_GROUP_BOULDER_PLATFORM + SMOOTH_GROUP_FLOOR_LAVA build_material = null /// The type of particle to make before the platform collapses. var/warning_particle = /particles/smoke/ash @@ -224,10 +223,9 @@ . = ..() /obj/structure/lattice/catwalk/boulder/proc/pre_self_destruct() - if(istype(loc, /turf/open/lava/plasma)) - add_overlay("plasma_cracks") - else - add_overlay("lava_cracks") + var/mutable_appearance/cracks_overlay = mutable_appearance('icons/obj/ore.dmi', istype(loc, /turf/open/lava/plasma) ? "plasma_cracks" : "lava_cracks", src) + cracks_overlay.blend_mode = BLEND_INSET_OVERLAY + add_overlay(cracks_overlay) animate(src, alpha = 0, time = 2 SECONDS, pixel_y = -16, easing = QUAD_EASING|EASE_IN) addtimer(CALLBACK(src, PROC_REF(self_destruct)), 2 SECONDS) diff --git a/icons/obj/ore.dmi b/icons/obj/ore.dmi index 5346161a9e7b975c8f6158ba4f01fb3b51156e4e..81a7cb03fdf2fdd05621ad883949da8b3d09769b 100644 GIT binary patch literal 10149 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

J$TwZ<8v>n} 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 Fe*vYN?STLQ literal 11084 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 diff --git a/icons/obj/smooth_structures/boulder_platform.dmi b/icons/obj/smooth_structures/boulder_platform.dmi new file mode 100644 index 0000000000000000000000000000000000000000..34c99f2dd5cea8c3481b84857d5d70e8eb0cba1c GIT binary patch literal 6839 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 CcP~}| literal 0 HcmV?d00001 diff --git a/icons/obj/smooth_structures/boulder_platform.png b/icons/obj/smooth_structures/boulder_platform.png new file mode 100644 index 0000000000000000000000000000000000000000..ac31e2b79befb5055e41e1ff92adae1973ace820 GIT binary patch literal 1716 zcmV;l221&gP)001Be1^@s6m49>f00001b5ch_0Itp) z=>Px*Zb?KzRCt{2TRl(XSQI^3ZH1r(WQm9Zi6U+hG&G>_7ZBBG#DAD(wH2b_KSa@1 zt8J#C1F_9E$wbpZfkc5E$s)8MT5qvA*5UH(*ohs-T8@N7Y{%!_ckjDj?*;h8Cq9u6 z7w2bD)nljvRm)ul|1U+quuNQ>pG6nvXVKm5?T72G=jJ`WvQV|$W%Ad?06777x3>sK zVJtka>*wp6E9kX4qiVU!=5G`=(6T{+!%>JJ7-DZ{7cJk1u1bF9GXM}iJ>%u|tu}HJ zUrvsra1^3_c!X)>KK*(M0QmOX?^DS>FaFvn=F7=(WCagLA-pvYE#C(KT;E*5Tl3Hx z^Z@|(508zN<)x@j21xJWk~0r1i=u!K_8uN z2c2#Q?ZYDgz~0Vo{M|YkU;AJ`4tIol6)rShcU|Lk!scy@#y_)iF3!)QY2AEQY;SEw z&E^IG#4EAo`?1F(dV@ar-1Xo8)W+}#mz;$4LR7pp7KP4L79CZ=|LdedCBfyY%R>0{ z42(S+4bKY8`&_YKPL88L{`{*DBc!ZZl*m+Jnng)DPrshx`sOOW?yY%oIOBDdpB~DB z`5SdKNscP`r&5rXSr?_t__G)?y^zYM ziiaq?+1$t+5!#1G@%^*~GH?Ew4A53aWf~!scYSk(AQ+oJ0CnUTM_z>Bm=N=+Qps5j|mZ><@@M#JMlcZ zB12XDxpF|Raw_^_3_o16_JN|IwgtkFWsN%AYNkd_g{Q5akx8}#F5D1~8SZ~IQ2ZYOSjatkl3jQW|| zecqZESB2{FRc4rl=i0Jj1W9Vzs+?u;Gric`*?kvgtLD#b9Q?9|D=o!Q;0Y9)cWMq& zMlVp05xL$4X})Il$a*cw3%KMggP-rQ`l*tCDkEXI;(%xjy&pdd-Tc?Q%;q3OS}!nb z{%Lz)n)?toEV;sz9iL6YkzfEWIrH)(p%>@kcl98v;-7ji`2OLsq291)%Y4a_Y%xS$i9qXd;7jhuA z>_eZd!h3^$rpjyDg9w!4{^79^K0V|6SCvYe$CSkx|zhSYhSuC@i9=3BZAn$~ZF6a;xvkt+D7 zE<)xFZpFDyX4u1$MPlsn3V&}JAApD+)?5EikuK%iQ_0#ijy;y6=vXBFg*QOkop+tg z&=b-@Fhmdx(LUIZ>Ub<4@?$D3X6%kc+96SWej2YmPyU5B!0(rr@YYx3Lyfl0a(8?C zt_P Date: Sat, 25 Oct 2025 00:18:27 +0000 Subject: [PATCH 15/33] Automatic changelog for PR #93588 [ci skip] --- html/changelogs/AutoChangeLog-pr-93588.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93588.yml diff --git a/html/changelogs/AutoChangeLog-pr-93588.yml b/html/changelogs/AutoChangeLog-pr-93588.yml new file mode 100644 index 00000000000..619dfe29ae2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93588.yml @@ -0,0 +1,4 @@ +author: "SmArtKar" +delete-after: True +changes: + - image: "Boulder platforms spawned by throwing boulders on lava or activating vents now have new sprites that smooth together" \ No newline at end of file From 1e4c6bec27d66097c04a8b516d91d8fd83860cc2 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 00:28:38 +0000 Subject: [PATCH 16/33] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-93536.yml | 4 ---- html/changelogs/AutoChangeLog-pr-93561.yml | 4 ---- html/changelogs/AutoChangeLog-pr-93563.yml | 4 ---- html/changelogs/AutoChangeLog-pr-93588.yml | 4 ---- html/changelogs/archive/2025-10.yml | 9 +++++++++ 5 files changed, 9 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-93536.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93561.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93563.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-93588.yml diff --git a/html/changelogs/AutoChangeLog-pr-93536.yml b/html/changelogs/AutoChangeLog-pr-93536.yml deleted file mode 100644 index 799e3518c09..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93536.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - sound: "added handling sounds for various devices" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93561.yml b/html/changelogs/AutoChangeLog-pr-93561.yml deleted file mode 100644 index 1c0e052f73d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93561.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed PKC mark effect being offset to the side when applied to some mobs." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93563.yml b/html/changelogs/AutoChangeLog-pr-93563.yml deleted file mode 100644 index c56716dbfbd..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93563.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "MGOOOOOO" -delete-after: True -changes: - - bugfix: "Sterilizine will now correctly apply its 20% surgery speed bonus." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-93588.yml b/html/changelogs/AutoChangeLog-pr-93588.yml deleted file mode 100644 index 619dfe29ae2..00000000000 --- a/html/changelogs/AutoChangeLog-pr-93588.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - image: "Boulder platforms spawned by throwing boulders on lava or activating vents now have new sprites that smooth together" \ No newline at end of file diff --git a/html/changelogs/archive/2025-10.yml b/html/changelogs/archive/2025-10.yml index c06f086cc31..8c8fc28ec4c 100644 --- a/html/changelogs/archive/2025-10.yml +++ b/html/changelogs/archive/2025-10.yml @@ -791,3 +791,12 @@ - code_imp: cleaned up wall mount code TheNobodyofimportance: - balance: Vomit drinking now checks for fly mouth instead of fly species +2025-10-25: + MGOOOOOO: + - bugfix: Sterilizine will now correctly apply its 20% surgery speed bonus. + SmArtKar: + - bugfix: Fixed PKC mark effect being offset to the side when applied to some mobs. + - image: Boulder platforms spawned by throwing boulders on lava or activating vents + now have new sprites that smooth together + grungussuss: + - sound: added handling sounds for various devices From 350e546bb13fd4b4f8b9af368a73bc86e3d29b76 Mon Sep 17 00:00:00 2001 From: Time-Green <7501474+Time-Green@users.noreply.github.com> Date: Sat, 25 Oct 2025 11:29:42 +0200 Subject: [PATCH 17/33] Fixes planet_allergy effect not going away (#93585) --- code/datums/components/space_allergy.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/datums/components/space_allergy.dm b/code/datums/components/space_allergy.dm index 595c5fc0dfa..a89161cfb77 100644 --- a/code/datums/components/space_allergy.dm +++ b/code/datums/components/space_allergy.dm @@ -18,6 +18,8 @@ SIGNAL_HANDLER if(is_on_a_planet(parent) && parent.has_gravity()) - allergy = parent.apply_status_effect(/datum/status_effect/planet_allergy) //your gamer body cant stand real gravity < Soul + var/status_effect = parent.apply_status_effect(/datum/status_effect/planet_allergy) //your gamer body cant stand real gravity < Soul + if(status_effect) + allergy = status_effect else QDEL_NULL(allergy) From 32ac50e09f1363186de3df0ef4a79dab86ad5a66 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 09:30:05 +0000 Subject: [PATCH 18/33] Automatic changelog for PR #93585 [ci skip] --- html/changelogs/AutoChangeLog-pr-93585.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93585.yml diff --git a/html/changelogs/AutoChangeLog-pr-93585.yml b/html/changelogs/AutoChangeLog-pr-93585.yml new file mode 100644 index 00000000000..a62e8e58b2b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93585.yml @@ -0,0 +1,4 @@ +author: "Time-Green" +delete-after: True +changes: + - bugfix: "Voidwalker's 'planet allergy' effect goes away again when you leave a planet" \ No newline at end of file From 9419336c0308f2d50812102fb877899b7f51b6b0 Mon Sep 17 00:00:00 2001 From: JoJe3003 Date: Sat, 25 Oct 2025 11:33:56 +0200 Subject: [PATCH 19/33] Fixes admin spawn panel search not updating on search mode toggle (#93562) --- .../packages/tgui/interfaces/SpawnPanel/CreateObject.tsx | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tgui/packages/tgui/interfaces/SpawnPanel/CreateObject.tsx b/tgui/packages/tgui/interfaces/SpawnPanel/CreateObject.tsx index ab6004dafc5..8e7064d4257 100644 --- a/tgui/packages/tgui/interfaces/SpawnPanel/CreateObject.tsx +++ b/tgui/packages/tgui/interfaces/SpawnPanel/CreateObject.tsx @@ -1,5 +1,5 @@ import { storage } from 'common/storage'; -import { useEffect, useState } from 'react'; +import { useCallback, useEffect, useState } from 'react'; import { Button, DmIcon, @@ -55,10 +55,15 @@ export function CreateObject(props: CreateObjectProps) { const currentList = objList; const currentType = allObjects[data.copied_type ?? '']?.type || 'Objects'; + const getSearchString = useCallback( + (key: string) => (searchBy ? key : allObjects[key]?.name || ''), + [searchBy, allObjects], + ); + const { query, setQuery, results } = useFuzzySearch({ searchArray: Object.keys(allObjects), matchStrategy: 'smart', - getSearchString: (key) => (searchBy ? key : allObjects[key]?.name || ''), + getSearchString, }); const filteredResults = results.filter((obj) => { From b8a6da7ecfe34a73db860a8e5b32f49f45e68a92 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 09:34:22 +0000 Subject: [PATCH 20/33] Automatic changelog for PR #93562 [ci skip] --- html/changelogs/AutoChangeLog-pr-93562.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93562.yml diff --git a/html/changelogs/AutoChangeLog-pr-93562.yml b/html/changelogs/AutoChangeLog-pr-93562.yml new file mode 100644 index 00000000000..8d9d9de7fcf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93562.yml @@ -0,0 +1,4 @@ +author: "JoJe3003" +delete-after: True +changes: + - bugfix: "Admin spawn panel toggle \"By name\"/\"By type\" updates search results without having to update the search string." \ No newline at end of file From ff3ac12e6e12d410c5f671d797fa8185fadf9d2a Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Sat, 25 Oct 2025 05:40:55 -0400 Subject: [PATCH 21/33] Removes f (#93597) --- code/modules/antagonists/heretic/status_effects/debuffs.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/antagonists/heretic/status_effects/debuffs.dm b/code/modules/antagonists/heretic/status_effects/debuffs.dm index 0e840f485cd..2939f2066a8 100644 --- a/code/modules/antagonists/heretic/status_effects/debuffs.dm +++ b/code/modules/antagonists/heretic/status_effects/debuffs.dm @@ -157,7 +157,6 @@ /datum/status_effect/star_mark/extended duration = 3 MINUTES -f /// Used by moon heretics to make people mad /datum/status_effect/moon_converted From ebc3271c59585f46c3025dcc37b972c57ada202d Mon Sep 17 00:00:00 2001 From: Roxy <75404941+TealSeer@users.noreply.github.com> Date: Sat, 25 Oct 2025 05:41:12 -0400 Subject: [PATCH 22/33] Fix eye organ runtimes in on_mob_remove (#93599) --- code/modules/surgery/organs/internal/eyes/_eyes.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/surgery/organs/internal/eyes/_eyes.dm b/code/modules/surgery/organs/internal/eyes/_eyes.dm index 9306abf8f63..fd548cb0e7c 100644 --- a/code/modules/surgery/organs/internal/eyes/_eyes.dm +++ b/code/modules/surgery/organs/internal/eyes/_eyes.dm @@ -155,9 +155,9 @@ organ_owner.remove_status_effect(/datum/status_effect/temporary_blindness) if (scarring) - owner.cure_nearsighted(TRAIT_RIGHT_EYE_SCAR) - owner.cure_nearsighted(TRAIT_LEFT_EYE_SCAR) - owner.cure_blind(EYE_SCARRING_TRAIT) + organ_owner.cure_nearsighted(TRAIT_RIGHT_EYE_SCAR) + organ_owner.cure_nearsighted(TRAIT_LEFT_EYE_SCAR) + organ_owner.cure_blind(EYE_SCARRING_TRAIT) organ_owner.update_tint() organ_owner.update_sight() From 03946f53e58523a24cd0690b7711dd56a3eb0102 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 09:41:18 +0000 Subject: [PATCH 23/33] Automatic changelog for PR #93597 [ci skip] --- html/changelogs/AutoChangeLog-pr-93597.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93597.yml diff --git a/html/changelogs/AutoChangeLog-pr-93597.yml b/html/changelogs/AutoChangeLog-pr-93597.yml new file mode 100644 index 00000000000..5ede190b21a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93597.yml @@ -0,0 +1,4 @@ +author: "TealSeer" +delete-after: True +changes: + - code_imp: "removed f" \ No newline at end of file From 72cd764be9a567ac2407b1f9697efea4f77798be Mon Sep 17 00:00:00 2001 From: Ghom <42542238+Ghommie@users.noreply.github.com> Date: Sat, 25 Oct 2025 11:42:21 +0200 Subject: [PATCH 24/33] Check that apply_qualities is TRUE before the fish_population unit test (#93619) --- code/modules/fishing/fish/_fish.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index 04c7434ce99..f46b31086a9 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -232,7 +232,7 @@ GLOBAL_LIST_INIT(fish_compatible_fluid_types, list( register_context() register_item_context() - if(!PERFORM_ALL_TESTS(focus_only/fish_population) || type == abstract_type || stable_population > 1) + if(!apply_qualities || !PERFORM_ALL_TESTS(focus_only/fish_population) || type == abstract_type || stable_population > 1) return if(length(compatible_types)) for(var/obj/item/fish/fishie as anything in compatible_types) From e85167689aed14f9112d83c6ea55fb2d7e18d443 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 07:11:34 -0400 Subject: [PATCH 25/33] Build(deps): Bump actions/upload-artifact from 4 to 5 (#93616) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.

Release notes

Sourced from actions/upload-artifact's releases.

v5.0.0

What's Changed

BREAKING CHANGE: this update supports Node v24.x. This is not a breaking change per-se but we're treating it as such.

New Contributors

Full Changelog: https://github.com/actions/upload-artifact/compare/v4...v5.0.0

v4.6.2

What's Changed

New Contributors

Full Changelog: https://github.com/actions/upload-artifact/compare/v4...v4.6.2

v4.6.1

What's Changed

Full Changelog: https://github.com/actions/upload-artifact/compare/v4...v4.6.1

v4.6.0

What's Changed

Full Changelog: https://github.com/actions/upload-artifact/compare/v4...v4.6.0

v4.5.0

What's Changed

New Contributors

... (truncated)

Commits
  • 330a01c Merge pull request #734 from actions/danwkennedy/prepare-5.0.0
  • 03f2824 Update github.dep.yml
  • 905a1ec Prepare v5.0.0
  • 2d9f9cd Merge pull request #725 from patrikpolyak/patch-1
  • 9687587 Merge branch 'main' into patch-1
  • 2848b2c Merge pull request #727 from danwkennedy/patch-1
  • 9b51177 Spell out the first use of GHES
  • cd231ca Update GHES guidance to include reference to Node 20 version
  • de65e23 Merge pull request #712 from actions/nebuk89-patch-1
  • 8747d8c Update README.md
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/upload-artifact&package-manager=github_actions&previous-version=4&new-version=5)](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) ---
Dependabot commands and options
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 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)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/compare_screenshots.yml | 2 +- .github/workflows/run_integration_tests.yml | 2 +- .github/workflows/setup_build_artifact.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/compare_screenshots.yml b/.github/workflows/compare_screenshots.yml index d9fdaa2b1ff..497dac9f4d9 100644 --- a/.github/workflows/compare_screenshots.yml +++ b/.github/workflows/compare_screenshots.yml @@ -34,7 +34,7 @@ jobs: echo ${{ github.event.pull_request.number }} > artifacts/screenshot_comparisons/pull_request_number.txt - name: Upload bad screenshots if: failure() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: bad-screenshots path: artifacts/screenshot_comparisons diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index e50b47324e3..c02a7642a6c 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -63,7 +63,7 @@ jobs: bash tools/ci/run_server.sh ${{ inputs.map }} - name: Upload screenshot tests if: always() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: test_artifacts_${{ inputs.map }}_${{ inputs.major }}_${{ inputs.minor }} path: data/screenshots_new/ diff --git a/.github/workflows/setup_build_artifact.yml b/.github/workflows/setup_build_artifact.yml index aaf4cfb4553..3cbfd8f39d9 100644 --- a/.github/workflows/setup_build_artifact.yml +++ b/.github/workflows/setup_build_artifact.yml @@ -35,7 +35,7 @@ jobs: bash tools/ci/copy_build_output.sh $OUTPUT_DIR - name: Upload artifact if: success() - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: build-artifact-${{ inputs.major }}-${{ inputs.minor }} path: ${{ env.OUTPUT_DIR }} From cb1b167613af8b9717882e435c9d06f49ae0caed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 07:11:53 -0400 Subject: [PATCH 26/33] Build(deps): Bump actions/download-artifact from 5 to 6 (#93617) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6.
Release notes

Sourced from actions/download-artifact's releases.

v6.0.0

What's Changed

BREAKING CHANGE: this update supports Node v24.x. This is not a breaking change per-se but we're treating it as such.

New Contributors

Full Changelog: https://github.com/actions/download-artifact/compare/v5...v6.0.0

Commits
  • 018cc2c Merge pull request #438 from actions/danwkennedy/prepare-6.0.0
  • 815651c Revert "Remove github.dep.yml"
  • bb3a066 Remove github.dep.yml
  • fa1ce46 Prepare v6.0.0
  • 4a24838 Merge pull request #431 from danwkennedy/patch-1
  • 5e3251c Readme: spell out the first use of GHES
  • abefc31 Merge pull request #424 from actions/yacaovsnc/update_readme
  • ac43a60 Update README with artifact extraction details
  • de96f46 Merge pull request #417 from actions/yacaovsnc/update_readme
  • 7993cb4 Remove migration guide for artifact download changes
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/download-artifact&package-manager=github_actions&previous-version=5&new-version=6)](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) ---
Dependabot commands and options
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 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)
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/compare_screenshots.yml | 2 +- .github/workflows/run_integration_tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/compare_screenshots.yml b/.github/workflows/compare_screenshots.yml index 497dac9f4d9..87c9b96a6d9 100644 --- a/.github/workflows/compare_screenshots.yml +++ b/.github/workflows/compare_screenshots.yml @@ -13,7 +13,7 @@ jobs: run: mkdir -p artifacts # If we ever add more artifacts, this is going to break, but it'll be obvious. - name: Download screenshot tests - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: path: artifacts - name: ls -R diff --git a/.github/workflows/run_integration_tests.yml b/.github/workflows/run_integration_tests.yml index c02a7642a6c..bac8e24ec7a 100644 --- a/.github/workflows/run_integration_tests.yml +++ b/.github/workflows/run_integration_tests.yml @@ -36,7 +36,7 @@ jobs: major: ${{ inputs.major }} minor: ${{ inputs.minor }} - name: Download build outputs - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 with: name: build-artifact-${{ inputs.major || env.BYOND_MAJOR }}-${{ inputs.minor || env.BYOND_MINOR}} path: ./ From b3f204099bacd04787382dfe7fd8d8182d344e9a Mon Sep 17 00:00:00 2001 From: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Date: Sat, 25 Oct 2025 06:19:32 -0500 Subject: [PATCH 27/33] Display slowest unit tests in CL (#93587) ## About The Pull Request Compiles and displays a sorted list of unit times by run length at the end of all the unit tests. image image Right now its just if its longer then 1 second but I could make it break after like 10 entries. ## Why It's Good For The Game Makes it way easier to spot ABNORMALLY slow unit tests. I understand that there is not a ton of optimization that can be made for some of these. ## Changelog N/A --------- Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> --- code/modules/unit_tests/unit_test.dm | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm index 9a318938143..1fdafe33017 100644 --- a/code/modules/unit_tests/unit_test.dm +++ b/code/modules/unit_tests/unit_test.dm @@ -18,6 +18,8 @@ GLOBAL_LIST_EMPTY(unit_test_mapping_logs) /// Global assoc list of required mapping items, [item typepath] to [required item datum]. GLOBAL_LIST_EMPTY(required_map_items) +GLOBAL_LIST_EMPTY(test_run_times) + /// A list of every test that is currently focused. /// Use the PERFORM_ALL_TESTS macro instead. GLOBAL_VAR_INIT(focused_tests, focused_tests()) @@ -237,6 +239,8 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) log_test(message) test_output_desc += " [duration / 10]s" + if(duration > 10) + GLOB.test_run_times[test_path] = duration if (test.succeeded) log_world("[TEST_OUTPUT_GREEN("PASS")] [test_output_desc]") @@ -394,6 +398,12 @@ GLOBAL_VAR_INIT(focused_tests, focused_tests()) RunUnitTest(unit_path, test_results) SSticker.delay_end = FALSE + log_world("::group::Expensive Unit Test Times") + sortTim(GLOB.test_run_times, cmp = GLOBAL_PROC_REF(cmp_numeric_dsc), associative = TRUE) + for(var/type, duration in GLOB.test_run_times) + log_world("[type] took [duration/10]s") + log_world("::endgroup::") + var/file_name = "data/unit_tests.json" fdel(file_name) file(file_name) << json_encode(test_results) From 86a98efa77757a4e7900a49f5c5cf6d16399e665 Mon Sep 17 00:00:00 2001 From: mcbalaam <104003807+mcbalaam@users.noreply.github.com> Date: Sun, 26 Oct 2025 01:45:58 +0700 Subject: [PATCH 28/33] feat: exodrone console UI (#93604) Upgrades the UI of the exodrone console Exodrones now create a small explosion (0, 0, 1, 1) when self-destruction is triggered --- .../modules/explorer_drone/control_console.dm | 7 +- code/modules/explorer_drone/exodrone.dm | 9 +- code/modules/explorer_drone/scanner_array.dm | 1 + .../tgui/interfaces/ExodroneConsole.tsx | 403 ++++++++++-------- 4 files changed, 239 insertions(+), 181 deletions(-) diff --git a/code/modules/explorer_drone/control_console.dm b/code/modules/explorer_drone/control_console.dm index 78451dd71a1..21c64757bc1 100644 --- a/code/modules/explorer_drone/control_console.dm +++ b/code/modules/explorer_drone/control_console.dm @@ -23,16 +23,18 @@ RegisterSignal(controlled_drone,COMSIG_QDELETING, PROC_REF(drone_destroyed)) RegisterSignal(controlled_drone,COMSIG_EXODRONE_STATUS_CHANGED, PROC_REF(on_exodrone_status_changed)) update_icon() + playsound(src, 'sound/machines/terminal/terminal_on.ogg', 20, vary = TRUE) /obj/machinery/computer/exodrone_control_console/proc/on_exodrone_status_changed() SIGNAL_HANDLER //Notify we need human action and switch screeb icon to alert. - playsound(src,'sound/machines/ping.ogg',30,FALSE) + playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 20, vary = TRUE) update_icon() /obj/machinery/computer/exodrone_control_console/proc/drone_destroyed() SIGNAL_HANDLER signal_lost = TRUE + playsound(src, 'sound/machines/terminal/terminal_alert.ogg', 20, vary = TRUE) end_drone_control() /obj/machinery/computer/exodrone_control_console/proc/end_drone_control() @@ -41,6 +43,7 @@ UnregisterSignal(controlled_drone,list(COMSIG_QDELETING,COMSIG_EXODRONE_STATUS_CHANGED)) controlled_drone = null update_icon() + playsound(src, 'sound/machines/terminal/terminal_off.ogg', 20, vary = TRUE) /obj/machinery/computer/exodrone_control_console/Destroy() . = ..() @@ -114,7 +117,7 @@ signal_lost = FALSE return TRUE if("self_destruct") - qdel(controlled_drone) //var will be nulled in signal response + controlled_drone.handle_deconstruct() return TRUE if("add_tool") if(controlled_drone && controlled_drone.drone_status == EXODRONE_IDLE) diff --git a/code/modules/explorer_drone/exodrone.dm b/code/modules/explorer_drone/exodrone.dm index e0b1aec07b2..08fc0ae9142 100644 --- a/code/modules/explorer_drone/exodrone.dm +++ b/code/modules/explorer_drone/exodrone.dm @@ -76,9 +76,14 @@ GLOBAL_LIST_EMPTY(exodrone_launchers) // Cargo storage create_storage(max_slots = EXODRONE_CARGO_SLOTS, canthold = GLOB.blacklisted_cargo_types) -/obj/item/exodrone/Destroy() +/obj/item/exodrone/handle_deconstruct(disassembled) . = ..() + explosion(src, 0, 0, 1, 1) + do_sparks(5, FALSE, src) + +/obj/item/exodrone/Destroy() GLOB.exodrones -= src + . = ..() /// Description for drone listing, describes location and current status /obj/item/exodrone/proc/ui_description() @@ -337,7 +342,7 @@ GLOBAL_LIST_EMPTY(exodrone_launchers) /obj/item/exodrone/proc/drone_log(message) if(length(drone_log) > EXODRONE_LOG_SIZE) - drone_log = list() + drone_log.Remove() drone_log.Insert(1,message) /obj/item/exodrone/proc/has_tool(tool_type) diff --git a/code/modules/explorer_drone/scanner_array.dm b/code/modules/explorer_drone/scanner_array.dm index 7588eae233a..237c3aee606 100644 --- a/code/modules/explorer_drone/scanner_array.dm +++ b/code/modules/explorer_drone/scanner_array.dm @@ -175,6 +175,7 @@ GLOBAL_LIST_INIT(scan_conditions,init_scan_conditions()) var/datum/exoscan/scan = GLOB.exoscanner_controller.create_scan(scan_type,target) if(scan) RegisterSignal(scan, COMSIG_EXOSCAN_INTERRUPTED, PROC_REF(scan_failed)) + playsound(src, 'sound/machines/terminal/terminal_processing.ogg', 20, vary = TRUE) /obj/machinery/computer/exoscanner_control/proc/scan_failed() SIGNAL_HANDLER diff --git a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx index b7caeeb4773..8b819187d1d 100644 --- a/tgui/packages/tgui/interfaces/ExodroneConsole.tsx +++ b/tgui/packages/tgui/interfaces/ExodroneConsole.tsx @@ -18,6 +18,7 @@ import { ProgressBar, Section, Stack, + Tooltip, } from 'tgui-core/components'; import { formatTime } from 'tgui-core/format'; import { capitalize } from 'tgui-core/string'; @@ -215,11 +216,7 @@ const SignalLostModal = (props) => { - @@ -279,39 +276,52 @@ const ToolSelectionModal = (props) => { const toolData = Object.keys(all_tools); return ( - - - Select Tool: - - - {(!!toolData && - toolData.map((tool_name) => ( - - - - ))) || ( - - + +
{ + setChoosingTools(false); + }} + /> + } + > + + {(!!toolData && + toolData.map((tool_name) => ( + + + + {' '} + + + )} + +
); }; @@ -325,32 +335,33 @@ const EquipmentBox = (props: { cargo: CargoData; drone: DroneData }) => { switch (cargo.type) { case 'tool': // Tool icon+Remove button if configurable return ( - + + + + - + {capitalize(cargo.name)} + {!!configurable && ( - + - - - { -
+
setChoosingTools(true)} + /> + ) + } + > - {!!configurable && ( - - )} - - - + {cargo.map((cargo_element, index) => ( { ); }; -const DroneStatus = (props: { - drone_integrity: number; - drone_max_integrity: number; -}) => { - const { drone_integrity, drone_max_integrity } = props; - - return ( - - - Integrity: - - - - - - ); -}; - const NoSiteDimmer = () => { return ( @@ -560,12 +618,7 @@ const TravelTargetSelectionScreen = (props: { Cancel )} - - - + } > @@ -582,8 +635,9 @@ const TravelTargetSelectionScreen = (props: { ml={1} onClick={() => travel_to(null)} disabled={!can_travel} + icon={can_travel ? 'rocket' : 'triangle-exclamation'} > - {can_travel ? 'Launch!' : travel_error} + {can_travel ? 'Launch' : travel_error} } @@ -600,8 +654,9 @@ const TravelTargetSelectionScreen = (props: { ml={1} onClick={() => travel_to(destination.ref)} disabled={!can_travel} + icon={can_travel ? 'rocket' : 'triangle-exclamation'} > - {can_travel ? 'Launch!' : travel_error} + {can_travel ? 'Launch' : travel_error} } @@ -681,16 +736,7 @@ const ExplorationScreen = (props: { drone: DroneExploration & DroneData }) => { ); } return ( -
- } - > +
@@ -704,11 +750,21 @@ const ExplorationScreen = (props: { drone: DroneExploration & DroneData }) => { - + {site.events.map((e) => ( +
@@ -728,16 +791,7 @@ const EventScreen = (props: { drone: DroneData; event: FullEventData }) => { const { drone, event } = props; return ( -
- } - > +
@@ -749,7 +803,9 @@ const EventScreen = (props: { drone: DroneData; event: FullEventData }) => { /> -
{event.description}
+
+ {event.description} +
@@ -791,18 +847,7 @@ export const AdventureScreen = (props: { const rawData = adventure_data.raw_image; const imgSource = rawData ? rawData : resolveAsset(adventure_data.image); return ( -
- ) - } - > +
@@ -882,21 +927,25 @@ const ExodroneConsoleContent = (props) => { - + + + + + +
+ + {drone_log.map((log_line, ix) => ( + + {log_line} + + ))} + +
+
+
- -
- - {drone_log.map((log_line, ix) => ( - - {log_line} - - ))} - -
-
); }; From 15f0356620c43f25fd5898041348951bad6f258f Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 18:46:26 +0000 Subject: [PATCH 29/33] Automatic changelog for PR #93604 [ci skip] --- html/changelogs/AutoChangeLog-pr-93604.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93604.yml diff --git a/html/changelogs/AutoChangeLog-pr-93604.yml b/html/changelogs/AutoChangeLog-pr-93604.yml new file mode 100644 index 00000000000..4bf5632f91d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93604.yml @@ -0,0 +1,5 @@ +author: "mcbalaam" +delete-after: True +changes: + - qol: "Better exodrone console UI" + - rscadd: "Exodrones now create a small explosion (0, 0, 1, 1) when self-destruction is triggered" \ No newline at end of file From 15638ca18bf7fbdf48857b3a486fcd1a7f49c5f3 Mon Sep 17 00:00:00 2001 From: FeudeyTF <72273449+FeudeyTF@users.noreply.github.com> Date: Sat, 25 Oct 2025 22:18:38 +0300 Subject: [PATCH 30/33] Fix "Getting an upgrade" achievement (#93612) ## About The Pull Request Closes https://github.com/tgstation/tgstation/issues/93609 ## Why It's Good For The Game It's fix ## Changelog :cl: FeudeyTF fix: Now you can get "Getting an upgrade" achievement. Craft your own unique item! /:cl: --- code/game/machinery/autolathe.dm | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 2f5d5a49073..5fa595c1de1 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -302,6 +302,13 @@ target_location = get_turf(src) else target_location = get_turf(src) + + //give achievement for using unique material + if(design.materials[MAT_CATEGORY_ITEM_MATERIAL]) + for(var/datum/material/material in materials_needed) + if(!istype(material, /datum/material/glass) && !istype(material, /datum/material/iron)) + ui.user.client.give_award(/datum/award/achievement/misc/getting_an_upgrade, ui.user) + break addtimer(CALLBACK(src, PROC_REF(do_make_item), design, build_count, build_time_per_item, material_cost_coefficient, charge_per_item, materials_needed, target_location), build_time_per_item) return TRUE From d5e42bdf0ecea8b2c4a80abe85e58540d8e385c3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 19:20:49 +0000 Subject: [PATCH 31/33] Automatic changelog for PR #93612 [ci skip] --- html/changelogs/AutoChangeLog-pr-93612.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93612.yml diff --git a/html/changelogs/AutoChangeLog-pr-93612.yml b/html/changelogs/AutoChangeLog-pr-93612.yml new file mode 100644 index 00000000000..2bd3a6dbe6e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93612.yml @@ -0,0 +1,4 @@ +author: "FeudeyTF" +delete-after: True +changes: + - bugfix: "Now you can get \"Getting an upgrade\" achievement. Craft your own unique item!" \ No newline at end of file From 5a31b00b2f925cfca9098bb3532816f904ba29f5 Mon Sep 17 00:00:00 2001 From: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Date: Sun, 26 Oct 2025 01:13:06 +0530 Subject: [PATCH 32/33] [NO GBP]Fixes some wall mounted items & Flaky poster sign CI Failures (#93606) --- code/datums/components/wall_mounted.dm | 1 + .../objects/items/devices/radio/intercom.dm | 4 --- code/game/objects/structures/signs/_signs.dm | 1 - code/modules/power/apc/apc_main.dm | 35 ++++++++++--------- .../modules/power/lighting/light_construct.dm | 1 + 5 files changed, 20 insertions(+), 22 deletions(-) diff --git a/code/datums/components/wall_mounted.dm b/code/datums/components/wall_mounted.dm index 757b171023e..ef050a7fc61 100644 --- a/code/datums/components/wall_mounted.dm +++ b/code/datums/components/wall_mounted.dm @@ -27,6 +27,7 @@ */ /datum/component/wall_mounted/proc/on_examine(datum/source, mob/user, list/examine_list) SIGNAL_HANDLER + if (parent in view(user.client?.view || world.view, user)) examine_list += span_notice("\The [hanging_wall_turf] is currently supporting [span_bold("[parent]")]. Deconstruction or excessive damage would cause it to [span_bold("fall to the ground")].") diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 58cf998bb71..1b33ba5b49a 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -42,10 +42,6 @@ find_and_hang_on_wall() GLOB.intercoms_list += src -/obj/item/radio/intercom/find_and_hang_on_wall() - if(!unscrewed) - return ..() - /obj/item/radio/intercom/Destroy() GLOB.intercoms_list -= src return ..() diff --git a/code/game/objects/structures/signs/_signs.dm b/code/game/objects/structures/signs/_signs.dm index d1baf9970d4..905d709b273 100644 --- a/code/game/objects/structures/signs/_signs.dm +++ b/code/game/objects/structures/signs/_signs.dm @@ -117,7 +117,6 @@ unwrenched_sign.sign_path = type unwrenched_sign.set_custom_materials(custom_materials) //This is here so picture frames and wooden things don't get messed up. unwrenched_sign.is_editable = is_editable - unwrenched_sign.update_integrity(get_integrity()) //Transfer how damaged it is. unwrenched_sign.setDir(dir) /obj/structure/sign/blank //This subtype is necessary for now because some other things (posters, picture frames, paintings) inherit from the parent type. diff --git a/code/modules/power/apc/apc_main.dm b/code/modules/power/apc/apc_main.dm index 7355eb7fcf2..d2de1f75b29 100644 --- a/code/modules/power/apc/apc_main.dm +++ b/code/modules/power/apc/apc_main.dm @@ -173,29 +173,14 @@ //. += NAMEOF(src, locked) return . -/obj/machinery/power/apc/Initialize(mapload, ndir) +/obj/machinery/power/apc/Initialize(mapload) . = ..() + setDir(dir) //APCs get added to their own processing tasks for the machines subsystem. if (!(datum_flags & DF_ISPROCESSING)) datum_flags |= DF_ISPROCESSING SSmachines.processing_apcs += src - //Pixel offset its appearance based on its direction - dir = ndir - switch(dir) - if(NORTH) - offset_old = pixel_y - pixel_y = APC_PIXEL_OFFSET - if(SOUTH) - offset_old = pixel_y - pixel_y = -APC_PIXEL_OFFSET - if(EAST) - offset_old = pixel_x - pixel_x = APC_PIXEL_OFFSET - if(WEST) - offset_old = pixel_x - pixel_x = -APC_PIXEL_OFFSET - var/image/hud_image = image(icon = 'icons/mob/huds/hud.dmi', icon_state = "apc_hacked") hud_image.pixel_w = pixel_x hud_image.pixel_z = pixel_y @@ -278,6 +263,22 @@ disconnect_terminal() return ..() +/obj/machinery/power/apc/setDir(newdir) + . = ..() + switch(newdir) + if(NORTH) + offset_old = pixel_y + pixel_y = APC_PIXEL_OFFSET + if(SOUTH) + offset_old = pixel_y + pixel_y = -APC_PIXEL_OFFSET + if(EAST) + offset_old = pixel_x + pixel_x = APC_PIXEL_OFFSET + if(WEST) + offset_old = pixel_x + pixel_x = -APC_PIXEL_OFFSET + /obj/machinery/power/apc/on_saboteur(datum/source, disrupt_duration) . = ..() disrupt_duration *= 0.1 // so, turns out, failure timer is in seconds, not deciseconds; without this, disruptions last 10 times as long as they probably should diff --git a/code/modules/power/lighting/light_construct.dm b/code/modules/power/lighting/light_construct.dm index c3872130b25..c38a34318ca 100644 --- a/code/modules/power/lighting/light_construct.dm +++ b/code/modules/power/lighting/light_construct.dm @@ -145,6 +145,7 @@ if("bulb") new_light = new /obj/machinery/light/small/built(loc) new_light.setDir(dir) + new_light.find_and_hang_on_wall() transfer_fingerprints_to(new_light) if(!QDELETED(cell)) new_light.cell = cell From ac3b1ecd03c6dd736ca11b5d46743d84d17a971d Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 25 Oct 2025 19:43:30 +0000 Subject: [PATCH 33/33] Automatic changelog for PR #93606 [ci skip] --- html/changelogs/AutoChangeLog-pr-93606.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-93606.yml diff --git a/html/changelogs/AutoChangeLog-pr-93606.yml b/html/changelogs/AutoChangeLog-pr-93606.yml new file mode 100644 index 00000000000..dd5f128af19 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-93606.yml @@ -0,0 +1,7 @@ +author: "SyncIt21" +delete-after: True +changes: + - bugfix: "hand crafted station intercoms now get deconstructed when the wall is destroyed" + - bugfix: "light fixtures applying the wall mounted component on completed light frames" + - bugfix: "APC offsets are correct" + - bugfix: "poster signs dropped from paintings again have positive integrity and will get destroyed properly" \ No newline at end of file