From f68676267c1a3c1417b7ec5a63d70a369c8d4a8c Mon Sep 17 00:00:00 2001 From: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Date: Tue, 19 Aug 2025 09:12:36 -0400 Subject: [PATCH] Adds no-harm check to ai retaliate, adjusts clown AI (#30166) * Adds no-harm check to ai retaliate, adjusts clown AI * Update code/modules/mob/living/basic/retaliate/clown.dm Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> --------- Signed-off-by: PollardTheDragon <144391971+PollardTheDragon@users.noreply.github.com> Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com> --- code/datums/components/ai_retaliate_advanced.dm | 5 +++++ code/datums/elements/ai_retaliate.dm | 4 ++++ code/modules/mob/living/basic/retaliate/clown.dm | 6 ++++++ 3 files changed, 15 insertions(+) diff --git a/code/datums/components/ai_retaliate_advanced.dm b/code/datums/components/ai_retaliate_advanced.dm index c06617b938f..b9492f8bc54 100644 --- a/code/datums/components/ai_retaliate_advanced.dm +++ b/code/datums/components/ai_retaliate_advanced.dm @@ -33,5 +33,10 @@ if(!victim.ai_controller) return + if(isanimal_or_basicmob(attacker)) // Don't retaliate on nuzzles + var/mob/living/M = attacker + if(M.a_intent == INTENT_HELP) + return + victim.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) post_retaliate_callback?.InvokeAsync(attacker) diff --git a/code/datums/elements/ai_retaliate.dm b/code/datums/elements/ai_retaliate.dm index 837b9747ebc..627d489bb81 100644 --- a/code/datums/elements/ai_retaliate.dm +++ b/code/datums/elements/ai_retaliate.dm @@ -24,4 +24,8 @@ if(victim == attacker) return + if(isanimal_or_basicmob(attacker)) // Don't retaliate on nuzzles + var/mob/living/M = attacker + if(M.a_intent == INTENT_HELP) + return victim.ai_controller?.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) diff --git a/code/modules/mob/living/basic/retaliate/clown.dm b/code/modules/mob/living/basic/retaliate/clown.dm index 1b36f039188..949817e1003 100644 --- a/code/modules/mob/living/basic/retaliate/clown.dm +++ b/code/modules/mob/living/basic/retaliate/clown.dm @@ -41,7 +41,13 @@ /mob/living/basic/clown/proc/retaliate_callback(mob/living/attacker) if(!istype(attacker)) return + if(attacker.ai_controller) // Don't chain retaliates. + var/list/shitlist = attacker.ai_controller.blackboard[BB_BASIC_MOB_RETALIATE_LIST] + if(src in shitlist) + return for(var/mob/living/basic/clown/harbringer in oview(src, 7)) + if(harbringer == attacker) // Do not commit suicide attacking yourself + continue harbringer.ai_controller.insert_blackboard_key_lazylist(BB_BASIC_MOB_RETALIATE_LIST, attacker) /mob/living/basic/clown/goblin