From f205e48ef5fc1e87932a3f7937f7dfc78b33bbee Mon Sep 17 00:00:00 2001 From: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Date: Sat, 28 Dec 2024 23:40:45 +0200 Subject: [PATCH 01/13] [no gbp] fixes being able to tell animals to commit atrocious acts (#88754) ## About The Pull Request closes #88743 . the issue is while they'd ignore ur command since its impossible, the emote would still appear, which i now realize was a mistake ## Why It's Good For The Game fixes being able to tell animals to commit atrocious acts ## Changelog :cl: fix: radial pet commanding emotes will now not appear if the command is impossible to execute /:cl: --- .../components/pet_commands/pet_command.dm | 12 ++++++------ .../pet_commands/pet_commands_basic.dm | 18 +++++++++--------- .../living/basic/bots/cleanbot/cleanbot_ai.dm | 6 +++--- .../lavaland/gutlunchers/gutlunchers_ai.dm | 2 +- .../basic/lavaland/lobstrosity/lobstrosity.dm | 2 +- .../mob/living/basic/minebots/minebot_ai.dm | 3 ++- 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/code/datums/components/pet_commands/pet_command.dm b/code/datums/components/pet_commands/pet_command.dm index 97dfbc8b5cb18..84b288a5cd80a 100644 --- a/code/datums/components/pet_commands/pet_command.dm +++ b/code/datums/components/pet_commands/pet_command.dm @@ -174,13 +174,12 @@ SIGNAL_HANDLER if(!can_see(source, target, 9)) return COMSIG_MOB_CANCEL_CLICKON - on_target_set(source, target) + var/manual_emote_text = generate_emote_command(target) + if(on_target_set(source, target) && !isnull(manual_emote_text)) + INVOKE_ASYNC(source, TYPE_PROC_REF(/atom, manual_emote), manual_emote_text) UnregisterSignal(source, COMSIG_MOB_CLICKON) source.client?.mouse_override_icon = source.client::mouse_override_icon source.update_mouse_pointer() - var/manual_emote_text = generate_emote_command(target) - if(!isnull(manual_emote_text)) - INVOKE_ASYNC(source, TYPE_PROC_REF(/atom, manual_emote), manual_emote_text) return COMSIG_MOB_CANCEL_CLICKON /datum/pet_command/proc/point_on_target(mob/living/friend, atom/potential_target) @@ -214,11 +213,12 @@ /datum/pet_command/proc/on_target_set(mob/living/friend, atom/potential_target) var/mob/living/parent = weak_parent.resolve() if (!parent) - return + return FALSE parent.ai_controller.CancelActions() if(!look_for_target(friend, potential_target) || !set_command_target(parent, potential_target)) - return + return FALSE parent.visible_message(span_warning("[parent] follows [friend]'s gesture towards [potential_target] [pointed_reaction]!")) + return TRUE diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 1ac49ce9a9c05..cd535b33ecaba 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -147,16 +147,16 @@ // Refuse to target things we can't target, chiefly other friends /datum/pet_command/attack/set_command_target(mob/living/parent, atom/target) if (!target) - return + return FALSE var/mob/living/living_parent = parent if (!living_parent.ai_controller) - return + return FALSE var/datum/targeting_strategy/targeter = GET_TARGETING_STRATEGY(living_parent.ai_controller.blackboard[targeting_strategy_key]) if (!targeter) - return + return FALSE if (!targeter.can_attack(living_parent, target)) refuse_target(parent, target) - return + return FALSE return ..() /datum/pet_command/attack/retrieve_command_text(atom/living_pet, atom/target) @@ -186,16 +186,16 @@ /datum/pet_command/breed/set_command_target(mob/living/parent, atom/target) if(isnull(target) || !isliving(target)) - return + return FALSE if(!HAS_TRAIT(parent, TRAIT_MOB_BREEDER) || !HAS_TRAIT(target, TRAIT_MOB_BREEDER)) - return + return FALSE if(isnull(parent.ai_controller)) - return + return FALSE if(!parent.ai_controller.blackboard[BB_BREED_READY] || isnull(parent.ai_controller.blackboard[BB_BABIES_PARTNER_TYPES])) - return + return FALSE var/mob/living/living_target = target if(!living_target.ai_controller?.blackboard[BB_BREED_READY]) - return + return FALSE return ..() /datum/pet_command/breed/execute_action(datum/ai_controller/controller) diff --git a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm index 0a6a4b03b4354..922289698d4d5 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -210,11 +210,11 @@ /datum/pet_command/clean/set_command_target(mob/living/parent, atom/target) if(isnull(target) || !istype(target, /obj/effect/decal/cleanable)) - return + return FALSE if(isnull(parent.ai_controller)) - return + return FALSE if(LAZYACCESS(parent.ai_controller.blackboard[BB_TEMPORARY_IGNORE_LIST], target)) - return + return FALSE return ..() /datum/pet_command/clean/execute_action(datum/ai_controller/basic_controller/bot/controller) diff --git a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm index 4b329a0003aa8..1028a7d45eb14 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -131,7 +131,7 @@ /datum/pet_command/breed/gutlunch/set_command_target(mob/living/parent, atom/target) if(GLOB.gutlunch_count >= MAXIMUM_GUTLUNCH_POP) parent.balloon_alert_to_viewers("can't reproduce anymore!") - return + return FALSE return ..() #undef MAXIMUM_GUTLUNCH_POP diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm index 7e7d3e71819bf..b5c590a358968 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm @@ -268,7 +268,7 @@ /datum/pet_command/use_ability/lob_charge/set_command_target(mob/living/parent, atom/target) if (!target) - return + return FALSE var/datum/targeting_strategy/targeter = GET_TARGETING_STRATEGY(parent.ai_controller.blackboard[targeting_strategy_key]) if(!targeter?.can_attack(parent, target)) parent.balloon_alert_to_viewers("shakes head!") diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 39248a63295ae..a36ea26c4f27f 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -350,9 +350,10 @@ /datum/pet_command/protect_owner/minebot/set_command_target(mob/living/parent, atom/target) if(!parent.ai_controller.blackboard[BB_MINEBOT_AUTO_DEFEND]) - return + return FALSE if(!parent.ai_controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET) && !QDELETED(target)) //we are already dealing with something, parent.ai_controller.set_blackboard_key(BB_BASIC_MOB_CURRENT_TARGET, target) + return TRUE /datum/pet_command/protect_owner/minebot/execute_action(datum/ai_controller/controller) if(controller.blackboard[BB_MINEBOT_AUTO_DEFEND]) From d9f115c9b92ecad5a350a924c5ed5d4d81346a8e Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2024 21:41:05 +0000 Subject: [PATCH 02/13] Automatic changelog for PR #88754 [ci skip] --- html/changelogs/AutoChangeLog-pr-88754.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88754.yml diff --git a/html/changelogs/AutoChangeLog-pr-88754.yml b/html/changelogs/AutoChangeLog-pr-88754.yml new file mode 100644 index 0000000000000..b7873ef8b89cd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88754.yml @@ -0,0 +1,4 @@ +author: "Ben10Omintrix" +delete-after: True +changes: + - bugfix: "radial pet commanding emotes will now not appear if the command is impossible to execute" \ No newline at end of file From a96817f0d27a7c3d5a5257728ca9eb6a56d0c969 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 29 Dec 2024 00:29:13 +0000 Subject: [PATCH 03/13] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-88517.yml | 5 ---- html/changelogs/AutoChangeLog-pr-88626.yml | 4 --- html/changelogs/AutoChangeLog-pr-88629.yml | 4 --- html/changelogs/AutoChangeLog-pr-88630.yml | 5 ---- html/changelogs/AutoChangeLog-pr-88664.yml | 4 --- html/changelogs/AutoChangeLog-pr-88674.yml | 4 --- html/changelogs/AutoChangeLog-pr-88734.yml | 4 --- html/changelogs/AutoChangeLog-pr-88738.yml | 4 --- html/changelogs/AutoChangeLog-pr-88739.yml | 4 --- html/changelogs/AutoChangeLog-pr-88742.yml | 4 --- html/changelogs/AutoChangeLog-pr-88744.yml | 4 --- html/changelogs/AutoChangeLog-pr-88745.yml | 4 --- html/changelogs/AutoChangeLog-pr-88754.yml | 4 --- html/changelogs/archive/2024-12.yml | 31 ++++++++++++++++++++++ 14 files changed, 31 insertions(+), 54 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-88517.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88626.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88629.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88630.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88664.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88674.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88734.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88738.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88739.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88742.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88744.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88745.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88754.yml diff --git a/html/changelogs/AutoChangeLog-pr-88517.yml b/html/changelogs/AutoChangeLog-pr-88517.yml deleted file mode 100644 index 09cc1464332bb..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88517.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "timothymtorres" -delete-after: True -changes: - - refactor: "Sound has been heavily optimized and will now ignore low volume sounds from far away." - - admin: "Add debugging sound earmuffs to admin equipment inside the debug box. Wear them to determine a sounds max range, distance, volume, and sound name. Highly recommended to walk otherwise you will get spammed with footstep sounds." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88626.yml b/html/changelogs/AutoChangeLog-pr-88626.yml deleted file mode 100644 index c80e885bb1c3b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88626.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "FlufflesTheDog" -delete-after: True -changes: - - bugfix: "welding sparks no longer break on transitioning to a different floor" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88629.yml b/html/changelogs/AutoChangeLog-pr-88629.yml deleted file mode 100644 index 4e2c70f2091d3..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88629.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "Changing gather mode on storage items won't drop it's stored items" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88630.yml b/html/changelogs/AutoChangeLog-pr-88630.yml deleted file mode 100644 index 237753042fd2e..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88630.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "necromanceranne" -delete-after: True -changes: - - bugfix: "Tackling resulting in a neutral outcome does not force you to the floor." - - bugfix: "Getting up is now properly influenced by spinal implants." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88664.yml b/html/changelogs/AutoChangeLog-pr-88664.yml deleted file mode 100644 index c0c6abf8ee972..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88664.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed podperson hair not updating" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88674.yml b/html/changelogs/AutoChangeLog-pr-88674.yml deleted file mode 100644 index dba55e1ebec70..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88674.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - qol: "Iron material tiles can now be used to tile lattice to make plating" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88734.yml b/html/changelogs/AutoChangeLog-pr-88734.yml deleted file mode 100644 index d9f0053130f73..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88734.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LT3" -delete-after: True -changes: - - bugfix: "Fixed lead acid cell having extremely high max charge" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88738.yml b/html/changelogs/AutoChangeLog-pr-88738.yml deleted file mode 100644 index 32429563b9a8a..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88738.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Paxilmaniac" -delete-after: True -changes: - - bugfix: "fixes crafting menu-made rice dough being unusable for bread" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88739.yml b/html/changelogs/AutoChangeLog-pr-88739.yml deleted file mode 100644 index c75e4db55840b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88739.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SyncIt21" -delete-after: True -changes: - - bugfix: "Fixes shattering element dropping stuff on blocked turfs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88742.yml b/html/changelogs/AutoChangeLog-pr-88742.yml deleted file mode 100644 index 44a62dfd220c1..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88742.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - spellcheck: "Give alert 'examiante' > 'examine'." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88744.yml b/html/changelogs/AutoChangeLog-pr-88744.yml deleted file mode 100644 index a9933a7c174ed..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88744.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Absolucy" -delete-after: True -changes: - - code_imp: "Very slightly improved the performance of code related to adding and removing traits." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88745.yml b/html/changelogs/AutoChangeLog-pr-88745.yml deleted file mode 100644 index 60558e29d938b..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88745.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SmArtKar" -delete-after: True -changes: - - bugfix: "Fixed chair, echair, wheelchair and vehicle overlays on painted objects" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88754.yml b/html/changelogs/AutoChangeLog-pr-88754.yml deleted file mode 100644 index b7873ef8b89cd..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88754.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - bugfix: "radial pet commanding emotes will now not appear if the command is impossible to execute" \ No newline at end of file diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index a263bcf647d65..763a62a1c6230 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -733,3 +733,34 @@ to other people, so don't be stupid! - rscadd: influences cannot be bombed for fish. - rscadd: Heretics can now infuse their fishing rod, and fish for knowledge. +2024-12-29: + 00-Steven: + - spellcheck: Give alert 'examiante' > 'examine'. + Absolucy: + - code_imp: Very slightly improved the performance of code related to adding and + removing traits. + Ben10Omintrix: + - bugfix: radial pet commanding emotes will now not appear if the command is impossible + to execute + FlufflesTheDog: + - bugfix: welding sparks no longer break on transitioning to a different floor + LT3: + - bugfix: Fixed lead acid cell having extremely high max charge + Paxilmaniac: + - bugfix: fixes crafting menu-made rice dough being unusable for bread + SmArtKar: + - qol: Iron material tiles can now be used to tile lattice to make plating + - bugfix: Fixed podperson hair not updating + - bugfix: Fixed chair, echair, wheelchair and vehicle overlays on painted objects + SyncIt21: + - bugfix: Changing gather mode on storage items won't drop it's stored items + - bugfix: Fixes shattering element dropping stuff on blocked turfs + necromanceranne: + - bugfix: Tackling resulting in a neutral outcome does not force you to the floor. + - bugfix: Getting up is now properly influenced by spinal implants. + timothymtorres: + - refactor: Sound has been heavily optimized and will now ignore low volume sounds + from far away. + - admin: Add debugging sound earmuffs to admin equipment inside the debug box. Wear + them to determine a sounds max range, distance, volume, and sound name. Highly + recommended to walk otherwise you will get spammed with footstep sounds. From 36f123f7aece874c872d839ba072ad55d8e9b275 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2024 20:48:06 -0800 Subject: [PATCH 04/13] Automatic TGS DMAPI Update (#88639) This pull request updates the TGS DMAPI to the latest version. Please note any changes that may be breaking or unimplemented in your codebase by checking what changes are in the definitions file: code/__DEFINES/tgs.dm before merging. Full changelog can be found [here](https://raw.githubusercontent.com/tgstation/tgstation-server/gh-pages/changelog.yml). - Added compatibility with SpacemanDMM's `redefined_proc` lint. (#2058 Cyberboss) #tgs-dmapi-release Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> --- code/__DEFINES/tgs.dm | 29 ++++++++++++++++++++++++++++- code/modules/tgs/v5/undefs.dm | 1 + 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 42f2d5fc31fee..7e1ba820dd8b7 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,7 +1,7 @@ // tgstation-server DMAPI // The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in IETF RFC 2119. -#define TGS_DMAPI_VERSION "7.3.0" +#define TGS_DMAPI_VERSION "7.3.1" // All functions and datums outside this document are subject to change with any version and should not be relied on. @@ -58,6 +58,11 @@ #define TGS_FILE2TEXT_NATIVE file2text #endif +// SpacemanDMM compatibility +#ifndef CAN_BE_REDEFINED +#define CAN_BE_REDEFINED(X) +#endif + // EVENT CODES /// Before a reboot mode change, extras parameters are the current and new reboot mode enums. @@ -160,6 +165,7 @@ * * http_handler - Optional user defined [/datum/tgs_http_handler]. */ /world/proc/TgsNew(datum/tgs_event_handler/event_handler, minimum_required_security_level = TGS_SECURITY_ULTRASAFE, datum/tgs_http_handler/http_handler) + CAN_BE_REDEFINED(TRUE) return /** @@ -170,6 +176,7 @@ * This function should not be called before ..() in [/world/proc/New]. */ /world/proc/TgsInitializationComplete() + CAN_BE_REDEFINED(TRUE) return /// Consumers MUST run this macro at the start of [/world/proc/Topic]. @@ -177,6 +184,7 @@ /// Consumers MUST call this as late as possible in [world/proc/Reboot] (BEFORE ..()). /world/proc/TgsReboot() + CAN_BE_REDEFINED(TRUE) return // DATUM DEFINITIONS @@ -214,6 +222,7 @@ * Returns [TRUE]/[FALSE] based on if the [/datum/tgs_version] contains wildcards. */ /datum/tgs_version/proc/Wildcard() + CAN_BE_REDEFINED(TRUE) return /** @@ -222,6 +231,7 @@ * other_version - The [/datum/tgs_version] to compare against. */ /datum/tgs_version/proc/Equals(datum/tgs_version/other_version) + CAN_BE_REDEFINED(TRUE) return /// Represents a merge of a GitHub pull request. @@ -459,16 +469,19 @@ /// Returns the maximum supported [/datum/tgs_version] of the DMAPI. /world/proc/TgsMaximumApiVersion() + CAN_BE_REDEFINED(TRUE) return /// Returns the minimum supported [/datum/tgs_version] of the DMAPI. /world/proc/TgsMinimumApiVersion() + CAN_BE_REDEFINED(TRUE) return /** * Returns [TRUE] if DreamDaemon was launched under TGS, the API matches, and was properly initialized. [FALSE] will be returned otherwise. */ /world/proc/TgsAvailable() + CAN_BE_REDEFINED(TRUE) return // No function below this succeeds if it TgsAvailable() returns FALSE or if TgsNew() has yet to be called. @@ -480,6 +493,7 @@ * If TGS has not requested a [TGS_REBOOT_MODE_SHUTDOWN] DreamDaemon will be launched again. */ /world/proc/TgsEndProcess() + CAN_BE_REDEFINED(TRUE) return /** @@ -490,6 +504,7 @@ * admin_only: If [TRUE], message will be sent to admin connected chats. Vice-versa applies. */ /world/proc/TgsTargetedChatBroadcast(datum/tgs_message_content/message, admin_only = FALSE) + CAN_BE_REDEFINED(TRUE) return /** @@ -500,6 +515,7 @@ * user: The [/datum/tgs_chat_user] to PM. */ /world/proc/TgsChatPrivateMessage(datum/tgs_message_content/message, datum/tgs_chat_user/user) + CAN_BE_REDEFINED(TRUE) return /** @@ -510,42 +526,52 @@ * channels - Optional list of [/datum/tgs_chat_channel]s to restrict the message to. */ /world/proc/TgsChatBroadcast(datum/tgs_message_content/message, list/channels = null) + CAN_BE_REDEFINED(TRUE) return /// Returns the current [/datum/tgs_version] of TGS if it is running the server, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsVersion() + CAN_BE_REDEFINED(TRUE) return /// Returns the running engine type /world/proc/TgsEngine() + CAN_BE_REDEFINED(TRUE) return /// Returns the current [/datum/tgs_version] of the DMAPI being used if it was activated, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsApiVersion() + CAN_BE_REDEFINED(TRUE) return /// Returns the name of the TGS instance running the game if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsInstanceName() + CAN_BE_REDEFINED(TRUE) return /// Return the current [/datum/tgs_revision_information] of the running server if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsRevision() + CAN_BE_REDEFINED(TRUE) return /// Returns the current BYOND security level as a TGS_SECURITY_ define if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsSecurityLevel() + CAN_BE_REDEFINED(TRUE) return /// Returns the current BYOND visibility level as a TGS_VISIBILITY_ define if TGS is present, null otherwise. Requires TGS to be using interop API version 5 or higher otherwise the string "___unimplemented" wil be returned. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsVisibility() + CAN_BE_REDEFINED(TRUE) return /// Returns a list of active [/datum/tgs_revision_information/test_merge]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsTestMerges() + CAN_BE_REDEFINED(TRUE) return /// Returns a list of connected [/datum/tgs_chat_channel]s if TGS is present, null otherwise. This function may sleep if the call to [/world/proc/TgsNew] is sleeping! /world/proc/TgsChatChannelInfo() + CAN_BE_REDEFINED(TRUE) return /** @@ -556,6 +582,7 @@ * wait_for_completion - If set, this function will not return until the event has run to completion. */ /world/proc/TgsTriggerEvent(event_name, list/parameters, wait_for_completion = FALSE) + CAN_BE_REDEFINED(TRUE) return /* diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index acd19dfa6411c..ca49e46cdffad 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -18,6 +18,7 @@ #undef DMAPI5_PARAMETER_ACCESS_IDENTIFIER #undef DMAPI5_PARAMETER_CUSTOM_COMMANDS +#undef DMAPI5_PARAMETER_TOPIC_PORT #undef DMAPI5_CHUNK #undef DMAPI5_CHUNK_PAYLOAD From 5ef37fd1694a202813d96506466b783dc595e0f9 Mon Sep 17 00:00:00 2001 From: jimmyl <70376633+mc-oofert@users.noreply.github.com> Date: Sun, 29 Dec 2024 07:16:35 +0100 Subject: [PATCH 05/13] you can adjust diagonal walls to be not diagonal walls with a wrench (#88636) ## About The Pull Request you can adjust diagonal walls to not diagonal walls with a wrench https://github.com/user-attachments/assets/0a708b7d-195b-41ad-b7f4-cf9f8142e730 ## Why It's Good For The Game when youre building the shuttle you literally always forget to put tiles under diagonal titanium walls so you just have plating there this is fixed by letting players not make it diagonal ## Changelog :cl: qol: you can adjust diagonal walls to be not diagonal walls with a wrench /:cl: --- code/game/turfs/closed/walls.dm | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index 402d24c6c830d..3937ed55710f5 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -49,6 +49,14 @@ underlay_appearance.icon_state = fixed_underlay["icon_state"] fixed_underlay = string_assoc_list(fixed_underlay) underlays += underlay_appearance + register_context() + +/turf/closed/wall/add_context(atom/source, list/context, obj/item/held_item, mob/user) + . = NONE + if(!isnull(held_item)) + if((initial(smoothing_flags) & SMOOTH_DIAGONAL_CORNERS) && held_item.tool_behaviour == TOOL_WRENCH) + context[SCREENTIP_CONTEXT_LMB] = "Adjust Wall Corner" + return CONTEXTUAL_SCREENTIP_SET /turf/closed/wall/mouse_drop_receive(atom/dropping, mob/user, params) //Adds the component only once. We do it here & not in Initialize() because there are tons of walls & we don't want to add to their init times @@ -64,7 +72,9 @@ return ..() /turf/closed/wall/examine(mob/user) - . += ..() + . = ..() + if(initial(smoothing_flags) & SMOOTH_DIAGONAL_CORNERS) + . += span_notice("You could adjust its corners with a wrench.") . += deconstruction_hints(user) /turf/closed/wall/proc/deconstruction_hints(mob/user) @@ -324,3 +334,15 @@ /turf/closed/wall/Exited(atom/movable/gone, direction) . = ..() SEND_SIGNAL(gone, COMSIG_LIVING_WALL_EXITED, src) + +/turf/closed/wall/wrench_act(mob/living/user, obj/item/tool) + if(user.combat_mode || !(initial(smoothing_flags) & SMOOTH_DIAGONAL_CORNERS)) + return ITEM_INTERACT_SKIP_TO_ATTACK + if(smoothing_flags & SMOOTH_DIAGONAL_CORNERS) + smoothing_flags &= ~SMOOTH_DIAGONAL_CORNERS + else + smoothing_flags |= SMOOTH_DIAGONAL_CORNERS + QUEUE_SMOOTH(src) + to_chat(user, span_notice("You adjust [src].")) + tool.play_tool_sound(src) + return ITEM_INTERACT_SUCCESS From b1f7f7dc91cf12c8fb5bad53d968f763609936f3 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 29 Dec 2024 06:16:56 +0000 Subject: [PATCH 06/13] Automatic changelog for PR #88636 [ci skip] --- html/changelogs/AutoChangeLog-pr-88636.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88636.yml diff --git a/html/changelogs/AutoChangeLog-pr-88636.yml b/html/changelogs/AutoChangeLog-pr-88636.yml new file mode 100644 index 0000000000000..04193e1590d71 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88636.yml @@ -0,0 +1,4 @@ +author: "mc-oofert" +delete-after: True +changes: + - qol: "you can adjust diagonal walls to be not diagonal walls with a wrench" \ No newline at end of file From e46db9941284f0912ded4a7ccb152662ea1d6787 Mon Sep 17 00:00:00 2001 From: grungussuss <96586172+Sadboysuss@users.noreply.github.com> Date: Sun, 29 Dec 2024 10:53:55 +0300 Subject: [PATCH 07/13] airlocks and computers are leanable (#88478) ## About The Pull Request - added a signal - `COMSIG_ATOM_DENSITY_CHANGED`, is sent when set_density is called and doesn't early return - changed all manual assignments of .density to use `set_density` so the signal is sent - airlocks get the leanable component, if the airlock opens while you are leaning on it - you will fall - computers get the leanable component ## Why It's Good For The Game can lean on more stuff, roleplay! Immersion! *John Tider leans on the airlock* ## Changelog :cl: grungussuss add: computers and airlocks are now leanable refactor: changed how density/collision of some objects is changed, report any oddities! /:cl: --------- Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> --- .../signals/signals_atom/signals_atom_main.dm | 3 ++ code/datums/components/ground_sinking.dm | 4 +-- code/datums/components/leanable.dm | 31 ++++++++++++++++++- code/game/atom/_atom.dm | 2 +- code/game/machinery/airlock_control.dm | 8 +++++ code/game/machinery/computer/_computer.dm | 5 +++ code/game/machinery/doors/airlock.dm | 4 +-- code/game/machinery/modular_shield.dm | 2 +- .../heretic/status_effects/buffs.dm | 2 +- .../vehicles/mecha/combat/savannah_ivanov.dm | 4 +-- 10 files changed, 55 insertions(+), 10 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm index 2e42957aa3a08..586a67e23954c 100644 --- a/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm +++ b/code/__DEFINES/dcs/signals/signals_atom/signals_atom_main.dm @@ -145,3 +145,6 @@ /// From whoever has been revealed (atom/revealed) #define COMSIG_ATOM_REVEAL "atom_reveal" + +/// From /atom/proc/set_density(new_value) for when an atom changes density +#define COMSIG_ATOM_DENSITY_CHANGED "atom_density_change" diff --git a/code/datums/components/ground_sinking.dm b/code/datums/components/ground_sinking.dm index d29e84908a438..4e846b4cf704e 100644 --- a/code/datums/components/ground_sinking.dm +++ b/code/datums/components/ground_sinking.dm @@ -99,7 +99,7 @@ /datum/component/ground_sinking/proc/finish_sinking(mob/living/basic/living_target) sinked = TRUE is_sinking = FALSE - living_target.density = FALSE + living_target.set_density(FALSE) living_target.damage_coeff = damage_res_sinked if(heal_when_sinked) start_regenerating() @@ -113,7 +113,7 @@ stop_regenerating() living_target.icon_state = target_icon_state living_target.damage_coeff = list(BRUTE = 1, BURN = 1, TOX = 1, STAMINA = 0, OXY = 1) - living_target.density = TRUE + living_target.set_density(TRUE) sinked = FALSE /// The mop starts regaining health diff --git a/code/datums/components/leanable.dm b/code/datums/components/leanable.dm index b823cf5ec503c..bc0994dcdcd9d 100644 --- a/code/datums/components/leanable.dm +++ b/code/datums/components/leanable.dm @@ -4,6 +4,8 @@ var/leaning_offset = 11 /// List of mobs currently leaning on our parent var/list/leaning_mobs = list() + /// Is this object currently leanable? + var/is_currently_leanable = TRUE /datum/component/leanable/Initialize(mob/living/leaner, leaning_offset = 11) . = ..() @@ -13,15 +15,32 @@ /datum/component/leanable/RegisterWithParent() RegisterSignal(parent, COMSIG_MOUSEDROPPED_ONTO, PROC_REF(mousedrop_receive)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(on_moved)) + RegisterSignal(parent, COMSIG_ATOM_DENSITY_CHANGED, PROC_REF(on_density_change)) + var/atom/leanable_atom = parent + is_currently_leanable = leanable_atom.density + +/datum/component/leanable/UnregisterFromParent() + . = ..() + UnregisterSignal(parent, list( + COMSIG_MOVABLE_MOVED, + COMSIG_MOUSEDROPPED_ONTO, + COMSIG_ATOM_DENSITY_CHANGED, + )) /datum/component/leanable/UnregisterFromParent() UnregisterSignal(parent, list(COMSIG_MOUSEDROPPED_ONTO, COMSIG_MOVABLE_MOVED)) /datum/component/leanable/Destroy(force) + stop_leaning_leaners() + return ..() + +/datum/component/leanable/proc/stop_leaning_leaners(fall) for (var/mob/living/leaner as anything in leaning_mobs) leaner.stop_leaning() + if(fall) + to_chat(leaner, span_danger("You lose balance!")) + leaner.Paralyze(0.5 SECONDS) leaning_mobs = null - return ..() /datum/component/leanable/proc/on_moved(datum/source) SIGNAL_HANDLER @@ -42,6 +61,8 @@ var/turf/checked_turf = get_step(leaner, REVERSE_DIR(leaner.dir)) if (checked_turf != get_turf(source)) return + if(!is_currently_leanable) + return COMPONENT_CANCEL_MOUSEDROPPED_ONTO leaner.start_leaning(source, leaning_offset) leaning_mobs += leaner RegisterSignals(leaner, list(COMSIG_LIVING_STOPPED_LEANING, COMSIG_QDELETING), PROC_REF(stopped_leaning)) @@ -118,3 +139,11 @@ if (old_dir != new_dir) INVOKE_ASYNC(src, PROC_REF(stop_leaning)) + +/datum/component/leanable/proc/on_density_change() + SIGNAL_HANDLER + is_currently_leanable = !is_currently_leanable + if(!is_currently_leanable) + stop_leaning_leaners(fall = TRUE) + return + stop_leaning_leaners() diff --git a/code/game/atom/_atom.dm b/code/game/atom/_atom.dm index c8c3111889eac..a7d057aa9fa4d 100644 --- a/code/game/atom/_atom.dm +++ b/code/game/atom/_atom.dm @@ -722,7 +722,7 @@ return . = density density = new_value - + SEND_SIGNAL(src, COMSIG_ATOM_DENSITY_CHANGED) ///Setter for the `base_pixel_x` variable to append behavior related to its changing. /atom/proc/set_base_pixel_x(new_value) diff --git a/code/game/machinery/airlock_control.dm b/code/game/machinery/airlock_control.dm index 9e089eeaf2be8..3b01c40403d8c 100644 --- a/code/game/machinery/airlock_control.dm +++ b/code/game/machinery/airlock_control.dm @@ -6,6 +6,14 @@ var/airlock_state var/frequency + +/obj/machinery/door/airlock/mouse_drop_receive(mob/living/dropping, mob/user, params) + . = ..() + // We add the component only once here & not in Initialize() because there are tons of airlocks & we don't want to add to their init times + // This is on airlock rather than on door because windoors are door and leaning looks whack on windoors + LoadComponent(/datum/component/leanable, dropping) + + /// Forces the airlock to unbolt and open /obj/machinery/door/airlock/proc/secure_open() locked = FALSE diff --git a/code/game/machinery/computer/_computer.dm b/code/game/machinery/computer/_computer.dm index d51e197a0bcdd..6aa3368341215 100644 --- a/code/game/machinery/computer/_computer.dm +++ b/code/game/machinery/computer/_computer.dm @@ -30,6 +30,11 @@ . = ..() power_change() +/obj/machinery/computer/mouse_drop_receive(mob/living/dropping, mob/user, params) + . = ..() + // We add the component only once here & not in Initialize() because there are tons of computers & we don't want to add to their init times + LoadComponent(/datum/component/leanable, dropping) + /obj/machinery/computer/CanAllowThrough(atom/movable/mover, border_dir) // allows projectiles to fly over the computer . = ..() if(.) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index d57714c1cf32c..b562713fe3713 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1355,7 +1355,7 @@ if(air_tight) set_density(TRUE) if(multi_tile) - filler.density = TRUE + filler.set_density(TRUE) flags_1 |= PREVENT_CLICK_UNDER_1 air_update_turf(TRUE, TRUE) var/unpassable_delay = animation_segment_delay(AIRLOCK_CLOSING_UNPASSABLE) @@ -1363,7 +1363,7 @@ if(!air_tight) set_density(TRUE) if(multi_tile) - filler.density = TRUE + filler.set_density(TRUE) flags_1 |= PREVENT_CLICK_UNDER_1 air_update_turf(TRUE, TRUE) var/opaque_delay = animation_segment_delay(AIRLOCK_CLOSING_OPAQUE) - unpassable_delay diff --git a/code/game/machinery/modular_shield.dm b/code/game/machinery/modular_shield.dm index b4fa6bed17bb0..2e8fa632e42bf 100644 --- a/code/game/machinery/modular_shield.dm +++ b/code/game/machinery/modular_shield.dm @@ -240,7 +240,7 @@ /obj/machinery/modular_shield_generator/proc/finish_field() for(var/obj/structure/emergency_shield/modular/current_shield in deployed_shields) - current_shield.density = TRUE + current_shield.set_density(TRUE) current_shield.alpha = 255 initiating = FALSE diff --git a/code/modules/antagonists/heretic/status_effects/buffs.dm b/code/modules/antagonists/heretic/status_effects/buffs.dm index 362e9750b49c1..d42626871bbff 100644 --- a/code/modules/antagonists/heretic/status_effects/buffs.dm +++ b/code/modules/antagonists/heretic/status_effects/buffs.dm @@ -284,7 +284,7 @@ /datum/status_effect/caretaker_refuge/on_apply() animate(owner, alpha = 45,time = 0.5 SECONDS) - owner.density = FALSE + owner.set_density(FALSE) RegisterSignal(owner, SIGNAL_REMOVETRAIT(TRAIT_ALLOW_HERETIC_CASTING), PROC_REF(on_focus_lost)) RegisterSignal(owner, COMSIG_MOB_BEFORE_SPELL_CAST, PROC_REF(prevent_spell_usage)) RegisterSignal(owner, COMSIG_ATOM_HOLYATTACK, PROC_REF(nullrod_handler)) diff --git a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm index dfcf2896b5b74..6395b39393ef8 100644 --- a/code/modules/vehicles/mecha/combat/savannah_ivanov.dm +++ b/code/modules/vehicles/mecha/combat/savannah_ivanov.dm @@ -145,7 +145,7 @@ chassis.mecha_flags |= QUIET_STEPS|QUIET_TURNS|CANNOT_INTERACT chassis.phasing = "flying" chassis.movedelay = 1 - chassis.density = FALSE + chassis.set_density(FALSE) chassis.layer = ABOVE_ALL_MOB_LAYER animate(chassis, alpha = 0, time = 8, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) animate(chassis, pixel_z = 400, time = 10, easing = QUAD_EASING|EASE_IN, flags = ANIMATION_PARALLEL) //Animate our rising mech (just like pods hehe) @@ -176,7 +176,7 @@ chassis.mecha_flags &= ~(QUIET_STEPS|QUIET_TURNS|CANNOT_INTERACT) chassis.phasing = initial(chassis.phasing) chassis.movedelay = initial(chassis.movedelay) - chassis.density = TRUE + chassis.set_density(TRUE) chassis.layer = initial(chassis.layer) SET_PLANE(chassis, initial(chassis.plane), landed_on) skyfall_charge_level = 0 From 1f3fc45a4b7d468d34e286eae8d83e8a462379c5 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 29 Dec 2024 07:54:16 +0000 Subject: [PATCH 08/13] Automatic changelog for PR #88478 [ci skip] --- html/changelogs/AutoChangeLog-pr-88478.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88478.yml diff --git a/html/changelogs/AutoChangeLog-pr-88478.yml b/html/changelogs/AutoChangeLog-pr-88478.yml new file mode 100644 index 0000000000000..87ba8bf5daf38 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88478.yml @@ -0,0 +1,5 @@ +author: "grungussuss" +delete-after: True +changes: + - rscadd: "computers and airlocks are now leanable" + - refactor: "changed how density/collision of some objects is changed, report any oddities!" \ No newline at end of file From eb4579b862ff243864eea5b3de7e763048e1d637 Mon Sep 17 00:00:00 2001 From: _0Steven <42909981+00-Steven@users.noreply.github.com> Date: Sun, 29 Dec 2024 09:58:22 +0100 Subject: [PATCH 09/13] Fix photocopying removing stamp overlays from the original instead of copying them to the copy (#88764) ## About The Pull Request Photocopiers were trying to copy the stamp overlays from the new blank paper onto the original, and cutting the original's old overlays in the process. This inverts that statement and removes the cutting part. ## Why It's Good For The Game Nice if photocopying doesn't remove the stamp overlays on the original just cause it feels like it. ## Changelog :cl: fix: Photocopying no longer removes the stamp overlays from the original paper, and actually copies them to the copy. /:cl: --- code/modules/paperwork/paper.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index fcd73ec99bf1e..d974141bc19c8 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -162,7 +162,7 @@ new_paper.raw_stamp_data = copy_raw_stamps() new_paper.stamp_cache = stamp_cache?.Copy() new_paper.update_icon_state() - copy_overlays(new_paper, TRUE) + new_paper.copy_overlays(src) return new_paper /** From c588e8fc7f0521b60985502b35c88e0f57bac8f9 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 29 Dec 2024 08:58:43 +0000 Subject: [PATCH 10/13] Automatic changelog for PR #88764 [ci skip] --- html/changelogs/AutoChangeLog-pr-88764.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88764.yml diff --git a/html/changelogs/AutoChangeLog-pr-88764.yml b/html/changelogs/AutoChangeLog-pr-88764.yml new file mode 100644 index 0000000000000..0e7b7cd8beb19 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88764.yml @@ -0,0 +1,4 @@ +author: "00-Steven" +delete-after: True +changes: + - bugfix: "Photocopying no longer removes the stamp overlays from the original paper, and actually copies them to the copy." \ No newline at end of file From e8962b0d6b7f1ccf52e46d1844713e3177f5b449 Mon Sep 17 00:00:00 2001 From: Rhials <28870487+Rhials@users.noreply.github.com> Date: Sun, 29 Dec 2024 18:04:19 -0500 Subject: [PATCH 11/13] Mech-dominating Malf AIs will have their Doomsday timer stopped when their deactivated core is destroyed (#88528) --- code/game/objects/structures/ai_core.dm | 15 ++++++++++++++- .../antagonists/blob/blobstrains/_blobstrain.dm | 3 +-- .../antagonists/blob/blobstrains/blazing_oil.dm | 1 - .../antagonists/malf_ai/malf_ai_modules.dm | 6 +++--- .../antagonists/nukeop/equipment/pinpointer.dm | 5 ++++- .../vehicles/mecha/mecha_ai_interaction.dm | 4 +++- 6 files changed, 25 insertions(+), 9 deletions(-) diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 4a5ee234c7742..cef73b0fbfd88 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -77,10 +77,13 @@ icon_state = "ai-empty" anchored = TRUE state = AI_READY_CORE + var/mob/living/silicon/ai/attached_ai -/obj/structure/ai_core/deactivated/Initialize(mapload, skip_mmi_creation = FALSE, posibrain = FALSE) +/obj/structure/ai_core/deactivated/Initialize(mapload, skip_mmi_creation = FALSE, posibrain = FALSE, linked_ai) . = ..() circuit = new(src) + if(linked_ai) + attached_ai = linked_ai if(skip_mmi_creation) return if(posibrain) @@ -90,6 +93,16 @@ core_mmi.brain = new(core_mmi) core_mmi.update_appearance() +/obj/structure/ai_core/deactivated/Destroy() + if(attached_ai) + attached_ai.linked_core = null + attached_ai = null + . = ..() + +/obj/structure/ai_core/deactivated/proc/disable_doomsday(datum/source) + SIGNAL_HANDLER + attached_ai.ShutOffDoomsdayDevice() + /obj/structure/ai_core/latejoin_inactive name = "networked AI core" desc = "This AI core is connected by bluespace transmitters to NTNet, allowing for an AI personality to be downloaded to it on the fly mid-shift." diff --git a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm index 54d393780b25b..7215bdf3ae85f 100644 --- a/code/modules/antagonists/blob/blobstrains/_blobstrain.dm +++ b/code/modules/antagonists/blob/blobstrains/_blobstrain.dm @@ -22,8 +22,7 @@ GLOBAL_LIST_INIT(valid_blobstrains, subtypesof(/datum/blobstrain) - list(/datum/ var/message_living = null /// Stores world.time to figure out when to next give resources var/resource_delay = 0 - /// For blob-mobs and extinguishing-based effects - var/fire_based = FALSE + ///The blob overmind eye mob used to control the spread var/mob/eye/blob/overmind /// The amount of health regenned on core_process var/base_core_regen = BLOB_CORE_HP_REGEN diff --git a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm index f01f2c2faadc6..c33d0b6e92961 100644 --- a/code/modules/antagonists/blob/blobstrains/blazing_oil.dm +++ b/code/modules/antagonists/blob/blobstrains/blazing_oil.dm @@ -12,7 +12,6 @@ message = "The blob splashes you with burning oil" message_living = ", and you feel your skin char and melt" reagent = /datum/reagent/blob/blazing_oil - fire_based = TRUE /datum/blobstrain/reagent/blazing_oil/extinguish_reaction(obj/structure/blob/B) B.take_damage(4.5, BURN, ENERGY) diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index 65d12fcb25ac4..00b581bcebf5a 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -904,12 +904,12 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf)) /datum/ai_module/malf/upgrade/mecha_domination name = "Unlock Mech Domination" description = "Allows you to hack into a mech's onboard computer, shunting all processes into it and ejecting any occupants. \ - Do not allow the mech to leave the station's vicinity or allow it to be destroyed. \ - Upgrade is done immediately upon purchase." + Upgrade is done immediately upon purchase. Do not allow the mech to leave the station's vicinity or allow it to be destroyed. \ + If your core is destroyed, you will be lose connection with the Doomsday Device and the countdown will cease." cost = 30 upgrade = TRUE unlock_text = span_notice("Virus package compiled. Select a target mech at any time. You must remain on the station at all times. \ - Loss of signal will result in total system lockout.") + Loss of signal will result in total system lockout. If your inactive core is destroyed, you will be lose connection with the Doomsday Device and the countdown will cease.") unlock_sound = 'sound/vehicles/mecha/nominal.ogg' /datum/ai_module/malf/upgrade/mecha_domination/upgrade(mob/living/silicon/ai/AI) diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index 82113fb31be2b..ebdbdbe86980b 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -43,7 +43,10 @@ for(var/V in GLOB.ai_list) var/mob/living/silicon/ai/A = V if(A.nuking) - target = A + if(A.linked_core) + target = A.linked_core + else + target = A for(var/obj/machinery/power/apc/apc as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)) if(apc.malfhack && apc.occupier) target = apc diff --git a/code/modules/vehicles/mecha/mecha_ai_interaction.dm b/code/modules/vehicles/mecha/mecha_ai_interaction.dm index 4b4d92f06a268..f43a11903a950 100644 --- a/code/modules/vehicles/mecha/mecha_ai_interaction.dm +++ b/code/modules/vehicles/mecha/mecha_ai_interaction.dm @@ -66,7 +66,9 @@ return if(AI_MECH_HACK) //Called by AIs on the mech - AI.linked_core = new /obj/structure/ai_core/deactivated(AI.loc) + var/obj/structure/ai_core/deactivated/deactivated_core = new(AI.loc, FALSE, FALSE, AI) + AI.linked_core = deactivated_core + AI.linked_core.RegisterSignal(deactivated_core, COMSIG_ATOM_DESTRUCTION, TYPE_PROC_REF(/obj/structure/ai_core/deactivated, disable_doomsday)) //Protect that core! The structure goes bye-bye when we re-shunt back in so no need for cleanup. AI.linked_core.remote_ai = AI if(AI.can_dominate_mechs && LAZYLEN(occupants)) //Oh, I am sorry, were you using that? to_chat(AI, span_warning("Occupants detected! Forced ejection initiated!")) From 1b293c42a30a1396ef7fda8a78bcd898516718fa Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Sun, 29 Dec 2024 23:05:01 +0000 Subject: [PATCH 12/13] Automatic changelog for PR #88528 [ci skip] --- html/changelogs/AutoChangeLog-pr-88528.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-88528.yml diff --git a/html/changelogs/AutoChangeLog-pr-88528.yml b/html/changelogs/AutoChangeLog-pr-88528.yml new file mode 100644 index 0000000000000..23d4fa3eae0d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-88528.yml @@ -0,0 +1,4 @@ +author: "Rhials" +delete-after: True +changes: + - balance: "When dominating a mech as a Malfunctioning AI, the core you shunted from will disable your Doomsday Counterdown when destroyed. Make sure to protect that core!" \ No newline at end of file From 2fcc5598ce9df8db168e48ec7808be7193abc769 Mon Sep 17 00:00:00 2001 From: "tgstation-ci[bot]" <179393467+tgstation-ci[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 00:27:35 +0000 Subject: [PATCH 13/13] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-88478.yml | 5 ----- html/changelogs/AutoChangeLog-pr-88528.yml | 4 ---- html/changelogs/AutoChangeLog-pr-88636.yml | 4 ---- html/changelogs/AutoChangeLog-pr-88764.yml | 4 ---- html/changelogs/archive/2024-12.yml | 14 ++++++++++++++ 5 files changed, 14 insertions(+), 17 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-88478.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88528.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88636.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-88764.yml diff --git a/html/changelogs/AutoChangeLog-pr-88478.yml b/html/changelogs/AutoChangeLog-pr-88478.yml deleted file mode 100644 index 87ba8bf5daf38..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88478.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "grungussuss" -delete-after: True -changes: - - rscadd: "computers and airlocks are now leanable" - - refactor: "changed how density/collision of some objects is changed, report any oddities!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88528.yml b/html/changelogs/AutoChangeLog-pr-88528.yml deleted file mode 100644 index 23d4fa3eae0d0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88528.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - balance: "When dominating a mech as a Malfunctioning AI, the core you shunted from will disable your Doomsday Counterdown when destroyed. Make sure to protect that core!" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88636.yml b/html/changelogs/AutoChangeLog-pr-88636.yml deleted file mode 100644 index 04193e1590d71..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88636.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "mc-oofert" -delete-after: True -changes: - - qol: "you can adjust diagonal walls to be not diagonal walls with a wrench" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-88764.yml b/html/changelogs/AutoChangeLog-pr-88764.yml deleted file mode 100644 index 0e7b7cd8beb19..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-88764.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - bugfix: "Photocopying no longer removes the stamp overlays from the original paper, and actually copies them to the copy." \ No newline at end of file diff --git a/html/changelogs/archive/2024-12.yml b/html/changelogs/archive/2024-12.yml index 763a62a1c6230..0a1a2e5323812 100644 --- a/html/changelogs/archive/2024-12.yml +++ b/html/changelogs/archive/2024-12.yml @@ -764,3 +764,17 @@ - admin: Add debugging sound earmuffs to admin equipment inside the debug box. Wear them to determine a sounds max range, distance, volume, and sound name. Highly recommended to walk otherwise you will get spammed with footstep sounds. +2024-12-30: + 00-Steven: + - bugfix: Photocopying no longer removes the stamp overlays from the original paper, + and actually copies them to the copy. + Rhials: + - balance: When dominating a mech as a Malfunctioning AI, the core you shunted from + will disable your Doomsday Counterdown when destroyed. Make sure to protect + that core! + grungussuss: + - rscadd: computers and airlocks are now leanable + - refactor: changed how density/collision of some objects is changed, report any + oddities! + mc-oofert: + - qol: you can adjust diagonal walls to be not diagonal walls with a wrench