From 050494fe31841512d2a6728b84027ffc4dee7dc0 Mon Sep 17 00:00:00 2001 From: warriorstar-orion Date: Wed, 19 Nov 2025 14:28:45 -0500 Subject: [PATCH] ensure some ai behavior procs call parent (#30703) * ensure some ai behavior procs call parent * fix slippage --- code/datums/ai/ai_behavior.dm | 2 ++ .../ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm | 2 ++ .../ai/basic_mobs/basic_ai_behaviors/befriend_target.dm | 1 + .../ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm | 1 + .../basic_mobs/basic_ai_behaviors/interact_with_target.dm | 1 + .../basic_mobs/basic_ai_behaviors/run_away_from_target.dm | 1 + .../ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm | 1 + .../datums/ai/basic_mobs/basic_ai_behaviors/swirl_around.dm | 1 + .../basic_mobs/basic_ai_behaviors/targeted_mob_abilities.dm | 1 + code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm | 1 + .../ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm | 1 + .../ai/basic_mobs/basic_ai_behaviors/travel_towards.dm | 2 ++ .../ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm | 1 + .../ai/basic_mobs/basic_subtrees/capricious_retaliate.dm | 1 + code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm | 1 + .../ai/basic_mobs/basic_subtrees/maintain_distance.dm | 3 +++ code/datums/ai/basic_mobs/basic_subtrees/make_babies.dm | 2 ++ code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm | 2 ++ code/datums/ai/basic_mobs/basic_subtrees/prowl.dm | 1 + code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm | 1 + .../datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm | 1 + code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm | 1 + .../ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm | 1 + .../ai/basic_mobs/basic_subtrees/ventcrawl_subtree.dm | 1 + .../ai/basic_mobs/hunting_behavior/find_hunt_target.dm | 1 + code/datums/ai/basic_mobs/hunting_behavior/hunt_target.dm | 1 + code/datums/ai/generic/find_and_set.dm | 1 + code/datums/ai/generic/generic_behaviors.dm | 1 + code/datums/components/pet_commands/pet_follow_friend.dm | 1 + code/modules/mob/living/basic/farm_animals/deer_ai.dm | 2 ++ .../mob/living/basic/hostile/bees/bee_ai_behaviors.dm | 2 ++ .../living/basic/hostile/giant_spider/giant_spider_ai.dm | 6 ++++++ code/modules/mob/living/basic/hostile/hivebot_ai.dm | 1 + .../modules/mob/living/basic/lavaland/goliath/goliath_ai.dm | 2 ++ code/modules/mob/living/basic/minebots/minebot_ai.dm | 2 ++ code/modules/mob/living/basic/mining/hivelord_ai.dm | 1 + 36 files changed, 52 insertions(+) diff --git a/code/datums/ai/ai_behavior.dm b/code/datums/ai/ai_behavior.dm index 567f3b836bb..a00c55aeb94 100644 --- a/code/datums/ai/ai_behavior.dm +++ b/code/datums/ai/ai_behavior.dm @@ -32,6 +32,7 @@ /// `finish_action` proc is given TRUE or FALSE depending on whether or not the /// return value of `perform` is marked as successful or unsuccessful. /datum/ai_behavior/proc/perform(seconds_per_tick, datum/ai_controller/controller, ...) + SHOULD_CALL_PARENT(TRUE) controller.behavior_cooldowns[src] = world.time + action_cooldown /// Called when the action is finished. This needs the same args as `perform` @@ -42,6 +43,7 @@ /// [/datum/ai_behavior/proc/perform] returns [AI_BEHAVIOR_SUCCEEDED] or /// [AI_BEHAVIOR_FAILED]. /datum/ai_behavior/proc/finish_action(datum/ai_controller/controller, succeeded, ...) + SHOULD_CALL_PARENT(TRUE) LAZYREMOVE(controller.current_behaviors, src) controller.behavior_args -= type // If this was a movement task, reset our movement target if necessary diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 010a7b1c431..6afc3576175 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -16,6 +16,7 @@ set_movement_target(controller, target) /datum/ai_behavior/basic_melee_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() if(isliving(controller.pawn)) var/mob/living/pawn = controller.pawn if(world.time < pawn.next_move) @@ -70,6 +71,7 @@ set_movement_target(controller, target) /datum/ai_behavior/basic_ranged_attack/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() var/mob/living/basic/basic_mob = controller.pawn //targeting strategy will kill the action if not real anymore var/atom/target = controller.blackboard[target_key] diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm index db09d11dd8e..9b546db88be 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/befriend_target.dm @@ -2,6 +2,7 @@ /datum/ai_behavior/befriend_target /datum/ai_behavior/befriend_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, befriend_message) + . = ..() var/mob/living/living_pawn = controller.pawn var/mob/living/living_target = controller.blackboard[target_key] if(QDELETED(living_target)) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm index 5884d08020f..4f93063b55a 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/emote_with_target.dm @@ -9,6 +9,7 @@ set_movement_target(controller, hunt_target) /datum/ai_behavior/emote_on_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, list/emote_list) + . = ..() var/atom/target = controller.blackboard[target_key] if(!length(emote_list) || isnull(target)) return AI_BEHAVIOR_FAILED | AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm index d52e5c38ad1..f38e87d6791 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/interact_with_target.dm @@ -14,6 +14,7 @@ set_movement_target(controller, target) /datum/ai_behavior/interact_with_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target) || !pre_interact(controller, target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm index 02c1a395b6f..5baa7cfa590 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/run_away_from_target.dm @@ -18,6 +18,7 @@ return ..() /datum/ai_behavior/run_away_from_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, hiding_location_key) + . = ..() if(controller.blackboard[BB_BASIC_MOB_STOP_FLEEING]) return AI_BEHAVIOR_DELAY var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm index 7e308866c91..ec97ec885de 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/stop_and_stare.dm @@ -11,6 +11,7 @@ return cooldown_for.blackboard[BB_STATIONARY_COOLDOWN] /datum/ai_behavior/stop_and_stare/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/atom/movable/target = controller.blackboard[target_key] if(!ismovable(target) || !isturf(target.loc)) // just to make sure that nothing funky happened between setup and perform return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/swirl_around.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/swirl_around.dm index b609c1d6bb0..ca6828e0c83 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/swirl_around.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/swirl_around.dm @@ -12,6 +12,7 @@ set_movement_target(controller, target) /datum/ai_behavior/swirl_around_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/atom/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_abilities.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_abilities.dm index 1e438ea0979..0ca6f569001 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_abilities.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeted_mob_abilities.dm @@ -5,6 +5,7 @@ /datum/ai_behavior/targeted_mob_ability /datum/ai_behavior/targeted_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key, target_key) + . = ..() var/datum/action/cooldown/ability = controller.blackboard[ability_key] var/mob/living/target = controller.blackboard[target_key] if(QDELETED(ability) || QDELETED(target)) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm index 80caa5595fe..12e89638d29 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/targeting.dm @@ -26,6 +26,7 @@ GLOBAL_LIST_INIT(target_interested_atoms, typecacheof(list( return ..() /datum/ai_behavior/find_potential_targets/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key) + . = ..() var/mob/living/living_mob = controller.pawn var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm index 1ea29108250..e2446a646af 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/tipped_reaction.dm @@ -2,6 +2,7 @@ /datum/ai_behavior/tipped_reaction /datum/ai_behavior/tipped_reaction/perform(seconds_per_tick, datum/ai_controller/controller, tipper_key, reacting_key) + . = ..() var/mob/living/carbon/tipper = controller.blackboard[tipper_key] // visible part of the visible message diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm index 4d053af2599..b6f244f989c 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/travel_towards.dm @@ -19,6 +19,7 @@ set_movement_target(controller, target, new_movement_type) /datum/ai_behavior/travel_towards/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/travel_towards/finish_action(datum/ai_controller/controller, succeeded, target_key) @@ -53,4 +54,5 @@ set_movement_target(controller, target_atom) /datum/ai_behavior/travel_towards_atom/perform(seconds_per_tick, datum/ai_controller/controller, atom/target_atom) + . = ..() return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm index 4c05ef3399f..d2691e9b3f2 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/attack_obstacle_in_path.dm @@ -27,6 +27,7 @@ var/can_attack_dense_objects = TRUE /datum/ai_behavior/attack_obstructions/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/mob/living/basic/basic_mob = controller.pawn var/atom/target = controller.blackboard[target_key] diff --git a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm index 79e1dd05747..d3b89472c8f 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/capricious_retaliate.dm @@ -14,6 +14,7 @@ action_cooldown = 1 SECONDS /datum/ai_behavior/capricious_retaliate/perform(seconds_per_tick, datum/ai_controller/controller, targeting_strategy_key, ignore_faction) + . = ..() var/atom/pawn = controller.pawn if(controller.blackboard_key_exists(BB_BASIC_MOB_RETALIATE_LIST)) var/deaggro_chance = controller.blackboard[BB_RANDOM_DEAGGRO_CHANCE] || 10 diff --git a/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm b/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm index ff794c1589f..65218e98099 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/find_parent.dm @@ -30,6 +30,7 @@ var/look_range = 7 /datum/ai_behavior/find_mom/perform(seconds_per_tick, datum/ai_controller/controller, mom_key, ignore_mom_key, found_mom) + . = ..() var/mob/living_pawn = controller.pawn var/list/mom_types = controller.blackboard[mom_key] var/list/all_moms = list() diff --git a/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm b/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm index c44ab8508bd..cb2d5bdb8d3 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/maintain_distance.dm @@ -61,6 +61,7 @@ return FALSE /datum/ai_behavior/step_away/perform(seconds_per_tick, datum/ai_controller/controller) + . = ..() return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/step_away/finish_action(datum/ai_controller/controller, succeeded) @@ -81,6 +82,7 @@ set_movement_target(controller, current_target) /datum/ai_behavior/pursue_to_range/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range) + . = ..() var/atom/current_target = controller.blackboard[target_key] if(!QDELETED(current_target) && get_dist(controller.pawn, current_target) > range) return AI_BEHAVIOR_INSTANT @@ -112,4 +114,5 @@ set_movement_target(controller, target = chosen_turf) /datum/ai_behavior/cover_minimum_distance/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/make_babies.dm b/code/datums/ai/basic_mobs/basic_subtrees/make_babies.dm index cd1f7e9d465..967a25e5f14 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/make_babies.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/make_babies.dm @@ -40,6 +40,7 @@ var/max_nearby_pop = 3 /datum/ai_behavior/find_partner/perform(seconds_per_tick, datum/ai_controller/controller, target_key, partner_types_key, child_types_key) + . = ..() var/maximum_pop = controller.blackboard[BB_MAX_CHILDREN] || max_nearby_pop var/mob/pawn_mob = controller.pawn var/list/similar_species_types = controller.blackboard[partner_types_key] + controller.blackboard[child_types_key] @@ -84,6 +85,7 @@ set_movement_target(controller, target) /datum/ai_behavior/make_babies/perform(seconds_per_tick, datum/ai_controller/controller, target_key, child_types_key) + . = ..() var/mob/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != CONSCIOUS) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm index 82cd3f47e5b..699f22528f4 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm @@ -1,6 +1,7 @@ /datum/ai_behavior/find_mineral_wall /datum/ai_behavior/find_mineral_wall/perform(seconds_per_tick, datum/ai_controller/controller, found_wall_key) + . = ..() var/mob/living_pawn = controller.pawn for(var/turf/simulated/mineral/potential_wall in oview(9, living_pawn)) @@ -45,6 +46,7 @@ action_cooldown = 15 SECONDS /datum/ai_behavior/interact_with_target/mine_wall/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/mob/living/basic/living_pawn = controller.pawn var/turf/simulated/mineral/target = controller.blackboard[target_key] if(!controller.ai_interact(target = target)) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm b/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm index e67c607da8b..bf7151524bb 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/prowl.dm @@ -2,6 +2,7 @@ search_turf_types = TRUE /datum/ai_behavior/find_hunt_target/prowl/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) + . = ..() var/mob/living/living_mob = controller.pawn var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob) shuffle_inplace(interesting_objects) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm index fcd8e460392..167adecde79 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -28,6 +28,7 @@ return !QDELETED(target) /datum/ai_behavior/ranged_skirmish/perform(seconds_per_tick, datum/ai_controller/controller, target_key, targeting_strategy_key, hiding_location_key, max_range, min_range) + . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm index 42a4e70081c..c45112d9756 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/target_retaliate.dm @@ -34,6 +34,7 @@ var/vision_range = 9 /datum/ai_behavior/target_from_retaliate_list/perform(seconds_per_tick, datum/ai_controller/controller, shitlist_key, target_key, targeting_strategy_key, hiding_location_key, check_faction) + . = ..() var/mob/living/living_mob = controller.pawn var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) if(!targeting_strategy) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm index f16bc68ca60..0f579c36642 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/use_mob_ability.dm @@ -25,6 +25,7 @@ /datum/ai_behavior/use_mob_ability /datum/ai_behavior/use_mob_ability/perform(seconds_per_tick, datum/ai_controller/controller, ability_key) + . = ..() var/datum/action/using_action = controller.blackboard[ability_key] if(QDELETED(using_action)) return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm b/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm index 2a56c9cb934..ec6d1bd43e7 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_find_target.dm @@ -20,6 +20,7 @@ action_cooldown = 45 SECONDS /datum/ai_behavior/find_ventcrawl_target/perform(seconds_per_tick, datum/ai_controller/controller, target_key, range) + . = ..() var/list/vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/v in view(range, controller.pawn)) if(!v.welded) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_subtree.dm b/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_subtree.dm index 37f70dcfc60..e7c0edf0d4a 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_subtree.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ventcrawl_subtree.dm @@ -156,6 +156,7 @@ set_movement_target(controller, target) /datum/ai_behavior/interact_with_vent/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/datums/ai/basic_mobs/hunting_behavior/find_hunt_target.dm b/code/datums/ai/basic_mobs/hunting_behavior/find_hunt_target.dm index 4d3ac43ae88..1d2a2e10e03 100644 --- a/code/datums/ai/basic_mobs/hunting_behavior/find_hunt_target.dm +++ b/code/datums/ai/basic_mobs/hunting_behavior/find_hunt_target.dm @@ -4,6 +4,7 @@ var/search_turf_types = FALSE /datum/ai_behavior/find_hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, types_to_hunt, hunt_range) + . = ..() var/mob/living/living_mob = controller.pawn var/list/interesting_objects = search_turf_types ? RANGE_TURFS(hunt_range, living_mob) : oview(hunt_range, living_mob) for(var/atom/possible_dinner as anything in typecache_filter_list(interesting_objects, types_to_hunt)) diff --git a/code/datums/ai/basic_mobs/hunting_behavior/hunt_target.dm b/code/datums/ai/basic_mobs/hunting_behavior/hunt_target.dm index 8673b3addec..417c11f9604 100644 --- a/code/datums/ai/basic_mobs/hunting_behavior/hunt_target.dm +++ b/code/datums/ai/basic_mobs/hunting_behavior/hunt_target.dm @@ -14,6 +14,7 @@ set_movement_target(controller, hunt_target) /datum/ai_behavior/hunt_target/perform(seconds_per_tick, datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) + . = ..() var/mob/living/hunter = controller.pawn var/atom/hunted = controller.blackboard[hunting_target_key] diff --git a/code/datums/ai/generic/find_and_set.dm b/code/datums/ai/generic/find_and_set.dm index ffef9def4f9..e610769556c 100644 --- a/code/datums/ai/generic/find_and_set.dm +++ b/code/datums/ai/generic/find_and_set.dm @@ -7,6 +7,7 @@ action_cooldown = 2 SECONDS /datum/ai_behavior/find_and_set/perform(seconds_per_tick, datum/ai_controller/controller, set_key, locate_path, search_range) + . = ..() if(controller.blackboard_key_exists(set_key)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED if(QDELETED(controller.pawn)) diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm index 8d87229f674..3f66de7af8c 100644 --- a/code/datums/ai/generic/generic_behaviors.dm +++ b/code/datums/ai/generic/generic_behaviors.dm @@ -1,6 +1,7 @@ /datum/ai_behavior/perform_emote /datum/ai_behavior/perform_emote/perform(seconds_per_tick, datum/ai_controller/controller, emote, speech_sound) + . = ..() var/mob/living/living_pawn = controller.pawn if(!istype(living_pawn)) return AI_BEHAVIOR_INSTANT diff --git a/code/datums/components/pet_commands/pet_follow_friend.dm b/code/datums/components/pet_commands/pet_follow_friend.dm index 4ba01febdde..f2f8d818097 100644 --- a/code/datums/components/pet_commands/pet_follow_friend.dm +++ b/code/datums/components/pet_commands/pet_follow_friend.dm @@ -10,6 +10,7 @@ set_movement_target(controller, target) /datum/ai_behavior/pet_follow_friend/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/modules/mob/living/basic/farm_animals/deer_ai.dm b/code/modules/mob/living/basic/farm_animals/deer_ai.dm index 6607ae0aea2..ccf91f9fce1 100644 --- a/code/modules/mob/living/basic/farm_animals/deer_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/deer_ai.dm @@ -138,6 +138,7 @@ return FALSE /datum/ai_behavior/return_home/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/mob/living/living_pawn = controller.pawn var/static/list/possible_emotes = list("rests its legs...", "yawns and naps...", "curls up and rests...") living_pawn.custom_emote(EMOTE_VISIBLE, pick(possible_emotes)) @@ -149,4 +150,5 @@ behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT /datum/ai_behavior/return_home/incursion_portal/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() return AI_BEHAVIOR_SUCCEEDED diff --git a/code/modules/mob/living/basic/hostile/bees/bee_ai_behaviors.dm b/code/modules/mob/living/basic/hostile/bees/bee_ai_behaviors.dm index cb3b5732a05..264102ae251 100644 --- a/code/modules/mob/living/basic/hostile/bees/bee_ai_behaviors.dm +++ b/code/modules/mob/living/basic/hostile/bees/bee_ai_behaviors.dm @@ -27,6 +27,7 @@ set_movement_target(controller, target) /datum/ai_behavior/enter_exit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) + . = ..() var/obj/structure/beebox/current_home = controller.blackboard[target_key] var/atom/attack_target = controller.blackboard[attack_key] @@ -47,6 +48,7 @@ set_movement_target(controller, target) /datum/ai_behavior/inhabit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/obj/structure/beebox/potential_home = controller.blackboard[target_key] var/mob/living/bee_pawn = controller.pawn 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 95769fd0d73..77eb0c27dbe 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 @@ -79,6 +79,7 @@ var/scan_range = 3 /datum/ai_behavior/find_unwebbed_turf/perform(seconds_per_tick, datum/ai_controller/controller) + . = ..() var/mob/living/spider = controller.pawn var/atom/current_target = controller.blackboard[target_key] if(current_target && !(locate(/obj/structure/spider/stickyweb) in current_target)) @@ -145,6 +146,7 @@ return ..() /datum/ai_behavior/spin_web/perform(seconds_per_tick, datum/ai_controller/controller, action_key, target_key) + . = ..() var/datum/action/innate/web_giant_spider/web_action = controller.blackboard[action_key] if(web_action?.Trigger()) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED @@ -169,6 +171,7 @@ var/scan_range = 3 /datum/ai_behavior/find_unwrapped_target/perform(seconds_per_tick, datum/ai_controller/controller) + . = ..() var/mob/living/spider = controller.pawn var/atom/current_target = controller.blackboard[target_key] if(current_target) @@ -225,6 +228,7 @@ return ..() /datum/ai_behavior/wrap_target/perform(seconds_per_tick, datum/ai_controller/controller, action_key, target_key) + . = ..() var/datum/action/innate/wrap_giant_spider/wrap_action = controller.blackboard[action_key] if(wrap_action?.Trigger()) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED @@ -257,6 +261,7 @@ return ..() /datum/ai_behavior/lay_eggs/perform(seconds_per_tick, datum/ai_controller/controller, action_key) + . = ..() var/datum/action/innate/lay_eggs_giant_spider/egg_action = controller.blackboard[action_key] if(egg_action?.Trigger()) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED @@ -293,6 +298,7 @@ set_movement_target(controller, target) /datum/ai_behavior/cling_spider_follow/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/atom/target = controller.blackboard[target_key] if(QDELETED(target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED diff --git a/code/modules/mob/living/basic/hostile/hivebot_ai.dm b/code/modules/mob/living/basic/hostile/hivebot_ai.dm index 92c04081f81..4821976a529 100644 --- a/code/modules/mob/living/basic/hostile/hivebot_ai.dm +++ b/code/modules/mob/living/basic/hostile/hivebot_ai.dm @@ -80,6 +80,7 @@ set_movement_target(controller, target) /datum/ai_behavior/relay_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/mob/living/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn diff --git a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm index 81615341134..0df6a02bfd4 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm @@ -67,6 +67,7 @@ var/scan_range = 3 /datum/ai_behavior/goliath_find_diggable_turf/perform(seconds_per_tick, datum/ai_controller/controller) + . = ..() var/turf/target_turf = controller.blackboard[target_key] if(is_valid_turf(target_turf)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED @@ -110,6 +111,7 @@ set_movement_target(controller, target_turf) /datum/ai_behavior/goliath_dig/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/turf/target_turf = controller.blackboard[target_key] var/mob/living/basic/basic_mob = controller.pawn if(!basic_mob.can_reach(target_turf)) diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 6463b91f966..d2e6b326440 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -67,6 +67,7 @@ action_cooldown = 2 MINUTES /datum/ai_behavior/send_sos_message/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/mob/living/carbon/target = controller.blackboard[target_key] var/mob/living/living_pawn = controller.pawn if(QDELETED(target) || is_station_level(target.z)) @@ -157,6 +158,7 @@ set_movement_target(controller, target) /datum/ai_behavior/minebot_mine_turf/perform(seconds_per_tick, datum/ai_controller/controller, target_key) + . = ..() var/mob/living/basic/living_pawn = controller.pawn var/turf/target = controller.blackboard[target_key] diff --git a/code/modules/mob/living/basic/mining/hivelord_ai.dm b/code/modules/mob/living/basic/mining/hivelord_ai.dm index 4d7103e5fcb..3c914b2ce30 100644 --- a/code/modules/mob/living/basic/mining/hivelord_ai.dm +++ b/code/modules/mob/living/basic/mining/hivelord_ai.dm @@ -126,6 +126,7 @@ required_distance = 0 /datum/ai_behavior/summon_brood/perform(seconds_per_tick, datum/ai_controller/controller) + . = ..() var/mob/living/basic/mining/hivelord/summoner = controller.pawn var/mob/living/basic/mining/hivelordbrood/A = new summoner.brood_type(summoner.loc) A.admin_spawned = summoner.admin_spawned