From a4b1ac0444aa3a8fcd021aebca2f8aede0ac249c Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:50:00 -0400 Subject: [PATCH] Giant changeling spider aggression fix (#30274) * Giant changeling spider aggression fix * Moved changeling spiders to _DEFINES and used them as needed --- .../ai/changeling_giant_spider_ai_defines.dm | 4 ++++ .../antagonists/changeling/powers/summon_spiders.dm | 10 ---------- .../basic/hostile/giant_spider/giant_spider_ai.dm | 13 ++++++++++--- paradise.dme | 1 + 4 files changed, 15 insertions(+), 13 deletions(-) create mode 100644 code/__DEFINES/ai/changeling_giant_spider_ai_defines.dm diff --git a/code/__DEFINES/ai/changeling_giant_spider_ai_defines.dm b/code/__DEFINES/ai/changeling_giant_spider_ai_defines.dm new file mode 100644 index 00000000000..1c160ea93c8 --- /dev/null +++ b/code/__DEFINES/ai/changeling_giant_spider_ai_defines.dm @@ -0,0 +1,4 @@ +#define FOLLOW_AGGRESSIVE 0 +#define FOLLOW_RETALIATE 1 +#define IDLE_AGGRESSIVE 2 +#define IDLE_RETALIATE 3 diff --git a/code/modules/antagonists/changeling/powers/summon_spiders.dm b/code/modules/antagonists/changeling/powers/summon_spiders.dm index c332a660742..640930b7884 100644 --- a/code/modules/antagonists/changeling/powers/summon_spiders.dm +++ b/code/modules/antagonists/changeling/powers/summon_spiders.dm @@ -1,8 +1,3 @@ -#define FOLLOW_AGGRESSIVE 0 -#define FOLLOW_RETALIATE 1 -#define IDLE_AGGRESSIVE 2 -#define IDLE_RETALIATE 3 - /datum/action/changeling/spiders name = "Spread Infestation" desc = "Our form divides, creating an aggressive arachnid which will regard us as a friend. Costs 30 chemicals." @@ -120,8 +115,3 @@ if(IDLE_AGGRESSIVE) to_chat(user, "We order the giant spider to remain idle, but ready to attack anyone on sight.") ai_controller.set_blackboard_key(BB_CHANGELING_SPIDER_ORDER, IDLE_AGGRESSIVE) - -#undef IDLE_AGGRESSIVE -#undef FOLLOW_AGGRESSIVE -#undef FOLLOW_RETALIATE -#undef IDLE_RETALIATE diff --git a/code/modules/mob/living/basic/hostile/giant_spider/giant_spider_ai.dm b/code/modules/mob/living/basic/hostile/giant_spider/giant_spider_ai.dm index 18aa39411cf..95769fd0d73 100644 --- a/code/modules/mob/living/basic/hostile/giant_spider/giant_spider_ai.dm +++ b/code/modules/mob/living/basic/hostile/giant_spider/giant_spider_ai.dm @@ -33,7 +33,7 @@ /datum/ai_controller/basic_controller/giant_spider/changeling blackboard = list( - BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, + BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends/changeling_spiders, ) planning_subtrees = list( /datum/ai_planning_subtree/simple_find_target/cling_spider, @@ -52,6 +52,13 @@ /datum/ai_planning_subtree/basic_melee_attack_subtree, ) +/datum/targeting_strategy/basic/not_friends/changeling_spiders + +/datum/targeting_strategy/basic/not_friends/changeling_spiders/can_attack(mob/living/living_mob, atom/target, vision_range) + if(living_mob?.ai_controller?.blackboard[BB_CHANGELING_SPIDER_ORDER] && (living_mob?.ai_controller?.blackboard[BB_CHANGELING_SPIDER_ORDER] == FOLLOW_RETALIATE || living_mob?.ai_controller?.blackboard[BB_CHANGELING_SPIDER_ORDER] == IDLE_RETALIATE)) + return FALSE + return ..() + /datum/ai_planning_subtree/random_speech/insect speech_chance = 2 sound = list('sound/creatures/chitter.ogg') @@ -259,7 +266,7 @@ /datum/ai_planning_subtree/simple_find_target/cling_spider /datum/ai_planning_subtree/simple_find_target/cling_spider/select_behaviors(datum/ai_controller/controller, seconds_per_tick) - if(controller.blackboard[BB_CHANGELING_SPIDER_ORDER] == 1 || controller.blackboard[BB_CHANGELING_SPIDER_ORDER] == 3) + if(controller.blackboard[BB_CHANGELING_SPIDER_ORDER] == FOLLOW_RETALIATE || controller.blackboard[BB_CHANGELING_SPIDER_ORDER] == IDLE_RETALIATE) return return ..() @@ -269,7 +276,7 @@ var/target_key = BB_CURRENT_PET_TARGET /datum/ai_planning_subtree/cling_spider_follow/select_behaviors(datum/ai_controller/controller, seconds_per_tick) - if(controller.blackboard_key_exists(target_key) && controller.blackboard[BB_CHANGELING_SPIDER_ORDER] < 2) + if(controller.blackboard_key_exists(target_key) && controller.blackboard[BB_CHANGELING_SPIDER_ORDER] < IDLE_AGGRESSIVE) controller.queue_behavior(/datum/ai_behavior/cling_spider_follow, target_key) return SUBTREE_RETURN_FINISH_PLANNING diff --git a/paradise.dme b/paradise.dme index 3a1244c5bdf..807eebcaaa7 100644 --- a/paradise.dme +++ b/paradise.dme @@ -157,6 +157,7 @@ #include "code\__DEFINES\zoom.dm" #include "code\__DEFINES\ai\ai_defines.dm" #include "code\__DEFINES\ai\blackboard_defines.dm" +#include "code\__DEFINES\ai\changeling_giant_spider_ai_defines.dm" #include "code\__DEFINES\dcs\ai_signals.dm" #include "code\__DEFINES\dcs\area_signals.dm" #include "code\__DEFINES\dcs\atom_signals.dm"