From 31eaeb64bf15e515c70bcf73ef19b0a7665118ad Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Wed, 16 Mar 2022 00:16:05 +0100 Subject: [PATCH] [MIRROR] Fixes dog AI lockups when fetching things, adds growling noises for dog attack mode [MDB IGNORE] (#12105) * Improves dog AI resilience (#65384) About The Pull Request AI dogs currently have a nasty habit of getting stuck when trying to fetch items sometimes, rendering their AI behavior basically dead as they're stuck in a state where they're unable to accept any commands/inputs from their environment. This PR fixes that by adding some more robust checks to make sure a failed fetch attempt doesn't softlock the pups. This PR also adds some growling sounds for dogs in harass mode who are guarding against someone not within biting distance. Why It's Good For The Game Fixes some edge cases where dog AI would stop working entirely. Makes dog AI's in attack mode more conspicuous, and less reliant on text spam to show that. Changelog cl Ryll/Shaps fix: Dog AI's should no longer lock up and become unresponsive after failed fetch attempts soundadd: Dogs in harass mode that are guarding against someone will now make growling sounds /cl * Fixes dog AI lockups when fetching things, adds growling noises for dog attack mode Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com> --- code/__DEFINES/ai.dm | 5 ++++- code/datums/ai/dog/dog_behaviors.dm | 20 ++++++++++++++++-- code/datums/ai/dog/dog_controller.dm | 6 ++++-- code/datums/ai/oldhostile/hostile_tameable.dm | 2 +- sound/attributions.txt | 2 ++ sound/creatures/dog/growl1.ogg | Bin 0 -> 9359 bytes sound/creatures/dog/growl2.ogg | Bin 0 -> 13102 bytes 7 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 sound/creatures/dog/growl1.ogg create mode 100644 sound/creatures/dog/growl2.ogg diff --git a/code/__DEFINES/ai.dm b/code/__DEFINES/ai.dm index fd30ac7e590..076efefc7d5 100644 --- a/code/__DEFINES/ai.dm +++ b/code/__DEFINES/ai.dm @@ -161,6 +161,7 @@ #define BB_DOG_ORDER_MODE "BB_DOG_ORDER_MODE" #define BB_DOG_PLAYING_DEAD "BB_DOG_PLAYING_DEAD" #define BB_DOG_HARASS_TARGET "BB_DOG_HARASS_TARGET" +#define BB_DOG_HARASS_FRUSTRATION "BB_DOG_HARASS_FRUSTRATION" /// Basically, what is our vision/hearing range for picking up on things to fetch/ #define AI_DOG_VISION_RANGE 10 @@ -171,7 +172,9 @@ /// After being ordered to heel, we spend this long chilling out #define AI_DOG_HEEL_DURATION 20 SECONDS /// After either being given a verbal order or a pointing order, ignore further of each for this duration -#define AI_DOG_COMMAND_COOLDOWN 2 SECONDS +#define AI_DOG_COMMAND_COOLDOWN 2 SECONDS +/// If the dog is set to harass someone but doesn't bite them for this long, give up +#define AI_DOG_HARASS_FRUSTRATE_TIME 50 SECONDS // dog command modes (what pointing at something/someone does depending on the last order the dog heard) /// Don't do anything (will still react to stuff around them though) diff --git a/code/datums/ai/dog/dog_behaviors.dm b/code/datums/ai/dog/dog_behaviors.dm index c4cd2176c43..76f11a9cae1 100644 --- a/code/datums/ai/dog/dog_behaviors.dm +++ b/code/datums/ai/dog/dog_behaviors.dm @@ -45,6 +45,8 @@ /datum/ai_behavior/simple_equip/finish_action(datum/ai_controller/controller, success) . = ..() controller.blackboard[BB_FETCH_TARGET] = null + if(!success) + controller.blackboard[BB_FETCH_DELIVER_TO] = null /datum/ai_behavior/simple_equip/proc/pickup_item(datum/ai_controller/controller, obj/item/target) var/atom/pawn = controller.pawn @@ -82,6 +84,7 @@ /datum/ai_behavior/deliver_item/finish_action(datum/ai_controller/controller, success) . = ..() + controller.blackboard[BB_FETCH_TARGET] = null controller.blackboard[BB_FETCH_DELIVER_TO] = null /// Actually drop the fetched item to the target @@ -98,7 +101,7 @@ controller.pawn.visible_message(span_notice("[controller.pawn] delivers [carried_item] to [return_target].")) carried_item.forceMove(get_turf(return_target)) - controller.blackboard -= BB_SIMPLE_CARRY_ITEM + controller.blackboard[BB_SIMPLE_CARRY_ITEM] = null return TRUE /// This behavior involves either eating a snack we can reach, or begging someone holding a snack @@ -184,21 +187,34 @@ finish_action(controller, TRUE) return + if(!controller.blackboard[BB_DOG_HARASS_FRUSTRATION]) + controller.blackboard[BB_DOG_HARASS_FRUSTRATION] = world.time + else if(controller.blackboard[BB_DOG_HARASS_FRUSTRATION] + AI_DOG_HARASS_FRUSTRATE_TIME < world.time) // if we haven't actually bit them in a while, give up + living_pawn.visible_message(span_danger("[living_pawn] yawns and seems to lose interest in harassing [harass_target].")) + finish_action(controller, FALSE) + return + // subtypes of this behavior can change behavior for how eager/averse the pawn is to attack the target as opposed to falling back/making noise/getting help if(in_range(living_pawn, living_target)) attack(controller, living_target) - else if(DT_PROB(50, delta_time)) + else if(DT_PROB(15, delta_time)) living_pawn.manual_emote("[pick("barks", "growls", "stares")] menacingly at [harass_target]!") + if(DT_PROB(40, delta_time)) + playsound(living_pawn, pick('sound/creatures/dog/growl1.ogg', 'sound/creatures/dog/growl2.ogg'), 50, TRUE, -1) /datum/ai_behavior/harass/finish_action(datum/ai_controller/controller, succeeded) . = ..() controller.blackboard[BB_DOG_HARASS_TARGET] = null + controller.blackboard[BB_DOG_HARASS_FRUSTRATION] = null /// A proc representing when the mob is pushed to actually attack the target. Again, subtypes can be used to represent different attacks from different animals, or it can be some other generic behavior /datum/ai_behavior/harass/proc/attack(datum/ai_controller/controller, mob/living/living_target) var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) return + + controller.blackboard[BB_DOG_HARASS_FRUSTRATION] = world.time + // make sure the pawn gets some temporary strength boost to actually attack the target instead of pathetically nuzzling them. var/old_melee_lower = living_pawn.melee_damage_lower var/old_melee_upper = living_pawn.melee_damage_upper diff --git a/code/datums/ai/dog/dog_controller.dm b/code/datums/ai/dog/dog_controller.dm index 744bf3891de..646bf6d2d50 100644 --- a/code/datums/ai/dog/dog_controller.dm +++ b/code/datums/ai/dog/dog_controller.dm @@ -7,7 +7,9 @@ BB_FETCH_IGNORE_LIST = list(),\ BB_DOG_ORDER_MODE = DOG_COMMAND_NONE,\ BB_DOG_PLAYING_DEAD = FALSE,\ - BB_DOG_HARASS_TARGET = null) + BB_DOG_HARASS_TARGET = null,\ + BB_DOG_HARASS_FRUSTRATION = null,\ + BB_VISION_RANGE = AI_DOG_VISION_RANGE) ai_movement = /datum/ai_movement/jps planning_subtrees = list(/datum/ai_planning_subtree/dog) @@ -202,7 +204,7 @@ var/command if(findtext(spoken_text, "heel") || findtext(spoken_text, "sit") || findtext(spoken_text, "stay")) command = COMMAND_HEEL - else if(findtext(spoken_text, "fetch") || findtext(spoken_text, "get it")) + else if(findtext(spoken_text, "fetch")) command = COMMAND_FETCH else if(findtext(spoken_text, "attack") || findtext(spoken_text, "sic")) command = COMMAND_ATTACK diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm index 1e64280eb45..97fa31cb0d7 100644 --- a/code/datums/ai/oldhostile/hostile_tameable.dm +++ b/code/datums/ai/oldhostile/hostile_tameable.dm @@ -174,7 +174,7 @@ pawn.visible_message(span_notice("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] stop[pawn.p_s()] obediently, awaiting further orders.")) blackboard[BB_HOSTILE_ORDER_MODE] = HOSTILE_COMMAND_NONE CancelActions() - // fetch: whatever the commander points to, try and bring it back + // follow: whatever the commander points to, try and bring it back if(COMMAND_FOLLOW) pawn.visible_message(span_notice("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] follow[pawn.p_s()] slightly in anticipation.")) CancelActions() diff --git a/sound/attributions.txt b/sound/attributions.txt index e177646b780..4fe5ad2ad95 100644 --- a/sound/attributions.txt +++ b/sound/attributions.txt @@ -27,3 +27,5 @@ can_shake.ogg adapted from https://freesound.org/people/mcmast/sounds/456703/ splatter.ogg adapted from https://freesound.org/people/Rocktopus/sounds/233418/ hohoho.ogg and hehe.ogg are cut from a recording by Nanakisan on freesound: https://freesound.org/people/Nanakisan/sounds/253534/ mbox_full.ogg and mbox_end.ogg make use of The Ragtime Drummer by James Lent, in the public domain + +growl1.ogg and growl2.ogg in /sound/creatures/dog are adapted from Glitchedtones's Freesound shih-tzu uploads https://freesound.org/people/Glitchedtones/ diff --git a/sound/creatures/dog/growl1.ogg b/sound/creatures/dog/growl1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..06ec30f12f0b4f4cfe385db581d14e3f6756724b GIT binary patch literal 9359 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 literal 0 HcmV?d00001 diff --git a/sound/creatures/dog/growl2.ogg b/sound/creatures/dog/growl2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..804bd8150aa164a36e7330e10c518f245fc5c1bf GIT binary patch literal 13102 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 literal 0 HcmV?d00001