diff --git a/code/__DEFINES/ai/ai.dm b/code/__DEFINES/ai/ai.dm index 7cb863d07c1..7266ad44990 100644 --- a/code/__DEFINES/ai/ai.dm +++ b/code/__DEFINES/ai/ai.dm @@ -61,6 +61,13 @@ #define PAUSE_DURING_DO_AFTER (1<<2) /// Continue processing while in stasis #define CAN_ACT_IN_STASIS (1<<3) +/// Continue processing while aggressively grabbed +#define CAN_ACT_WHILE_GRABBED (1<<4) + +/// Flags we expect for most AI controllers +#define DEFAULT_AI_FLAGS (PAUSE_DURING_DO_AFTER | CAN_ACT_WHILE_GRABBED) +/// Flags for passive mobs that are easy to push around +#define PASSIVE_AI_FLAGS (PAUSE_DURING_DO_AFTER | STOP_MOVING_WHEN_PULLED) //Base Subtree defines diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 12cbc32d66c..7fb76efcc62 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -18,7 +18,7 @@ multiple modular subtrees with behaviors var/list/blackboard = list() ///Bitfield of traits for this AI to handle extra behavior - var/ai_traits = NONE + var/ai_traits = DEFAULT_AI_FLAGS ///Current actions planned to be performed by the AI in the upcoming plan var/list/planned_behaviors = list() ///Current actions being performed by the AI. diff --git a/code/datums/ai/basic_mobs/base_basic_controller.dm b/code/datums/ai/basic_mobs/base_basic_controller.dm index 7eb1279bb66..4fe208667af 100644 --- a/code/datums/ai/basic_mobs/base_basic_controller.dm +++ b/code/datums/ai/basic_mobs/base_basic_controller.dm @@ -33,12 +33,18 @@ if(. & AI_UNABLE_TO_RUN) return . var/mob/living/living_pawn = pawn - if(!(ai_traits & CAN_ACT_WHILE_DEAD)) - // Unroll for flags here - if((ai_traits & CAN_ACT_IN_STASIS) && (living_pawn.stat || INCAPACITATED_IGNORING(living_pawn, INCAPABLE_STASIS))) - return AI_UNABLE_TO_RUN - if(IS_DEAD_OR_INCAP(living_pawn)) - return AI_UNABLE_TO_RUN + if (living_pawn.stat && !(ai_traits & CAN_ACT_WHILE_DEAD)) + return AI_UNABLE_TO_RUN + + var/ignore_incap_flags = NONE + if((ai_traits & CAN_ACT_IN_STASIS)) + ignore_incap_flags |= INCAPABLE_STASIS + if((ai_traits & CAN_ACT_WHILE_GRABBED)) + ignore_incap_flags |= INCAPABLE_GRAB + + if(INCAPACITATED_IGNORING(living_pawn, ignore_incap_flags)) + return AI_UNABLE_TO_RUN + if(ai_traits & PAUSE_DURING_DO_AFTER && LAZYLEN(living_pawn.do_afters)) return AI_UNABLE_TO_RUN | AI_PREVENT_CANCEL_ACTIONS //dont erase targets post a do_after diff --git a/code/datums/ai/basic_mobs/basic_subtrees/escape_captivity.dm b/code/datums/ai/basic_mobs/basic_subtrees/escape_captivity.dm new file mode 100644 index 00000000000..bf3c4dc01ea --- /dev/null +++ b/code/datums/ai/basic_mobs/basic_subtrees/escape_captivity.dm @@ -0,0 +1,68 @@ +/// Generically try to escape from being trapped +/datum/ai_planning_subtree/escape_captivity + /// Targeting strategy for use deciding if we can attack a mob grabbing us + var/targeting_strategy_key = BB_TARGETING_STRATEGY + /// If true we will never attack objects + var/pacifist = FALSE + +/datum/ai_planning_subtree/escape_captivity/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) + var/mob/living/living_pawn = controller.pawn + + if (living_pawn.buckled && !ismob(living_pawn.buckled)) + if (!pacifist && !living_pawn.can_hold_items() || living_pawn.usable_hands < 1) // If we don't have hands then prioritise slapping the shit out of whatever we are attached to + controller.queue_behavior(/datum/ai_behavior/break_out_of_object, living_pawn.buckled) + else + controller.queue_behavior(/datum/ai_behavior/resist) + return SUBTREE_RETURN_FINISH_PLANNING + + if (!isturf(living_pawn.loc) && !ismob(living_pawn.loc)) + var/atom/contained_in = living_pawn.loc + var/attack_effective = FALSE + if (!pacifist) + if (isbasicmob(living_pawn)) // Currently this literally only works for basic mobs because it's hard to check for anyone else but it's ok because only they use this subtree + var/mob/living/basic/basic_pawn = living_pawn + attack_effective = basic_pawn.obj_damage > contained_in.damage_deflection + if (attack_effective) + controller.queue_behavior(/datum/ai_behavior/break_out_of_object, contained_in) + else + controller.queue_behavior(/datum/ai_behavior/resist) + return SUBTREE_RETURN_FINISH_PLANNING + + var/mob/puller = living_pawn.pulledby + if (puller && puller.grab_state > GRAB_PASSIVE) + var/datum/targeting_strategy/targeting_strategy = GET_TARGETING_STRATEGY(controller.blackboard[targeting_strategy_key]) + var/friends_list = controller.blackboard[BB_FRIENDS_LIST] || list() + // Only resist grabs from mobs that aren't in our faction + if (targeting_strategy?.can_attack(living_pawn, puller) && !(puller in friends_list)) + controller.queue_behavior(/datum/ai_behavior/resist) + return SUBTREE_RETURN_FINISH_PLANNING + + if (HAS_TRAIT(living_pawn, TRAIT_RESTRAINED)) + controller.queue_behavior(/datum/ai_behavior/resist) + return SUBTREE_RETURN_FINISH_PLANNING + +/// Keep attacking an object while it is our loc or while we are buckled to it +/datum/ai_behavior/break_out_of_object + action_cooldown = 0.2 SECONDS + +/datum/ai_behavior/break_out_of_object/setup(datum/ai_controller/controller, atom/target) + if (!should_attack_target(controller, target)) + return FALSE + return TRUE + +/datum/ai_behavior/break_out_of_object/perform(seconds_per_tick, datum/ai_controller/controller, atom/target_atom) + if (!should_attack_target(controller, target_atom)) + return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED + controller.ai_interact(target = target_atom, combat_mode = TRUE) + return AI_BEHAVIOR_DELAY + +/datum/ai_behavior/break_out_of_object/proc/should_attack_target(datum/ai_controller/controller, atom/target) + if (QDELETED(target)) + return FALSE + var/mob/living/pawn = controller.pawn + if (!pawn.CanReach(target)) + return FALSE + return pawn.loc == target || pawn.buckled == target + +/datum/ai_planning_subtree/escape_captivity/pacifist + pacifist = TRUE diff --git a/code/datums/ai/basic_mobs/generic_controllers.dm b/code/datums/ai/basic_mobs/generic_controllers.dm index 8bf0026e1aa..b6581a5cb8b 100644 --- a/code/datums/ai/basic_mobs/generic_controllers.dm +++ b/code/datums/ai/basic_mobs/generic_controllers.dm @@ -10,6 +10,7 @@ /// The most basic AI tree which just finds a guy and then runs at them to click them /datum/ai_controller/basic_controller/simple/simple_hostile planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) @@ -17,6 +18,7 @@ /// Find a target, walk at target, attack intervening obstacles /datum/ai_controller/basic_controller/simple/simple_hostile_obstacles planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -25,6 +27,7 @@ /// Find a target, walk at target, attack intervening obstacles /datum/ai_controller/basic_controller/simple/simple_ranged planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance, /datum/ai_planning_subtree/ranged_skirmish, @@ -32,6 +35,7 @@ /datum/ai_controller/basic_controller/simple/simple_ranged_retaliate planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/maintain_distance, /datum/ai_planning_subtree/ranged_skirmish, @@ -40,6 +44,7 @@ /// Find a target, walk towards it AND shoot it /datum/ai_controller/basic_controller/simple/simple_skirmisher planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/ranged_skirmish, /datum/ai_planning_subtree/attack_obstacle_in_path, @@ -49,6 +54,7 @@ /// Use an ability on target on cooldown /datum/ai_controller/basic_controller/simple/simple_ability planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance, /datum/ai_planning_subtree/targeted_mob_ability, @@ -56,6 +62,7 @@ /datum/ai_controller/basic_controller/simple/simple_ability_retaliate planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/maintain_distance, /datum/ai_planning_subtree/targeted_mob_ability, @@ -64,6 +71,7 @@ /// Use an ability on target on cooldown, then try to punch them /datum/ai_controller/basic_controller/simple/simple_ability_melee planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability, /datum/ai_planning_subtree/attack_obstacle_in_path, @@ -73,6 +81,7 @@ /// Use an ability on target on cooldown, then try to shoot them /datum/ai_controller/basic_controller/simple/simple_ability_ranged planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance, /datum/ai_planning_subtree/targeted_mob_ability, @@ -81,7 +90,7 @@ /// Fight back if attacked /datum/ai_controller/basic_controller/simple/simple_retaliate - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED planning_subtrees = list( /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -89,8 +98,9 @@ /// Get pissed at random people for no reason /datum/ai_controller/basic_controller/simple/simple_capricious - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/capricious_retaliate, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -98,7 +108,7 @@ /// Runs away from anyone it sees /datum/ai_controller/basic_controller/simple/simple_fearful - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS planning_subtrees = list( /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/flee_target, @@ -106,7 +116,7 @@ /// Runs away when attacked /datum/ai_controller/basic_controller/simple/simple_skittish - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS planning_subtrees = list( /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, /datum/ai_planning_subtree/flee_target, @@ -120,6 +130,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, ) diff --git a/code/datums/ai/oldhostile/hostile_tameable.dm b/code/datums/ai/oldhostile/hostile_tameable.dm deleted file mode 100644 index 1986547a340..00000000000 --- a/code/datums/ai/oldhostile/hostile_tameable.dm +++ /dev/null @@ -1,237 +0,0 @@ -///This code needs to be removed at some point as it doesn't actually utilize the AI. - -/datum/ai_controller/hostile_friend - blackboard = list( - BB_HOSTILE_ORDER_MODE = null, - BB_HOSTILE_FRIEND = null, - BB_FOLLOW_TARGET = null, - BB_ATTACK_TARGET = null, - BB_VISION_RANGE = BB_HOSTILE_VISION_RANGE, - BB_HOSTILE_ATTACK_WORD = "growls", - ) - ai_movement = /datum/ai_movement/basic_avoidance - idle_behavior = /datum/idle_behavior/idle_random_walk/hostile_tameable - - var/ride_penalty_movement = 1 SECONDS - - COOLDOWN_DECLARE(command_cooldown) - -/datum/ai_controller/hostile_friend/process(seconds_per_tick) - if(isliving(pawn)) - var/mob/living/living_pawn = pawn - movement_delay = living_pawn.cached_multiplicative_slowdown - return ..() - -/datum/ai_controller/hostile_friend/TryPossessPawn(atom/new_pawn) - if(!ishostile(new_pawn)) - return AI_CONTROLLER_INCOMPATIBLE - - RegisterSignal(new_pawn, COMSIG_ATOM_EXAMINE, PROC_REF(on_examined)) - RegisterSignal(new_pawn, COMSIG_CLICK_ALT, PROC_REF(check_altclicked)) - RegisterSignal(new_pawn, COMSIG_RIDDEN_DRIVER_MOVE, PROC_REF(on_ridden_driver_move)) - RegisterSignal(new_pawn, COMSIG_MOVABLE_PREBUCKLE, PROC_REF(on_prebuckle)) - return ..() //Run parent at end - -/datum/ai_controller/hostile_friend/UnpossessPawn(destroy) - UnregisterSignal(pawn, list( - COMSIG_ATOM_ATTACK_HAND, - COMSIG_ATOM_EXAMINE, - COMSIG_CLICK_ALT, - COMSIG_LIVING_DEATH, - COMSIG_QDELETING - )) - unfriend() - return ..() //Run parent at end - -/datum/ai_controller/hostile_friend/proc/on_prebuckle(mob/source, mob/living/buckler, force, buckle_mob_flags) - SIGNAL_HANDLER - if(force || ai_status == AI_STATUS_OFF) - return - if(buckler != blackboard[BB_HOSTILE_FRIEND]) - return COMPONENT_BLOCK_BUCKLE - -/datum/ai_controller/hostile_friend/on_stat_changed(mob/living/source, new_stat) - . = ..() - update_able_to_run() - -/datum/ai_controller/hostile_friend/setup_able_to_run() - . = ..() - RegisterSignal(pawn, COMSIG_MOB_INCAPACITATE_CHANGED, PROC_REF(update_able_to_run)) - -/datum/ai_controller/hostile_friend/clear_able_to_run() - UnregisterSignal(pawn, list(COMSIG_MOB_INCAPACITATE_CHANGED, COMSIG_MOB_STATCHANGE)) - return ..() - -/datum/ai_controller/hostile_friend/get_able_to_run() - var/mob/living/living_pawn = pawn - - if(IS_DEAD_OR_INCAP(living_pawn)) - return AI_UNABLE_TO_RUN - return ..() - -/datum/ai_controller/hostile_friend/get_access() - var/mob/living/simple_animal/simple_pawn = pawn - if(!istype(simple_pawn)) - return - - return simple_pawn.access_card.GetAccess() - -/datum/ai_controller/hostile_friend/proc/on_ridden_driver_move(atom/movable/movable_parent, mob/living/user, direction) - SIGNAL_HANDLER - PauseAi(ride_penalty_movement) - -/// Befriends someone -/datum/ai_controller/hostile_friend/proc/befriend(mob/living/new_friend) - if(QDELETED(new_friend)) - return - var/mob/living/old_friend = blackboard[BB_HOSTILE_FRIEND] - if(old_friend) - unfriend(old_friend) - - if(pawn.Adjacent(pawn, new_friend)) - new_friend.visible_message("[pawn] looks at [new_friend] in a friendly manner!", span_notice("[pawn] looks at you in a friendly manner!")) - set_blackboard_key(BB_HOSTILE_FRIEND, new_friend) - RegisterSignal(new_friend, COMSIG_MOVABLE_POINTED, PROC_REF(check_point)) - RegisterSignal(new_friend, COMSIG_MOB_SAY, PROC_REF(check_verbal_command)) - -/// Someone is being mean to us, take them off our friends (add actual enemies behavior later) -/datum/ai_controller/hostile_friend/proc/unfriend() - var/mob/living/old_friend = blackboard[BB_HOSTILE_FRIEND] - if(old_friend) - UnregisterSignal(old_friend, list(COMSIG_MOVABLE_POINTED, COMSIG_MOB_SAY)) - clear_blackboard_key(BB_HOSTILE_FRIEND) - -/// Someone is looking at us, if we're currently carrying something then show what it is, and include a message if they're our friend -/datum/ai_controller/hostile_friend/proc/on_examined(datum/source, mob/user, list/examine_text) - SIGNAL_HANDLER - - if(blackboard[BB_HOSTILE_FRIEND] != user) - return - - var/mob/living/living_pawn = pawn - if(!IS_DEAD_OR_INCAP(living_pawn)) - examine_text += span_notice("[pawn.p_They()] seem[pawn.p_s()] happy to see you!") - -// next section is regarding commands - -/// Someone alt clicked us, see if they're someone we should show the radial command menu to -/datum/ai_controller/hostile_friend/proc/check_altclicked(datum/source, mob/living/clicker) - SIGNAL_HANDLER - - if(!COOLDOWN_FINISHED(src, command_cooldown)) - return - if(!istype(clicker) || blackboard[BB_HOSTILE_FRIEND] != clicker || !clicker.can_perform_action(source)) - return - - INVOKE_ASYNC(src, PROC_REF(command_radial), clicker) - return CLICK_ACTION_BLOCKING - -/// Show the command radial menu -/datum/ai_controller/hostile_friend/proc/command_radial(mob/living/clicker) - var/list/commands = list( - COMMAND_STOP = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow"), - COMMAND_FOLLOW = image(icon = 'icons/mob/actions/actions_spells.dmi', icon_state = "summons"), - COMMAND_ATTACK = image(icon = 'icons/effects/effects.dmi', icon_state = "bite"), - ) - - var/choice = show_radial_menu(clicker, pawn, commands, custom_check = CALLBACK(src, PROC_REF(check_menu), clicker), tooltips = TRUE) - if(!choice || !check_menu(clicker)) - return - set_command_mode(clicker, choice) - - -/datum/ai_controller/hostile_friend/proc/check_menu(mob/user) - if(!istype(user)) - CRASH("A non-mob is trying to issue an order to [pawn].") - if(user.incapacitated || !can_see(user, pawn)) - return FALSE - return TRUE - -/// One of our friends said something, see if it's a valid command, and if so, take action -/datum/ai_controller/hostile_friend/proc/check_verbal_command(mob/speaker, speech_args) - SIGNAL_HANDLER - - if(blackboard[BB_HOSTILE_FRIEND] != speaker) - return - - if(!COOLDOWN_FINISHED(src, command_cooldown)) - return - - var/mob/living/living_pawn = pawn - if(IS_DEAD_OR_INCAP(living_pawn)) - return - - var/spoken_text = speech_args[SPEECH_MESSAGE] // probably should check for full words - var/command - if(findtext(spoken_text, "stop") || findtext(spoken_text, "stay")) - command = COMMAND_STOP - else if(findtext(spoken_text, "follow") || findtext(spoken_text, "come")) - command = COMMAND_FOLLOW - else if(findtext(spoken_text, "attack") || findtext(spoken_text, "sic")) - command = COMMAND_ATTACK - else - return - - if(!can_see(pawn, speaker, length=blackboard[BB_VISION_RANGE])) - return - set_command_mode(speaker, command) - -/// Whether we got here via radial menu or a verbal command, this is where we actually process what our new command will be -/datum/ai_controller/hostile_friend/proc/set_command_mode(mob/commander, command) - COOLDOWN_START(src, command_cooldown, AI_HOSTILE_COMMAND_COOLDOWN) - - switch(command) - // heel: stop what you're doing, relax and try not to do anything for a little bit - if(COMMAND_STOP) - 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.")) - set_blackboard_key(BB_HOSTILE_ORDER_MODE, HOSTILE_COMMAND_NONE) - CancelActions() - // 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() - set_blackboard_key(BB_HOSTILE_ORDER_MODE, HOSTILE_COMMAND_FOLLOW) - set_blackboard_key(BB_FOLLOW_TARGET, commander) - set_movement_target(type, commander) - var/mob/living/living_pawn = pawn - if(living_pawn.buckled) - queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something - queue_behavior(/datum/ai_behavior/follow) - // attack: harass whoever the commander points to - if(COMMAND_ATTACK) - pawn.visible_message(span_danger("[pawn] [blackboard[BB_HOSTILE_ATTACK_WORD]] at [commander]'s command, and [pawn.p_they()] growl[pawn.p_s()] intensely.")) // imagine getting intimidated by a corgi - CancelActions() - set_blackboard_key(BB_HOSTILE_ORDER_MODE, HOSTILE_COMMAND_ATTACK) - -/// Someone we like is pointing at something, see if it's something we might want to interact with (like if they might want us to fetch something for them) -/datum/ai_controller/hostile_friend/proc/check_point(mob/pointing_friend, atom/movable/pointed_movable, obj/effect/temp_visual/point/point) - SIGNAL_HANDLER - - var/mob/living/simple_animal/hostile/living_pawn = pawn - if(IS_DEAD_OR_INCAP(living_pawn)) - return - - if(!COOLDOWN_FINISHED(src, command_cooldown)) - return - if(blackboard[BB_HOSTILE_FRIEND] == pointed_movable \ - || pointed_movable == pawn \ - || !istype(pointed_movable) \ - || blackboard[BB_HOSTILE_ORDER_MODE] == HOSTILE_COMMAND_NONE) // busy or no command - return - if(!can_see(pawn, pointing_friend, length=blackboard[BB_VISION_RANGE]) || !can_see(pawn, pointed_movable, length=blackboard[BB_VISION_RANGE])) - return - - CancelActions() - COOLDOWN_START(src, command_cooldown, AI_HOSTILE_COMMAND_COOLDOWN) - - if(blackboard[BB_HOSTILE_ORDER_MODE] == HOSTILE_COMMAND_ATTACK) - pawn.visible_message(span_notice("[pawn] follows [pointing_friend]'s gesture towards [pointed_movable] and [blackboard[BB_HOSTILE_ATTACK_WORD]] intensely!")) - set_movement_target(type, pointed_movable) - set_blackboard_key(BB_ATTACK_TARGET, pointed_movable) - if(living_pawn.buckled) - queue_behavior(/datum/ai_behavior/resist)//in case they are in bed or something - queue_behavior(/datum/ai_behavior/attack) - - -/datum/idle_behavior/idle_random_walk/hostile_tameable - walk_chance = 5 diff --git a/code/modules/bitrunning/antagonists/netguardian.dm b/code/modules/bitrunning/antagonists/netguardian.dm index 0f546f87b1d..80bba1c050a 100644 --- a/code/modules/bitrunning/antagonists/netguardian.dm +++ b/code/modules/bitrunning/antagonists/netguardian.dm @@ -120,6 +120,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate/check_faction, /datum/ai_planning_subtree/simple_find_wounded_target, /datum/ai_planning_subtree/targeted_mob_ability/fire_rockets, diff --git a/code/modules/mob/living/basic/alien/alien_ai.dm b/code/modules/mob/living/basic/alien/alien_ai.dm index a06ec4ea943..decca14cec8 100644 --- a/code/modules/mob/living/basic/alien/alien_ai.dm +++ b/code/modules/mob/living/basic/alien/alien_ai.dm @@ -6,6 +6,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -15,6 +16,7 @@ /datum/ai_controller/basic_controller/alien/sentinel planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_ranged_attack_subtree/alien, @@ -27,6 +29,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk/plant_weeds/queen planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_ranged_attack_subtree/alien, diff --git a/code/modules/mob/living/basic/blob_minions/blob_ai.dm b/code/modules/mob/living/basic/blob_minions/blob_ai.dm index 5fc90f3dd67..b8368fc7f3c 100644 --- a/code/modules/mob/living/basic/blob_minions/blob_ai.dm +++ b/code/modules/mob/living/basic/blob_minions/blob_ai.dm @@ -11,6 +11,7 @@ ai_movement = /datum/ai_movement/jps idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -28,6 +29,7 @@ ai_movement = /datum/ai_movement/jps idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/travel_to_point/and_clear_target, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, @@ -46,6 +48,7 @@ ai_movement = /datum/ai_movement/jps idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/find_and_hunt_target/corpses/human, /datum/ai_planning_subtree/travel_to_point/and_clear_target, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/boss/thing/thing_ai.dm b/code/modules/mob/living/basic/boss/thing/thing_ai.dm index 9d31d9c7698..be6033ec2b2 100644 --- a/code/modules/mob/living/basic/boss/thing/thing_ai.dm +++ b/code/modules/mob/living/basic/boss/thing/thing_ai.dm @@ -11,6 +11,7 @@ ai_movement = /datum/ai_movement/basic_avoidance // dont need anything better because the arena is a square lol idle_behavior = null planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target/increased_range, //aggros at 6, sees 16 tiles /datum/ai_planning_subtree/thing_boss_aoe, /datum/ai_planning_subtree/thing_boss_melee, diff --git a/code/modules/mob/living/basic/bots/bot_ai.dm b/code/modules/mob/living/basic/bots/bot_ai.dm index f04aed05eaa..c0c357ff71f 100644 --- a/code/modules/mob/living/basic/bots/bot_ai.dm +++ b/code/modules/mob/living/basic/bots/bot_ai.dm @@ -12,6 +12,7 @@ ai_movement = /datum/ai_movement/jps/bot planning_subtrees = list( +/datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/salute_authority, /datum/ai_planning_subtree/find_patrol_beacon, 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 f8b226c48ed..d126615d620 100644 --- a/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm +++ b/code/modules/mob/living/basic/bots/cleanbot/cleanbot_ai.dm @@ -14,6 +14,7 @@ BB_FRIENDLY_MESSAGE = "empathetically acknowledges your hardwork and tough circumstances", ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/pet_planning/cleanbot, /datum/ai_planning_subtree/cleaning_subtree, @@ -37,7 +38,6 @@ BB_CLEANABLE_DRAWINGS = CLEANBOT_CLEAN_DRAWINGS, BB_HUNTABLE_TRASH = CLEANBOT_CLEAN_TRASH, ) - ai_traits = PAUSE_DURING_DO_AFTER /datum/ai_planning_subtree/pet_planning/cleanbot/SelectBehaviors(datum/ai_controller/basic_controller/bot/controller, seconds_per_tick) var/mob/living/basic/bot/bot_pawn = controller.pawn diff --git a/code/modules/mob/living/basic/bots/dedbot.dm b/code/modules/mob/living/basic/bots/dedbot.dm index 0560f02a562..cbefc55898f 100644 --- a/code/modules/mob/living/basic/bots/dedbot.dm +++ b/code/modules/mob/living/basic/bots/dedbot.dm @@ -59,6 +59,7 @@ ) ai_movement = /datum/ai_movement/jps/bot planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/exenterate, /datum/ai_planning_subtree/respond_to_summon, diff --git a/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm b/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm index fa66c6d794d..b40f5da5abd 100644 --- a/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm +++ b/code/modules/mob/living/basic/bots/firebot/firebot_ai.dm @@ -6,6 +6,7 @@ BB_UNREACHABLE_LIST_COOLDOWN = 3 MINUTES, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/extinguishing_people, /datum/ai_planning_subtree/extinguishing_turfs, diff --git a/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm b/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm index 3ae1c1958fb..620a6fc6d97 100644 --- a/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm +++ b/code/modules/mob/living/basic/bots/honkbots/honkbot_ai.dm @@ -5,6 +5,7 @@ BB_ALWAYS_IGNORE_FACTION = TRUE, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/use_mob_ability/random_honk, /datum/ai_planning_subtree/find_wanted_targets, @@ -18,7 +19,6 @@ BB_PREVIOUS_BEACON_TARGET, BB_BOT_SUMMON_TARGET, ) - ai_traits = PAUSE_DURING_DO_AFTER /datum/ai_controller/basic_controller/bot/honkbot/TryPossessPawn(atom/new_pawn) . = ..() diff --git a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm index 60f3c80c3ea..5c98365f33d 100644 --- a/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm +++ b/code/modules/mob/living/basic/bots/hygienebot/hygienebot_ai.dm @@ -10,6 +10,7 @@ BB_WASH_FRUSTRATION = 0, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/handle_trash_talk, /datum/ai_planning_subtree/wash_people, diff --git a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm index b31a58f912c..8b53bc61946 100644 --- a/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm +++ b/code/modules/mob/living/basic/bots/medbot/medbot_ai.dm @@ -1,6 +1,7 @@ #define BOT_PATIENT_PATH_LIMIT 20 /datum/ai_controller/basic_controller/bot/medbot planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/handle_medbot_speech, /datum/ai_planning_subtree/find_and_hunt_target/patients_in_crit, @@ -15,7 +16,6 @@ BB_PREVIOUS_BEACON_TARGET, BB_BOT_SUMMON_TARGET, ) - ai_traits = PAUSE_DURING_DO_AFTER /datum/ai_movement/jps/bot/medbot maximum_length = BOT_PATIENT_PATH_LIMIT diff --git a/code/modules/mob/living/basic/bots/repairbot/repairbot_ai.dm b/code/modules/mob/living/basic/bots/repairbot/repairbot_ai.dm index a952130bb4f..621d0033895 100644 --- a/code/modules/mob/living/basic/bots/repairbot/repairbot_ai.dm +++ b/code/modules/mob/living/basic/bots/repairbot/repairbot_ai.dm @@ -2,6 +2,7 @@ /datum/ai_controller/basic_controller/bot/repairbot planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/repairbot_speech, /datum/ai_planning_subtree/mug_robot, /datum/ai_planning_subtree/refill_materials, @@ -25,7 +26,6 @@ BB_WELDER_TARGET, BB_WINDOW_FRAMETARGET, ) - ai_traits = PAUSE_DURING_DO_AFTER minimum_distance = 1 ///subtree to refill our stacks diff --git a/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm b/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm index 1b458811acc..77773746b08 100644 --- a/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm +++ b/code/modules/mob/living/basic/bots/vibebot/vibebot_ai.dm @@ -6,6 +6,7 @@ BB_VIBEBOT_BIRTHDAY_SONG = VIBEBOT_HAPPY_BIRTHDAY, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/respond_to_summon, /datum/ai_planning_subtree/find_party_friends, /datum/ai_planning_subtree/find_patrol_beacon, @@ -16,7 +17,6 @@ BB_VIBEBOT_PARTY_TARGET, BB_BOT_SUMMON_TARGET, ) - ai_traits = PAUSE_DURING_DO_AFTER /datum/ai_controller/basic_controller/bot/vibebot/TryPossessPawn(atom/new_pawn) . = ..() diff --git a/code/modules/mob/living/basic/clown/clown_ai.dm b/code/modules/mob/living/basic/clown/clown_ai.dm index b3f5a9f9aef..dfa9b71a40e 100644 --- a/code/modules/mob/living/basic/clown/clown_ai.dm +++ b/code/modules/mob/living/basic/clown/clown_ai.dm @@ -7,6 +7,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/blackboard, diff --git a/code/modules/mob/living/basic/cult/constructs/construct_ai.dm b/code/modules/mob/living/basic/cult/constructs/construct_ai.dm index b8417affed9..c7ea47a83ae 100644 --- a/code/modules/mob/living/basic/cult/constructs/construct_ai.dm +++ b/code/modules/mob/living/basic/cult/constructs/construct_ai.dm @@ -14,6 +14,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_wounded_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/target_retaliate/to_flee, @@ -34,6 +35,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -54,6 +56,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/flee_target/from_flee_key, /datum/ai_planning_subtree/simple_find_target, @@ -75,6 +78,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_wounded_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm index 76abb281b99..3af1bb7e52c 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_subtree.dm @@ -4,7 +4,7 @@ BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk @@ -28,7 +28,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/bee, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chick.dm b/code/modules/mob/living/basic/farm_animals/chicken/chick.dm index 7ddf86b0cfb..cc9b33d3e80 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chick.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chick.dm @@ -82,7 +82,7 @@ BB_FIND_MOM_TYPES = list(/mob/living/basic/chicken), ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm index 4f83608b9d6..0032353dca3 100644 --- a/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm +++ b/code/modules/mob/living/basic/farm_animals/chicken/chicken.dm @@ -93,7 +93,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm index cedc39f64f3..df485197d33 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_ai.dm @@ -5,7 +5,7 @@ BB_BASIC_MOB_TIPPER = null, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( diff --git a/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm b/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm index d11968128aa..c0e51bfd39e 100644 --- a/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm +++ b/code/modules/mob/living/basic/farm_animals/cow/cow_moonicorn.dm @@ -47,6 +47,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/tip_reaction, /datum/ai_planning_subtree/random_speech/cow, //finds someone to kill diff --git a/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm b/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm index f17e0c9014f..52fedbe9c05 100644 --- a/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/deer/deer_ai.dm @@ -3,7 +3,7 @@ BB_STATIONARY_MOVE_TO_TARGET = TRUE, BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( diff --git a/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm b/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm index 5928344fee4..af409c5763d 100644 --- a/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/goat/goat_ai.dm @@ -4,7 +4,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/farm_animals/goose/goose_ai.dm b/code/modules/mob/living/basic/farm_animals/goose/goose_ai.dm index cd10e45adc5..d161145d06b 100644 --- a/code/modules/mob/living/basic/farm_animals/goose/goose_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/goose/goose_ai.dm @@ -7,11 +7,12 @@ BB_EAT_EMOTES = list() ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/goose planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/goose, /datum/ai_planning_subtree/capricious_retaliate, /datum/ai_planning_subtree/target_retaliate, diff --git a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm index de55865b5fa..ba9584f4bc1 100644 --- a/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm +++ b/code/modules/mob/living/basic/farm_animals/gorilla/gorilla_ai.dm @@ -7,11 +7,12 @@ BB_EMOTE_CHANCE = 40, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/run_emote, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path/gorilla, diff --git a/code/modules/mob/living/basic/farm_animals/pig.dm b/code/modules/mob/living/basic/farm_animals/pig.dm index 270b9b4e859..3a4ae888512 100644 --- a/code/modules/mob/living/basic/farm_animals/pig.dm +++ b/code/modules/mob/living/basic/farm_animals/pig.dm @@ -60,7 +60,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/farm_animals/pony.dm b/code/modules/mob/living/basic/farm_animals/pony.dm index a9a7fc8fb5a..09166933e8d 100644 --- a/code/modules/mob/living/basic/farm_animals/pony.dm +++ b/code/modules/mob/living/basic/farm_animals/pony.dm @@ -122,7 +122,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/farm_animals/rabbit.dm b/code/modules/mob/living/basic/farm_animals/rabbit.dm index c667ac311cd..6e1940f4a28 100644 --- a/code/modules/mob/living/basic/farm_animals/rabbit.dm +++ b/code/modules/mob/living/basic/farm_animals/rabbit.dm @@ -61,7 +61,7 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( diff --git a/code/modules/mob/living/basic/farm_animals/sheep.dm b/code/modules/mob/living/basic/farm_animals/sheep.dm index 1f164390b48..de4999a561d 100644 --- a/code/modules/mob/living/basic/farm_animals/sheep.dm +++ b/code/modules/mob/living/basic/farm_animals/sheep.dm @@ -83,7 +83,7 @@ blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( diff --git a/code/modules/mob/living/basic/festivus_pole.dm b/code/modules/mob/living/basic/festivus_pole.dm index c676a89d33c..8c4e74332f8 100644 --- a/code/modules/mob/living/basic/festivus_pole.dm +++ b/code/modules/mob/living/basic/festivus_pole.dm @@ -59,6 +59,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/find_and_hunt_target/look_for_apcs, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/heretic/flesh_stalker.dm b/code/modules/mob/living/basic/heretic/flesh_stalker.dm index c8a3342141f..5cee158463a 100644 --- a/code/modules/mob/living/basic/heretic/flesh_stalker.dm +++ b/code/modules/mob/living/basic/heretic/flesh_stalker.dm @@ -33,6 +33,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/shapechange_ambush, /datum/ai_planning_subtree/use_mob_ability, diff --git a/code/modules/mob/living/basic/heretic/raw_prophet.dm b/code/modules/mob/living/basic/heretic/raw_prophet.dm index 1d0d0f93f20..acb39706edd 100644 --- a/code/modules/mob/living/basic/heretic/raw_prophet.dm +++ b/code/modules/mob/living/basic/heretic/raw_prophet.dm @@ -91,6 +91,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/heretic/rust_walker.dm b/code/modules/mob/living/basic/heretic/rust_walker.dm index 19c3c901993..65a41a61838 100644 --- a/code/modules/mob/living/basic/heretic/rust_walker.dm +++ b/code/modules/mob/living/basic/heretic/rust_walker.dm @@ -57,6 +57,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/rust planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/use_mob_ability/rust_walker, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability, diff --git a/code/modules/mob/living/basic/heretic/star_gazer.dm b/code/modules/mob/living/basic/heretic/star_gazer.dm index 157b3b64376..69db11ebdc5 100644 --- a/code/modules/mob/living/basic/heretic/star_gazer.dm +++ b/code/modules/mob/living/basic/heretic/star_gazer.dm @@ -85,6 +85,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/attack_obstacle_in_path/pet_target/star_gazer, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm index ccccc795224..642061ed782 100644 --- a/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_demon/ice_demon_ai.dm @@ -11,6 +11,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/flee_target/ice_demon, /datum/ai_planning_subtree/ranged_skirmish/ice_demon, @@ -103,6 +104,7 @@ /datum/ai_controller/basic_controller/ice_demon/afterimage planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/flee_target/ice_demon, //even the afterimages are afraid of flames! /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm index 05a91d650c6..34a4b363136 100644 --- a/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm +++ b/code/modules/mob/living/basic/icemoon/ice_whelp/ice_whelp_ai.dm @@ -7,6 +7,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/ice_whelp, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm index cc21c576bf6..cd2e743fb95 100644 --- a/code/modules/mob/living/basic/icemoon/wolf/wolf.dm +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf.dm @@ -73,7 +73,7 @@ AddElement(/datum/element/ridable, /datum/component/riding/creature/wolf) AddComponent(/datum/component/obeys_commands, pet_commands) // this is purely a convenience thing once tamed so you can drag them away from shit - ai_controller.ai_traits = STOP_MOVING_WHEN_PULLED + ai_controller.ai_traits |= STOP_MOVING_WHEN_PULLED // makes tamed wolves run away far less ai_controller.set_blackboard_key(BB_BASIC_MOB_FLEE_DISTANCE, 7) diff --git a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm index 423a33bb476..28618bfebca 100644 --- a/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm +++ b/code/modules/mob/living/basic/icemoon/wolf/wolf_ai.dm @@ -20,6 +20,7 @@ //reinforcements needs to be skipped over entirely on tamed wolves because it causes them to attack their owner and then themselves planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/call_reinforcements/wolf, /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, diff --git a/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm b/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm index b5c917bf2a4..1e7a6dee29e 100644 --- a/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm +++ b/code/modules/mob/living/basic/jungle/leaper/leaper_ai.dm @@ -7,6 +7,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/targeted_mob_ability/pointed_bubble, diff --git a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm index 7d1b40fc5ec..fbe737eb2b2 100644 --- a/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm +++ b/code/modules/mob/living/basic/jungle/mega_arachnid/mega_arachnid_ai.dm @@ -7,6 +7,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/arachnid_restrain, /datum/ai_planning_subtree/basic_melee_attack_subtree/mega_arachnid, diff --git a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm index ae4e7b75c92..a4b85a3da17 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm @@ -9,6 +9,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/find_and_hunt_target/watering_can, /datum/ai_planning_subtree/find_and_hunt_target/fill_watercan, @@ -150,6 +151,7 @@ BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/seedling_rapid, diff --git a/code/modules/mob/living/basic/jungle/venus_human_trap.dm b/code/modules/mob/living/basic/jungle/venus_human_trap.dm index 7f37bb55336..4ee9932f2dd 100644 --- a/code/modules/mob/living/basic/jungle/venus_human_trap.dm +++ b/code/modules/mob/living/basic/jungle/venus_human_trap.dm @@ -263,6 +263,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/continue_planning, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm index bd1539103f4..b1f79ea6b50 100644 --- a/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm +++ b/code/modules/mob/living/basic/lavaland/basilisk/basilisk.dm @@ -83,6 +83,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/ranged_skirmish, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm index aa3e06af16a..e18af7ed2ce 100644 --- a/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm +++ b/code/modules/mob/living/basic/lavaland/bileworm/bileworm_ai.dm @@ -4,6 +4,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/bileworm_attack, /datum/ai_planning_subtree/bileworm_execute, diff --git a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm index 9be663bccd4..eb6f6f671ed 100644 --- a/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm +++ b/code/modules/mob/living/basic/lavaland/brimdemon/brimdemon_ai.dm @@ -7,10 +7,10 @@ BB_TARGET_MINIMUM_STAT = HARD_CRIT, ) - ai_traits = PAUSE_DURING_DO_AFTER ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/no_target planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree/opportunistic, /datum/ai_planning_subtree/move_to_cardinal/brimdemon, diff --git a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm index 3d5d73a7343..0f0cbbed3da 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -10,6 +10,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/burrow_through_ground, @@ -34,6 +35,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/dig_away_from_danger, /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores, 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 3bf9d1d8f33..68a31816fd4 100644 --- a/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goliath/goliath_ai.dm @@ -10,6 +10,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate/check_faction, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/find_food, 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 1028a7d45eb..7174800ab15 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -12,6 +12,8 @@ BB_MAX_CHILDREN = 5, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate/check_faction, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -55,6 +57,7 @@ BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/gutlunch/milk), ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/look_for_adult, @@ -65,6 +68,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/find_and_hunt_target/food_trough diff --git a/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm b/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm index 1fb05cd7a01..aecabc82373 100644 --- a/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm +++ b/code/modules/mob/living/basic/lavaland/hivelord/hivelord_ai.dm @@ -8,6 +8,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance, /datum/ai_planning_subtree/targeted_mob_ability, diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm index 856ff315d0c..96cde9e5ac5 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_ai.dm @@ -10,6 +10,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/legion, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability, diff --git a/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm index 3d54bdccb8c..87537480eaa 100644 --- a/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm +++ b/code/modules/mob/living/basic/lavaland/legion/legion_monkey.dm @@ -48,12 +48,13 @@ BB_TIME_TO_GIVE_UP_ON_VENT_PATHING = 30 SECONDS, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking // We understand that vents are nice little hidey holes through epigenetic inheritance, so we'll use them. planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/legion, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm index 0aac4e92e41..3ef2b21cef8 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity.dm @@ -81,7 +81,7 @@ ) AddComponent(/datum/component/happiness) AddComponent(/datum/component/obeys_commands, pet_commands) - ai_controller.ai_traits = STOP_MOVING_WHEN_PULLED + ai_controller.ai_traits |= STOP_MOVING_WHEN_PULLED response_help_continuous = "pets" response_help_simple = "pet" response_disarm_continuous = "gently pushes aside" diff --git a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm index 647aeac9474..c634f1238d1 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -19,11 +19,11 @@ BB_TARGET_PRIORITY_TRAIT = TRAIT_SCARY_FISHERMAN, BB_OWNER_SELF_HARM_RESPONSES = SHRIMP_HARM_RESPONSES, ) - ai_traits = PAUSE_DURING_DO_AFTER ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/hoard_fingers, /datum/ai_planning_subtree/pet_planning, @@ -58,6 +58,7 @@ BB_OWNER_SELF_HARM_RESPONSES = SHRIMP_HARM_RESPONSES, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/hoard_fingers, /datum/ai_planning_subtree/pet_planning, @@ -74,6 +75,7 @@ ///A subtype of juvenile lobster AI that has the target_retaliate behaviour instead of simple_find_target /datum/ai_controller/basic_controller/lobstrosity/juvenile/calm planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/hoard_fingers, /datum/ai_planning_subtree/pet_planning, @@ -90,6 +92,7 @@ ///A subtype of juvenile lobster AI that has the capricious_retaliate behaviour instead of simple_find_target /datum/ai_controller/basic_controller/lobstrosity/juvenile/capricious planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/hoard_fingers, /datum/ai_planning_subtree/pet_planning, diff --git a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm index 2f374e2dda4..41ce948d2a8 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -15,6 +15,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/look_for_village, @@ -218,6 +219,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/look_for_village, /datum/ai_planning_subtree/simple_find_target, @@ -270,6 +272,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/look_for_village, /datum/ai_planning_subtree/acknowledge_chief, @@ -326,6 +329,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ) idle_behavior = /datum/idle_behavior/walk_near_target/mook_village planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/look_for_village, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm index 00ca34757c8..cf0fa68bb32 100644 --- a/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm +++ b/code/modules/mob/living/basic/lavaland/node_drone/node_drone.dm @@ -151,7 +151,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, // Use this to find vents to run away from ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = null planning_subtrees = list( diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm index a21f0b47e01..27cd4d005f8 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm @@ -16,6 +16,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/raptor, /datum/ai_planning_subtree/flee_target/from_flee_key, /datum/ai_planning_subtree/find_and_hunt_target/heal_raptors, @@ -60,6 +61,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/random_speech/blackboard, diff --git a/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm b/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm index c962ca50c12..d31f76eaee6 100644 --- a/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm +++ b/code/modules/mob/living/basic/lavaland/watcher/watcher_ai.dm @@ -3,10 +3,10 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = PAUSE_DURING_DO_AFTER ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate/check_faction, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance, diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 5c76529d848..7e92d79c5a0 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -32,7 +32,6 @@ /datum/ai_planning_subtree/minebot_mining, /datum/ai_planning_subtree/locate_dead_humans, ) - ai_traits = PAUSE_DURING_DO_AFTER /datum/ai_planning_subtree/launch_missiles diff --git a/code/modules/mob/living/basic/pets/cat/cat_ai.dm b/code/modules/mob/living/basic/pets/cat/cat_ai.dm index 2a2d3204bad..049b894b5d6 100644 --- a/code/modules/mob/living/basic/pets/cat/cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -10,6 +10,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/reside_in_home, /datum/ai_planning_subtree/flee_target/from_flee_key/cat_struggle, diff --git a/code/modules/mob/living/basic/pets/fox.dm b/code/modules/mob/living/basic/pets/fox.dm index 35c316d7e5a..88dd9d5342b 100644 --- a/code/modules/mob/living/basic/pets/fox.dm +++ b/code/modules/mob/living/basic/pets/fox.dm @@ -69,6 +69,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/flee_target/from_flee_key, diff --git a/code/modules/mob/living/basic/pets/gondolas/gondola.dm b/code/modules/mob/living/basic/pets/gondolas/gondola.dm index e23848064a9..535afa32cc1 100644 --- a/code/modules/mob/living/basic/pets/gondolas/gondola.dm +++ b/code/modules/mob/living/basic/pets/gondolas/gondola.dm @@ -73,7 +73,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm index 139cb819922..7c6b9b13ca5 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/_parrot_controller.dm @@ -5,11 +5,12 @@ BB_HOARD_LOCATION_RANGE = 9, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/parrot planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/parrot_as_in_repeat, // always get a witty oneliner in when you can /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/target_retaliate, diff --git a/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm b/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm index 58bdef408a5..75c77545657 100644 --- a/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm +++ b/code/modules/mob/living/basic/pets/parrot/parrot_ai/ghost_parrot_controller.dm @@ -1,6 +1,7 @@ /// Used for ghost poly. /datum/ai_controller/basic_controller/parrot/ghost planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/parrot_as_in_repeat, /datum/ai_planning_subtree/possess_humans, /datum/ai_planning_subtree/hoard_items, diff --git a/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm b/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm index 90d12e87941..50386bff374 100644 --- a/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm +++ b/code/modules/mob/living/basic/pets/penguin/penguin_ai.dm @@ -5,7 +5,7 @@ BB_ONLY_FISH_WHILE_HUNGRY = TRUE, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk @@ -67,7 +67,7 @@ BB_IGNORE_MOM_TYPES = list(/mob/living/basic/pet/penguin/baby), ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm index 41b928aa751..25565a181aa 100644 --- a/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm +++ b/code/modules/mob/living/basic/pets/pet_cult/pet_cult_ai.dm @@ -8,6 +8,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/befriend_cultists, /datum/ai_planning_subtree/find_occupied_rune, /datum/ai_planning_subtree/find_dead_cultist, @@ -16,7 +17,6 @@ /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) - ai_traits = PAUSE_DURING_DO_AFTER ///if target gets pulled away, unset him /datum/ai_controller/basic_controller/pet_cult/proc/delete_pull_target(datum/source, atom/movable/was_pulling) diff --git a/code/modules/mob/living/basic/pets/sloth.dm b/code/modules/mob/living/basic/pets/sloth.dm index b1f5c61001a..fac460da732 100644 --- a/code/modules/mob/living/basic/pets/sloth.dm +++ b/code/modules/mob/living/basic/pets/sloth.dm @@ -90,7 +90,7 @@ GLOBAL_DATUM(cargo_sloth, /mob/living/basic/sloth) BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/revolutionary.dm b/code/modules/mob/living/basic/revolutionary.dm index 8aa41b3c723..76582540218 100644 --- a/code/modules/mob/living/basic/revolutionary.dm +++ b/code/modules/mob/living/basic/revolutionary.dm @@ -130,6 +130,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/blackboard/revolutionary, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/ruin_defender/dark_wizard.dm b/code/modules/mob/living/basic/ruin_defender/dark_wizard.dm index df4282ea224..45c6a229a7c 100644 --- a/code/modules/mob/living/basic/ruin_defender/dark_wizard.dm +++ b/code/modules/mob/living/basic/ruin_defender/dark_wizard.dm @@ -64,6 +64,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, // If you get them to shoot each other it will start a wiz-war /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance, diff --git a/code/modules/mob/living/basic/ruin_defender/flesh.dm b/code/modules/mob/living/basic/ruin_defender/flesh.dm index 550484a75c5..0f4f0444e3e 100644 --- a/code/modules/mob/living/basic/ruin_defender/flesh.dm +++ b/code/modules/mob/living/basic/ruin_defender/flesh.dm @@ -14,6 +14,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree ) diff --git a/code/modules/mob/living/basic/ruin_defender/mimic/mimic_ai.dm b/code/modules/mob/living/basic/ruin_defender/mimic/mimic_ai.dm index 9a673b49ec6..f4f329b1505 100644 --- a/code/modules/mob/living/basic/ruin_defender/mimic/mimic_ai.dm +++ b/code/modules/mob/living/basic/ruin_defender/mimic/mimic_ai.dm @@ -4,6 +4,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) @@ -16,6 +17,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/random_speech/when_has_target/mimic, @@ -24,6 +26,7 @@ /datum/ai_controller/basic_controller/mimic_copy/machine planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/random_speech/when_has_target/mimic_machine, diff --git a/code/modules/mob/living/basic/ruin_defender/skeleton.dm b/code/modules/mob/living/basic/ruin_defender/skeleton.dm index 5eb8fda1523..67be88870cc 100644 --- a/code/modules/mob/living/basic/ruin_defender/skeleton.dm +++ b/code/modules/mob/living/basic/ruin_defender/skeleton.dm @@ -172,6 +172,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/run_emote, /datum/ai_planning_subtree/find_food, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm index 4430b1339a7..73386397a5b 100644 --- a/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm +++ b/code/modules/mob/living/basic/ruin_defender/wizard/wizard_ai.dm @@ -12,6 +12,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/maintain_distance/cover_minimum_distance, /datum/ai_planning_subtree/targeted_mob_ability/wizard_spell/primary, diff --git a/code/modules/mob/living/basic/ruin_defender/zombie.dm b/code/modules/mob/living/basic/ruin_defender/zombie.dm index 4608b113a50..37e1f972d9e 100644 --- a/code/modules/mob/living/basic/ruin_defender/zombie.dm +++ b/code/modules/mob/living/basic/ruin_defender/zombie.dm @@ -79,6 +79,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/random_speech/zombie, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/slime/ai/controller.dm b/code/modules/mob/living/basic/slime/ai/controller.dm index 1d5f00e6c43..1fcf27af724 100644 --- a/code/modules/mob/living/basic/slime/ai/controller.dm +++ b/code/modules/mob/living/basic/slime/ai/controller.dm @@ -9,6 +9,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/change_slime_face, /datum/ai_planning_subtree/use_mob_ability/evolve, /datum/ai_planning_subtree/use_mob_ability/reproduce, diff --git a/code/modules/mob/living/basic/snails/snail_ai.dm b/code/modules/mob/living/basic/snails/snail_ai.dm index 07e81d6f23b..73c48d19809 100644 --- a/code/modules/mob/living/basic/snails/snail_ai.dm +++ b/code/modules/mob/living/basic/snails/snail_ai.dm @@ -61,6 +61,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm index 335e7257e50..1f45576b147 100644 --- a/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/bear/bear_ai_subtree.dm @@ -6,6 +6,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm index 93ede010eb6..35a9e6d7f51 100644 --- a/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm +++ b/code/modules/mob/living/basic/space_fauna/carp/carp_controllers.dm @@ -19,6 +19,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/find_target_prioritize_traits, @@ -42,6 +43,7 @@ BB_CARPS_FEAR_FISHERMAN = FALSE, ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/make_carp_rift/panic_teleport, @@ -66,7 +68,7 @@ BB_TARGET_PRIORITY_TRAIT = TRAIT_SCARY_FISHERMAN, BB_CARPS_FEAR_FISHERMAN = TRUE, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, @@ -85,6 +87,7 @@ */ /datum/ai_controller/basic_controller/carp/ranged planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_nearest_target_to_flee, /datum/ai_planning_subtree/find_target_prioritize_traits, @@ -112,7 +115,7 @@ BB_CARPS_FEAR_FISHERMAN = TRUE, BB_TARGET_ONLY_WITH_TRAITS = list(TRAIT_SCARY_FISHERMAN), ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS planning_subtrees = list( /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_target/to_flee, // This should only find master fishermen because of the targeting strategy diff --git a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm index 164505df5ac..cc77315ebeb 100644 --- a/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm +++ b/code/modules/mob/living/basic/space_fauna/cat_surgeon.dm @@ -71,6 +71,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm index f71594ea0ec..d6e912f1ce6 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_subtree.dm @@ -7,6 +7,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/glare, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/space_fauna/faithless.dm b/code/modules/mob/living/basic/space_fauna/faithless.dm index 1cf8218a0fc..c4f195cc0a1 100644 --- a/code/modules/mob/living/basic/space_fauna/faithless.dm +++ b/code/modules/mob/living/basic/space_fauna/faithless.dm @@ -63,6 +63,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/attack_obstacle_in_path/low_priority_target, diff --git a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm index 597e7db1065..ce6a582d4d6 100644 --- a/code/modules/mob/living/basic/space_fauna/garden_gnome.dm +++ b/code/modules/mob/living/basic/space_fauna/garden_gnome.dm @@ -131,6 +131,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/space_fauna/ghost.dm b/code/modules/mob/living/basic/space_fauna/ghost.dm index d8af15afa10..1edd3c0330e 100644 --- a/code/modules/mob/living/basic/space_fauna/ghost.dm +++ b/code/modules/mob/living/basic/space_fauna/ghost.dm @@ -103,6 +103,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) diff --git a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm index 067b0a03c13..34ace878929 100644 --- a/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm +++ b/code/modules/mob/living/basic/space_fauna/hivebot/hivebot_subtree.dm @@ -14,6 +14,7 @@ /datum/ai_controller/basic_controller/hivebot/mechanic planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree, /datum/ai_planning_subtree/attack_obstacle_in_path, @@ -23,6 +24,7 @@ /datum/ai_controller/basic_controller/hivebot/ranged planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/hivebot, /datum/ai_planning_subtree/attack_obstacle_in_path, @@ -31,6 +33,7 @@ /datum/ai_controller/basic_controller/hivebot/ranged/rapid planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/hivebot_rapid, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm index a784f577632..152c14ff38e 100644 --- a/code/modules/mob/living/basic/space_fauna/killer_tomato.dm +++ b/code/modules/mob/living/basic/space_fauna/killer_tomato.dm @@ -48,6 +48,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/space_fauna/lightgeist.dm b/code/modules/mob/living/basic/space_fauna/lightgeist.dm index 2478beb5935..8fe00b40484 100644 --- a/code/modules/mob/living/basic/space_fauna/lightgeist.dm +++ b/code/modules/mob/living/basic/space_fauna/lightgeist.dm @@ -81,7 +81,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/lightgeist, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking diff --git a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm index 09659956c58..92f1d0a9889 100644 --- a/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/meteor_heart/meteor_heart_ai.dm @@ -6,6 +6,7 @@ ) planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/ground_spikes, /datum/ai_planning_subtree/use_mob_ability/spine_traps, diff --git a/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm b/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm index 86e67e0392a..070c6d119df 100644 --- a/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm +++ b/code/modules/mob/living/basic/space_fauna/paper_wizard/paper_wizard.dm @@ -61,6 +61,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/wizard_mimic, /datum/ai_planning_subtree/use_mob_ability/wizard_summon_minions, diff --git a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm index d763e63b703..27f1eb47785 100644 --- a/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/regal_rat/regal_rat_ai.dm @@ -10,6 +10,7 @@ // we pretty much do cheesy things (make the station worse) and don't deal with peasants (crew) unless they start to get in the way // summon the horde if we get into a fight and then let the horde take care of it while we skedaddle planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/targeted_mob_ability/riot, /datum/ai_planning_subtree/flee_target/from_flee_key, diff --git a/code/modules/mob/living/basic/space_fauna/snake/banded_snake.dm b/code/modules/mob/living/basic/space_fauna/snake/banded_snake.dm index e1f96e5294e..f6420803543 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/banded_snake.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/banded_snake.dm @@ -49,6 +49,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/find_food, diff --git a/code/modules/mob/living/basic/space_fauna/snake/snake.dm b/code/modules/mob/living/basic/space_fauna/snake/snake.dm index a461eca2744..aecfca8062a 100644 --- a/code/modules/mob/living/basic/space_fauna/snake/snake.dm +++ b/code/modules/mob/living/basic/space_fauna/snake/snake.dm @@ -78,11 +78,12 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/not_friends, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/find_food, diff --git a/code/modules/mob/living/basic/space_fauna/spaceman.dm b/code/modules/mob/living/basic/space_fauna/spaceman.dm index 42f28a74960..ecb413bb81d 100644 --- a/code/modules/mob/living/basic/space_fauna/spaceman.dm +++ b/code/modules/mob/living/basic/space_fauna/spaceman.dm @@ -39,6 +39,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_melee_attack_subtree, ) diff --git a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm index 18ae6fc3e75..ae11657338b 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/giant_spider/giant_spider_ai.dm @@ -4,11 +4,11 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED | PAUSE_DURING_DO_AFTER ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -20,6 +20,7 @@ /// Giant spider which won't attack structures /datum/ai_controller/basic_controller/giant_spider/weak planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/insect, @@ -50,6 +51,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/flee_target/from_flee_key, diff --git a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm index 2bce05b1a61..e7120ba34cd 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/spiderlings/spiderling.dm @@ -66,12 +66,13 @@ BB_TIME_TO_GIVE_UP_ON_VENT_PATHING = 30 SECONDS, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking // We understand that vents are nice little hidey holes through epigenetic inheritance, so we'll use them. planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/target_retaliate/to_flee, /datum/ai_planning_subtree/flee_target/from_flee_key, /datum/ai_planning_subtree/opportunistic_ventcrawler, diff --git a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm index 8c17833c0c7..436602b71ba 100644 --- a/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm +++ b/code/modules/mob/living/basic/space_fauna/spider/young_spider/young_spider.dm @@ -33,11 +33,12 @@ BB_BASIC_MOB_FLEE_DISTANCE = 6, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee, /datum/ai_planning_subtree/flee_target, /datum/ai_planning_subtree/target_retaliate, diff --git a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm index 0842a516cf0..03067edbc45 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/mannequin.dm @@ -84,6 +84,7 @@ ai_movement = /datum/ai_movement/jps //threat idle_behavior = null planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/run_emote, /datum/ai_planning_subtree/basic_melee_attack_subtree, diff --git a/code/modules/mob/living/basic/space_fauna/statue/statue.dm b/code/modules/mob/living/basic/space_fauna/statue/statue.dm index 6664c8c8291..35eb81872ba 100644 --- a/code/modules/mob/living/basic/space_fauna/statue/statue.dm +++ b/code/modules/mob/living/basic/space_fauna/statue/statue.dm @@ -136,6 +136,7 @@ ai_movement = /datum/ai_movement/basic_avoidance planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/find_and_hunt_target/look_for_light_fixtures, diff --git a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm index 1b4e2cdd620..9664ad5d96f 100644 --- a/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm +++ b/code/modules/mob/living/basic/space_fauna/wumborian_fugu/wumborian_ai.dm @@ -8,6 +8,7 @@ idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/targeted_mob_ability/inflate, /datum/ai_planning_subtree/flee_target, diff --git a/code/modules/mob/living/basic/trader/trader_ai.dm b/code/modules/mob/living/basic/trader/trader_ai.dm index d79a12a2d29..f26ec242ed1 100644 --- a/code/modules/mob/living/basic/trader/trader_ai.dm +++ b/code/modules/mob/living/basic/trader/trader_ai.dm @@ -6,6 +6,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/not_while_on_target/trader planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_ranged_attack_subtree/trader, /datum/ai_planning_subtree/prepare_travel_to_destination/trader, @@ -15,6 +16,7 @@ /datum/ai_controller/basic_controller/trader/jumpscare planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity/pacifist, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/basic_ranged_attack_subtree/trader, /datum/ai_planning_subtree/prepare_travel_to_destination/trader, diff --git a/code/modules/mob/living/basic/tree.dm b/code/modules/mob/living/basic/tree.dm index b3700050209..dbbc11a4bcc 100644 --- a/code/modules/mob/living/basic/tree.dm +++ b/code/modules/mob/living/basic/tree.dm @@ -108,6 +108,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_melee_attack_subtree, /datum/ai_planning_subtree/random_speech/tree, diff --git a/code/modules/mob/living/basic/trooper/trooper_ai.dm b/code/modules/mob/living/basic/trooper/trooper_ai.dm index cf71b38f45b..b4cd1d52f6d 100644 --- a/code/modules/mob/living/basic/trooper/trooper_ai.dm +++ b/code/modules/mob/living/basic/trooper/trooper_ai.dm @@ -8,6 +8,7 @@ ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, /datum/ai_planning_subtree/basic_melee_attack_subtree, @@ -25,6 +26,7 @@ /datum/ai_controller/basic_controller/trooper/calls_reinforcements planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/call_reinforcements, /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, @@ -34,6 +36,7 @@ /datum/ai_controller/basic_controller/trooper/peaceful planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/call_reinforcements, /datum/ai_planning_subtree/attack_obstacle_in_path/trooper, @@ -43,6 +46,7 @@ /datum/ai_controller/basic_controller/trooper/ranged planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/trooper, /datum/ai_planning_subtree/travel_to_point/and_clear_target/reinforce, @@ -58,6 +62,7 @@ /datum/ai_controller/basic_controller/trooper/ranged/burst planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/trooper_burst, /datum/ai_planning_subtree/travel_to_point/and_clear_target/reinforce, @@ -72,6 +77,7 @@ /datum/ai_controller/basic_controller/trooper/ranged/burst/peaceful planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/target_retaliate, /datum/ai_planning_subtree/call_reinforcements, /datum/ai_planning_subtree/basic_ranged_attack_subtree/trooper_burst, @@ -80,6 +86,7 @@ /datum/ai_controller/basic_controller/trooper/ranged/shotgunner planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/basic_ranged_attack_subtree/trooper_shotgun, /datum/ai_planning_subtree/travel_to_point/and_clear_target/reinforce, diff --git a/code/modules/mob/living/basic/vermin/axolotl.dm b/code/modules/mob/living/basic/vermin/axolotl.dm index d59e935f8c9..278fc0eac69 100644 --- a/code/modules/mob/living/basic/vermin/axolotl.dm +++ b/code/modules/mob/living/basic/vermin/axolotl.dm @@ -37,6 +37,6 @@ AddElement(/datum/element/swabable, CELL_LINE_TABLE_AXOLOTL, CELL_VIRUS_TABLE_GENERIC_MOB, 1, 5) /datum/ai_controller/basic_controller/axolotl - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk diff --git a/code/modules/mob/living/basic/vermin/cockroach/cockroach_ai.dm b/code/modules/mob/living/basic/vermin/cockroach/cockroach_ai.dm index 78f451a6852..a6d42aa162f 100644 --- a/code/modules/mob/living/basic/vermin/cockroach/cockroach_ai.dm +++ b/code/modules/mob/living/basic/vermin/cockroach/cockroach_ai.dm @@ -10,7 +10,7 @@ ) ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( @@ -21,6 +21,7 @@ /// AI controller for aggressive roach /datum/ai_controller/basic_controller/cockroach/aggro planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, @@ -31,6 +32,7 @@ /// AI controller for roach who can shoot at you /datum/ai_controller/basic_controller/cockroach/glockroach planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, @@ -47,6 +49,7 @@ /// roach who shoots at you slightly slower /datum/ai_controller/basic_controller/cockroach/mobroach planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/random_speech/insect, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/vermin/crab.dm b/code/modules/mob/living/basic/vermin/crab.dm index c5bfa56f6c5..8840bf3c153 100644 --- a/code/modules/mob/living/basic/vermin/crab.dm +++ b/code/modules/mob/living/basic/vermin/crab.dm @@ -84,10 +84,11 @@ BB_FLEE_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee/from_flee_key, /datum/ai_planning_subtree/flee_target/from_flee_key, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/vermin/frog.dm b/code/modules/mob/living/basic/vermin/frog.dm index 32604286c81..0e4b7f2adc2 100644 --- a/code/modules/mob/living/basic/vermin/frog.dm +++ b/code/modules/mob/living/basic/vermin/frog.dm @@ -169,6 +169,7 @@ /datum/ai_controller/basic_controller/frog/trash planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/random_speech/frog, /datum/ai_planning_subtree/simple_find_target, diff --git a/code/modules/mob/living/basic/vermin/lizard.dm b/code/modules/mob/living/basic/vermin/lizard.dm index 5e3a07094a9..3d2d529697f 100644 --- a/code/modules/mob/living/basic/vermin/lizard.dm +++ b/code/modules/mob/living/basic/vermin/lizard.dm @@ -67,7 +67,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( diff --git a/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm index c9e8558ec5c..7f2767e1497 100644 --- a/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm +++ b/code/modules/mob/living/basic/vermin/mothroach/mothroach_ai.dm @@ -6,7 +6,7 @@ BB_EAT_FOOD_COOLDOWN = 1 MINUTES, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( diff --git a/code/modules/mob/living/basic/vermin/mouse.dm b/code/modules/mob/living/basic/vermin/mouse.dm index b027b13ba77..faf3c77707a 100644 --- a/code/modules/mob/living/basic/vermin/mouse.dm +++ b/code/modules/mob/living/basic/vermin/mouse.dm @@ -412,7 +412,7 @@ BB_SONG_LINES = MOUSE_SONG, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( @@ -458,10 +458,11 @@ ) ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = DEFAULT_AI_FLAGS | STOP_MOVING_WHEN_PULLED ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk planning_subtrees = list( + /datum/ai_planning_subtree/escape_captivity, /datum/ai_planning_subtree/pet_planning, /datum/ai_planning_subtree/simple_find_target, /datum/ai_planning_subtree/attack_obstacle_in_path, diff --git a/code/modules/mob/living/basic/vermin/space_bat.dm b/code/modules/mob/living/basic/vermin/space_bat.dm index 07bce71f2f5..194923c0d60 100644 --- a/code/modules/mob/living/basic/vermin/space_bat.dm +++ b/code/modules/mob/living/basic/vermin/space_bat.dm @@ -45,7 +45,7 @@ BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic, ) - ai_traits = STOP_MOVING_WHEN_PULLED + ai_traits = PASSIVE_AI_FLAGS ai_movement = /datum/ai_movement/basic_avoidance idle_behavior = /datum/idle_behavior/idle_random_walk/less_walking diff --git a/tgstation.dme b/tgstation.dme index 3a77a8fc3a0..e9eb05554a7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -954,6 +954,7 @@ #include "code\datums\ai\basic_mobs\basic_subtrees\capricious_retaliate.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\climb_tree.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\drag_items.dm" +#include "code\datums\ai\basic_mobs\basic_subtrees\escape_captivity.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\express_happiness.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_food.dm" #include "code\datums\ai\basic_mobs\basic_subtrees\find_paper_and_write.dm" @@ -1026,7 +1027,6 @@ #include "code\datums\ai\objects\mod.dm" #include "code\datums\ai\objects\vending_machines\vending_machine_behaviors.dm" #include "code\datums\ai\objects\vending_machines\vending_machine_controller.dm" -#include "code\datums\ai\oldhostile\hostile_tameable.dm" #include "code\datums\ai\robot_customer\robot_customer_behaviors.dm" #include "code\datums\ai\robot_customer\robot_customer_controller.dm" #include "code\datums\ai\robot_customer\robot_customer_subtrees.dm"