diff --git a/code/datums/ai/_ai_controller.dm b/code/datums/ai/_ai_controller.dm index 4d5b6600443..239f02b05b8 100644 --- a/code/datums/ai/_ai_controller.dm +++ b/code/datums/ai/_ai_controller.dm @@ -311,6 +311,32 @@ multiple modular subtrees with behaviors return FALSE return TRUE +///Can this pawn interact with objects? +/datum/ai_controller/proc/ai_can_interact() + SHOULD_CALL_PARENT(TRUE) + return !QDELETED(pawn) + +///Interact with objects +/datum/ai_controller/proc/ai_interact(target, combat_mode, list/modifiers) + if(!ai_can_interact()) + return FALSE + + var/atom/final_target = isdatum(target) ? target : blackboard[target] //incase we got a blackboard key instead + + if(QDELETED(final_target)) + return FALSE + var/params = list2params(modifiers) + var/mob/living/living_pawn = pawn + if(isnull(combat_mode)) + living_pawn.ClickOn(final_target, params) + return TRUE + + var/old_combat_mode = living_pawn.combat_mode + living_pawn.set_combat_mode(combat_mode) + living_pawn.ClickOn(final_target, params) + living_pawn.set_combat_mode(old_combat_mode) + return TRUE + ///Runs any actions that are currently running /datum/ai_controller/process(seconds_per_tick) diff --git a/code/datums/ai/babies/babies_behaviors.dm b/code/datums/ai/babies/babies_behaviors.dm index ad57d309a2c..aa8a15a03e4 100644 --- a/code/datums/ai/babies/babies_behaviors.dm +++ b/code/datums/ai/babies/babies_behaviors.dm @@ -58,17 +58,9 @@ var/mob/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != CONSCIOUS) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/living_pawn = controller.pawn - living_pawn.set_combat_mode(FALSE) - living_pawn.melee_attack(target) + controller.ai_interact(target = target, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/make_babies/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() controller.clear_blackboard_key(target_key) - if(!succeeded) - return - var/mob/living/living_pawn = controller.pawn - if(QDELETED(living_pawn)) // pawn can be null at this point - return - living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) diff --git a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm index 883c157a96b..aba62f2dc7b 100644 --- a/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm +++ b/code/datums/ai/basic_mobs/basic_ai_behaviors/basic_attacking.dm @@ -8,8 +8,6 @@ . = ..() if(!controller.blackboard[targeting_strategy_key]) CRASH("No targeting strategy was supplied in the blackboard for [controller.pawn]") - if(HAS_TRAIT(controller.pawn, TRAIT_HANDS_BLOCKED)) - return FALSE //Hiding location is priority var/atom/target = controller.blackboard[hiding_location_key] || controller.blackboard[target_key] if(QDELETED(target)) @@ -35,11 +33,8 @@ controller.set_blackboard_key(hiding_location_key, hiding_target) - if(hiding_target) //Slap it! - basic_mob.melee_attack(hiding_target) - else - basic_mob.melee_attack(target) - + var/atom/final_target = hiding_target || target + controller.ai_interact(target = final_target, combat_mode = TRUE) if(terminate_after_action) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED return AI_BEHAVIOR_DELAY diff --git a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm index dc3f6ddcf90..12875f9a3f3 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/mine_walls.dm @@ -24,9 +24,8 @@ var/mob/living/basic/living_pawn = controller.pawn var/turf/closed/mineral/target = controller.blackboard[target_key] var/is_gibtonite_turf = istype(target, /turf/closed/mineral/gibtonite) - if(QDELETED(target)) + if(!controller.ai_interact(target = target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - living_pawn.melee_attack(target) if(is_gibtonite_turf) living_pawn.manual_emote("sighs...") //accept whats about to happen to us diff --git a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm index 3640a2052b5..43a3d400bc5 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/ranged_skirmish.dm @@ -43,6 +43,5 @@ if (distance > max_range || distance < min_range) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/gunman = controller.pawn - gunman.RangedAttack(target) + controller.ai_interact(target = target, combat_mode = TRUE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/basic_mobs/pet_commands/fetch.dm b/code/datums/ai/basic_mobs/pet_commands/fetch.dm index 87606fa0c65..5ff208560d2 100644 --- a/code/datums/ai/basic_mobs/pet_commands/fetch.dm +++ b/code/datums/ai/basic_mobs/pet_commands/fetch.dm @@ -109,7 +109,7 @@ if(!basic_pawn.Adjacent(snack)) return AI_BEHAVIOR_DELAY - basic_pawn.melee_attack(snack) // snack attack! + controller.ai_interact(target = snack) if(QDELETED(snack)) // we ate it! return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/generic/generic_behaviors.dm b/code/datums/ai/generic/generic_behaviors.dm index 1c0e1f65adf..c6fcbcfb572 100644 --- a/code/datums/ai/generic/generic_behaviors.dm +++ b/code/datums/ai/generic/generic_behaviors.dm @@ -101,11 +101,10 @@ if(QDELETED(target)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - pawn.set_combat_mode(FALSE) if(held_item) held_item.melee_attack_chain(pawn, target) else - pawn.UnarmedAttack(target, TRUE) + controller.ai_interact(target = target, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED diff --git a/code/datums/ai/hunting_behavior/hunting_behaviors.dm b/code/datums/ai/hunting_behavior/hunting_behaviors.dm index ba2da1c2d04..c202c4be6a7 100644 --- a/code/datums/ai/hunting_behavior/hunting_behaviors.dm +++ b/code/datums/ai/hunting_behavior/hunting_behaviors.dm @@ -117,31 +117,23 @@ if(always_reset_target && hunting_target_key) controller.clear_blackboard_key(hunting_target_key) -/datum/ai_behavior/hunt_target/unarmed_attack_target - ///do we toggle combat mode before interacting with the object? - var/switch_combat_mode = FALSE +/datum/ai_behavior/hunt_target/interact_with_target + ///what combat mode should we use to interact with + var/behavior_combat_mode = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) - if(switch_combat_mode) - hunter.combat_mode = !(hunter.combat_mode) - hunter.UnarmedAttack(hunted, TRUE) +/datum/ai_behavior/hunt_target/interact_with_target/target_caught(mob/living/hunter, obj/structure/cable/hunted) + var/datum/ai_controller/controller = hunter.ai_controller + controller.ai_interact(target = hunted, combat_mode = behavior_combat_mode) -/datum/ai_behavior/hunt_target/unarmed_attack_target/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - . = ..() - if(!switch_combat_mode) - return - var/mob/living/living_pawn = controller.pawn - living_pawn.combat_mode = initial(living_pawn.combat_mode) +/datum/ai_behavior/hunt_target/interact_with_target/combat_mode_off + behavior_combat_mode = FALSE -/datum/ai_behavior/hunt_target/unarmed_attack_target/switch_combat_mode - switch_combat_mode = TRUE - -/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target +/datum/ai_behavior/hunt_target/interact_with_target/reset_target always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target_combat_mode +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE /datum/ai_behavior/hunt_target/use_ability_on_target always_reset_target = TRUE diff --git a/code/datums/ai/hunting_behavior/hunting_corpses.dm b/code/datums/ai/hunting_behavior/hunting_corpses.dm index e720e4da947..89d100263fb 100644 --- a/code/datums/ai/hunting_behavior/hunting_corpses.dm +++ b/code/datums/ai/hunting_behavior/hunting_corpses.dm @@ -1,7 +1,7 @@ /// Find and attack corpses /datum/ai_planning_subtree/find_and_hunt_target/corpses finding_behavior = /datum/ai_behavior/find_hunt_target/corpses - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/mob/living) /// Find nearby dead mobs diff --git a/code/datums/ai/hunting_behavior/hunting_lights.dm b/code/datums/ai/hunting_behavior/hunting_lights.dm index 6b82e87f269..5062a8aaf92 100644 --- a/code/datums/ai/hunting_behavior/hunting_lights.dm +++ b/code/datums/ai/hunting_behavior/hunting_lights.dm @@ -1,11 +1,11 @@ /datum/ai_planning_subtree/find_and_hunt_target/look_for_light_fixtures target_key = BB_LOW_PRIORITY_HUNTING_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/light_fixtures - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/light_fixtures + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/light_fixtures hunt_targets = list(/obj/machinery/light) hunt_range = 7 -/datum/ai_behavior/hunt_target/unarmed_attack_target/light_fixtures +/datum/ai_behavior/hunt_target/interact_with_target/light_fixtures hunt_cooldown = 10 SECONDS always_reset_target = TRUE diff --git a/code/datums/ai/hunting_behavior/hunting_mouse.dm b/code/datums/ai/hunting_behavior/hunting_mouse.dm index d0e7161fd2d..f97ebf27ddf 100644 --- a/code/datums/ai/hunting_behavior/hunting_mouse.dm +++ b/code/datums/ai/hunting_behavior/hunting_mouse.dm @@ -1,13 +1,13 @@ // Mouse subtree to hunt down delicious cheese. /datum/ai_planning_subtree/find_and_hunt_target/look_for_cheese - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mouse + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/mouse hunt_targets = list(/obj/item/food/cheese) hunt_range = 1 // Mouse subtree to hunt down ... delicious cabling? /datum/ai_planning_subtree/find_and_hunt_target/look_for_cables target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mouse + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/mouse finding_behavior = /datum/ai_behavior/find_hunt_target/mouse_cable hunt_targets = list(/obj/structure/cable) hunt_range = 0 // Only look below us @@ -28,5 +28,5 @@ return below_the_cable.underfloor_accessibility >= UNDERFLOOR_INTERACTABLE // Our hunts have a decent cooldown. -/datum/ai_behavior/hunt_target/unarmed_attack_target/mouse +/datum/ai_behavior/hunt_target/interact_with_target/mouse hunt_cooldown = 20 SECONDS diff --git a/code/datums/ai/monkey/monkey_behaviors.dm b/code/datums/ai/monkey/monkey_behaviors.dm index e6720d7d96a..126c08daa1e 100644 --- a/code/datums/ai/monkey/monkey_behaviors.dm +++ b/code/datums/ai/monkey/monkey_behaviors.dm @@ -186,7 +186,7 @@ if(weapon) weapon.melee_attack_chain(living_pawn, target) else - living_pawn.UnarmedAttack(target, null, disarm ? list("right" = TRUE) : null) //Fake a right click if we're disarmin + controller.ai_interact(target = target, modifiers = disarm ? list(RIGHT_CLICK = TRUE) : null) controller.set_blackboard_key(BB_MONKEY_GUN_WORKED, TRUE) // We reset their memory of the gun being 'broken' if they accomplish some other attack else if(weapon) var/atom/real_target = target diff --git a/code/datums/components/pet_commands/pet_commands_basic.dm b/code/datums/components/pet_commands/pet_commands_basic.dm index 9f4dda9cca3..fd4e1f922c8 100644 --- a/code/datums/components/pet_commands/pet_commands_basic.dm +++ b/code/datums/components/pet_commands/pet_commands_basic.dm @@ -298,5 +298,5 @@ return ..() /datum/pet_command/point_targeting/fish/execute_action(datum/ai_controller/controller) - controller.queue_behavior(/datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target_combat_mode, BB_CURRENT_PET_TARGET) + controller.queue_behavior(/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off, BB_CURRENT_PET_TARGET) return SUBTREE_RETURN_FINISH_PLANNING diff --git a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm index b4d73ad5927..77fa9ce8ca0 100644 --- a/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm +++ b/code/modules/mob/living/basic/farm_animals/bee/bee_ai_behavior.dm @@ -26,14 +26,12 @@ /datum/ai_behavior/enter_exit_hive/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) var/obj/structure/beebox/current_home = controller.blackboard[target_key] - var/mob/living/bee_pawn = controller.pawn var/atom/attack_target = controller.blackboard[attack_key] if(attack_target) // forget about who we attacking when we go home controller.clear_blackboard_key(attack_key) - var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), current_home) - callback.Invoke() + controller.ai_interact(target = current_home, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive @@ -53,8 +51,7 @@ if(!potential_home.habitable(bee_pawn)) //the house become full before we get to it return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/datum/callback/callback = CALLBACK(bee_pawn, TYPE_PROC_REF(/mob/living/basic/bee, handle_habitation), potential_home) - callback.Invoke() + controller.ai_interact(target = potential_home, combat_mode = FALSE) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/inhabit_hive/finish_action(datum/ai_controller/controller, succeeded, target_key) 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 53d7e7191ef..33d091db4e4 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 @@ -21,7 +21,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/corpses/ice_whelp target_key = BB_TARGET_CANNIBAL finding_behavior = /datum/ai_behavior/find_hunt_target/corpses/dragon_corpse - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise hunt_targets = list(/mob/living/basic/mining/ice_whelp) hunt_range = 10 @@ -32,10 +32,10 @@ return FALSE return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise +/datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION -/datum/ai_behavior/hunt_target/unarmed_attack_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) +/datum/ai_behavior/hunt_target/interact_with_target/dragon_cannibalise/perform(seconds_per_tick, datum/ai_controller/controller, target_key, attack_key) var/mob/living/target = controller.blackboard[target_key] if(QDELETED(target) || target.stat != DEAD || target.pulledby) //we were too slow return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED @@ -66,20 +66,14 @@ set_movement_target(controller, target) /datum/ai_behavior/sculpt_statue/perform(seconds_per_tick, datum/ai_controller/controller, target_key) - var/atom/target = controller.blackboard[target_key] - var/mob/living/basic/living_pawn = controller.pawn - - if(QDELETED(target)) + if(!controller.ai_interact(target = target_key, combat_mode = FALSE)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - - living_pawn.melee_attack(target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/sculpt_statue/finish_action(datum/ai_controller/controller, succeeded, target_key) . = ..() controller.clear_blackboard_key(target_key) - //subtree to use our attacks on the victim /datum/ai_planning_subtree/targeted_mob_ability/ice_whelp ability_key = BB_WHELP_STRAIGHTLINE_FIRE 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 fa2a86787d8..7d1b40fc5ec 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 @@ -19,7 +19,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/destroy_surveillance target_key = BB_SURVEILLANCE_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/find_active_surveillance - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/obj/machinery/camera, /obj/machinery/light) hunt_range = 7 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 2ed4811e46f..440cfc2861b 100644 --- a/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm +++ b/code/modules/mob/living/basic/jungle/seedling/seedling_ai.dm @@ -19,7 +19,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/watering_can target_key = BB_WATERCAN_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target hunt_targets = list(/obj/item/reagent_containers/cup/watering_can) hunt_range = 7 @@ -32,7 +32,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/treat_hydroplants target_key = BB_HYDROPLANT_TARGET finding_behavior = /datum/ai_behavior/find_and_set/treatable_hydro - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant hunt_targets = list(/obj/machinery/hydroponics) hunt_range = 7 @@ -58,11 +58,11 @@ if(possible_trays.len) return pick(possible_trays) -/datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant +/datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant hunt_cooldown = 2 SECONDS always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/treat_hydroplant/target_caught(mob/living/living_pawn, obj/machinery/hydroponics/hydro_target) +/datum/ai_behavior/hunt_target/interact_with_target/treat_hydroplant/target_caught(mob/living/living_pawn, obj/machinery/hydroponics/hydro_target) if(QDELETED(hydro_target) || QDELETED(hydro_target.myseed)) return @@ -112,7 +112,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/fill_watercan target_key = BB_LOW_PRIORITY_HUNTING_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/suitable_dispenser - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/water_source + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/water_source hunt_targets = list(/obj/structure/sink, /obj/structure/reagent_dispensers) hunt_range = 7 @@ -135,7 +135,7 @@ return can_see(source, water_source, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/water_source +/datum/ai_behavior/hunt_target/interact_with_target/water_source behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_REQUIRE_REACH | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION hunt_cooldown = 5 SECONDS 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 3eab51b3faf..8ea2467a2a8 100644 --- a/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm +++ b/code/modules/mob/living/basic/lavaland/goldgrub/goldgrub_ai.dm @@ -84,7 +84,7 @@ ///consume food! /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores target_key = BB_ORE_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/hunt_ores finding_behavior = /datum/ai_behavior/find_hunt_target/hunt_ores hunt_targets = list(/obj/item/stack/ore) hunt_chance = 90 @@ -107,13 +107,13 @@ return can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/hunt_ores +/datum/ai_behavior/hunt_target/interact_with_target/hunt_ores always_reset_target = TRUE ///break boulders so that we can find more food! /datum/ai_planning_subtree/find_and_hunt_target/harvest_vents target_key = BB_VENT_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target //We call the ore vent's produce_boulder() proc here to produce a single boulder. + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target //We call the ore vent's produce_boulder() proc here to produce a single boulder. finding_behavior = /datum/ai_behavior/find_hunt_target/harvest_vents hunt_targets = list(/obj/structure/ore_vent) hunt_chance = 25 @@ -137,7 +137,7 @@ ///break boulders so that we can find more food! /datum/ai_planning_subtree/find_and_hunt_target/break_boulders target_key = BB_BOULDER_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target //We process boulders once every tap, so we dont need to do anything special here + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target //We process boulders once every tap, so we dont need to do anything special here finding_behavior = /datum/ai_behavior/find_hunt_target/break_boulders hunt_targets = list(/obj/item/boulder) hunt_chance = 100 //If we can, we should always break boulders. 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 c7f7e86c866..261f6d22a02 100644 --- a/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm +++ b/code/modules/mob/living/basic/lavaland/gutlunchers/gutlunchers_ai.dm @@ -73,7 +73,7 @@ ///consume food! /datum/ai_planning_subtree/find_and_hunt_target/food_trough target_key = BB_TROUGH_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/food_trough finding_behavior = /datum/ai_behavior/find_hunt_target/food_trough hunt_targets = list(/obj/structure/ore_container/food_trough/gutlunch_trough) hunt_chance = 75 @@ -96,9 +96,9 @@ return can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/food_trough +/datum/ai_behavior/hunt_target/interact_with_target/food_trough always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE /datum/pet_command/mine_walls command_name = "Mine" 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 32ec66a62cc..de62b43e4a0 100644 --- a/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm +++ b/code/modules/mob/living/basic/lavaland/lobstrosity/lobstrosity_ai.dm @@ -104,7 +104,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/lobster_fishing target_key = BB_FISHING_TARGET hunt_targets = list(/turf/open/lava) - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/reset_target_combat_mode + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off /datum/ai_planning_subtree/basic_melee_attack_subtree/lobster melee_attack_behavior = /datum/ai_behavior/basic_melee_attack/lobster @@ -323,7 +323,7 @@ var/atom/fingers = controller.blackboard[target_key] if (QDELETED(fingers) || living_pawn.pulling != fingers) return AI_BEHAVIOR_FAILED - living_pawn.melee_attack(fingers) + controller.ai_interact(target = fingers) return AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/hoard_fingers/finish_action(datum/ai_controller/controller, succeeded, target_key) 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 eeefc7a8b5c..15da812a0b2 100644 --- a/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm +++ b/code/modules/mob/living/basic/lavaland/mook/mook_ai.dm @@ -70,7 +70,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///deposit ores into the stand! /datum/ai_planning_subtree/find_and_hunt_target/material_stand target_key = BB_MATERIAL_STAND_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/material_stand finding_behavior = /datum/ai_behavior/find_hunt_target hunt_targets = list(/obj/structure/ore_container/material_stand) hunt_range = 9 @@ -81,14 +81,14 @@ GLOBAL_LIST_INIT(mook_commands, list( return return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand +/datum/ai_behavior/hunt_target/interact_with_target/material_stand required_distance = 0 always_reset_target = TRUE - switch_combat_mode = TRUE + behavior_combat_mode = FALSE behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT ///try to face the counter when depositing ores -/datum/ai_behavior/hunt_target/unarmed_attack_target/material_stand/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/material_stand/setup(datum/ai_controller/controller, hunting_target_key, hunting_cooldown_key) . = ..() var/atom/hunt_target = controller.blackboard[hunting_target_key] if (QDELETED(hunt_target)) @@ -297,7 +297,7 @@ GLOBAL_LIST_INIT(mook_commands, list( ///find injured miner mooks after they come home from a long day of work /datum/ai_planning_subtree/find_and_hunt_target/injured_mooks target_key = BB_INJURED_MOOK - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/injured_mooks finding_behavior = /datum/ai_behavior/find_hunt_target/injured_mooks hunt_targets = list(/mob/living/basic/mining/mook/worker) hunt_range = 9 @@ -313,9 +313,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_behavior/find_hunt_target/injured_mooks/valid_dinner(mob/living/source, mob/living/injured_mook) return (injured_mook.health < injured_mook.maxHealth) -/datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks - -/datum/ai_behavior/hunt_target/unarmed_attack_target/injured_mooks +/datum/ai_behavior/hunt_target/interact_with_target/injured_mooks always_reset_target = TRUE hunt_cooldown = 10 SECONDS @@ -405,7 +403,7 @@ GLOBAL_LIST_INIT(mook_commands, list( /datum/ai_planning_subtree/find_and_hunt_target/bonfire target_key = BB_MOOK_BONFIRE_TARGET finding_behavior = /datum/ai_behavior/find_hunt_target/bonfire - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bonfire + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/bonfire hunt_targets = list(/obj/structure/bonfire) hunt_range = 9 @@ -418,5 +416,5 @@ GLOBAL_LIST_INIT(mook_commands, list( return can_see(source, fire, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/bonfire +/datum/ai_behavior/hunt_target/interact_with_target/bonfire always_reset_target = TRUE diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm index 33a65586907..7e3022f9571 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_behavior.dm @@ -1,4 +1,4 @@ -/datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor +/datum/ai_behavior/hunt_target/interact_with_target/heal_raptor always_reset_target = TRUE /datum/ai_behavior/find_hunt_target/injured_raptor @@ -11,12 +11,11 @@ /datum/ai_behavior/find_hunt_target/raptor_victim/valid_dinner(mob/living/source, mob/living/target, radius) if(target.ai_controller?.blackboard[BB_RAPTOR_TROUBLE_MAKER]) return FALSE - return target.stat != DEAD && can_see(source, target, radius) + return target.stat != DEAD && can_see(source, target, radius) -/datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors - always_reset_target = TRUE +/datum/ai_behavior/hunt_target/interact_with_target/reset_target/bully_raptors -/datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/bully_raptors/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) if(succeeded) controller.set_blackboard_key(BB_RAPTOR_TROUBLE_COOLDOWN, world.time + 2 MINUTES) return ..() @@ -24,31 +23,13 @@ /datum/ai_behavior/find_hunt_target/raptor_baby/valid_dinner(mob/living/source, mob/living/target, radius) return can_see(source, target, radius) && target.stat != DEAD -/datum/ai_behavior/hunt_target/care_for_young - always_reset_target = TRUE +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off/care_for_young -/datum/ai_behavior/hunt_target/care_for_young/target_caught(mob/living/hunter, atom/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off/care_for_young/target_caught(mob/living/hunter, atom/hunted) hunter.manual_emote("grooms [hunted]!") - hunter.set_combat_mode(FALSE) - hunter.ClickOn(hunted) - -/datum/ai_behavior/hunt_target/care_for_young/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - var/mob/living/living_pawn = controller.pawn - living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) return ..() /datum/ai_behavior/find_hunt_target/raptor_trough /datum/ai_behavior/find_hunt_target/raptor_trough/valid_dinner(mob/living/source, atom/movable/trough, radius) return !!(locate(/obj/item/stack/ore) in trough.contents) - -/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough - always_reset_target = TRUE - -/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough/target_caught(mob/living/hunter, atom/hunted) - hunter.set_combat_mode(FALSE) - -/datum/ai_behavior/hunt_target/unarmed_attack_target/raptor_trough/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) - var/mob/living/living_pawn = controller.pawn - living_pawn.set_combat_mode(initial(living_pawn.combat_mode)) - return ..() diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm index 7ba0dad5561..a8d91963ebf 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm @@ -1,6 +1,6 @@ /datum/ai_planning_subtree/find_and_hunt_target/heal_raptors target_key = BB_INJURED_RAPTOR - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/heal_raptor finding_behavior = /datum/ai_behavior/find_hunt_target/injured_raptor hunt_targets = list(/mob/living/basic/raptor) hunt_chance = 70 @@ -13,7 +13,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/raptor_start_trouble target_key = BB_RAPTOR_VICTIM - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target/bully_raptors finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_victim hunt_targets = list(/mob/living/basic/raptor) hunt_chance = 30 @@ -36,7 +36,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/care_for_young target_key = BB_RAPTOR_BABY - hunting_behavior = /datum/ai_behavior/hunt_target/care_for_young + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off/care_for_young finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_baby hunt_targets = list(/mob/living/basic/raptor/baby_raptor) hunt_chance = 75 @@ -49,7 +49,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/raptor_trough target_key = BB_RAPTOR_TROUGH_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target_combat_mode_off finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_trough hunt_targets = list(/obj/structure/ore_container/food_trough/raptor_trough) hunt_chance = 80 diff --git a/code/modules/mob/living/basic/minebots/minebot_ai.dm b/code/modules/mob/living/basic/minebots/minebot_ai.dm index 31fed0ec1f3..8043fda65d0 100644 --- a/code/modules/mob/living/basic/minebots/minebot_ai.dm +++ b/code/modules/mob/living/basic/minebots/minebot_ai.dm @@ -98,7 +98,7 @@ return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED var/mob/living/living_pawn = controller.pawn living_pawn.say("REPAIRING [target]!") - living_pawn.UnarmedAttack(target) + controller.ai_interact(target = target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/repair_drone/finish_action(datum/ai_controller/controller, success, target_key) @@ -251,7 +251,7 @@ ///store ores in our body /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot hunt_chance = 100 /datum/ai_planning_subtree/find_and_hunt_target/hunt_ores/minebot/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick) @@ -263,10 +263,10 @@ return ..() -/datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot +/datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot hunt_cooldown = 2 SECONDS -/datum/ai_behavior/hunt_target/unarmed_attack_target/consume_ores/minebot/target_caught(mob/living/hunter, obj/item/stack/ore/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/consume_ores/minebot/target_caught(mob/living/hunter, obj/item/stack/ore/hunted) if(hunter.combat_mode) hunter.set_combat_mode(FALSE) return ..() diff --git a/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm index 35a5d9e12af..655a6431fc2 100644 --- a/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/bread_cat_ai.dm @@ -9,7 +9,7 @@ /datum/ai_planning_subtree/find_and_hunt_target/turn_off_stove target_key = BB_STOVE_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/stove_target finding_behavior = /datum/ai_behavior/find_hunt_target/stove hunt_targets = list(/obj/machinery/oven/range) hunt_range = 9 @@ -25,10 +25,10 @@ return FALSE return TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target +/datum/ai_behavior/hunt_target/interact_with_target/stove_target always_reset_target = TRUE -/datum/ai_behavior/hunt_target/unarmed_attack_target/stove_target/target_caught(mob/living/hunter, obj/machinery/oven/range/stove) +/datum/ai_behavior/hunt_target/interact_with_target/stove_target/target_caught(mob/living/hunter, obj/machinery/oven/range/stove) if(stove.open) return return ..() 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 d6589d29b40..8dde1049568 100644 --- a/code/modules/mob/living/basic/pets/cat/cat_ai.dm +++ b/code/modules/mob/living/basic/pets/cat/cat_ai.dm @@ -63,7 +63,7 @@ var/obj/structure/cat_house/home = controller.blackboard[target_key] var/mob/living/basic/living_pawn = controller.pawn if(living_pawn == home.resident_cat || isnull(home.resident_cat)) - living_pawn.melee_attack(home) + controller.ai_interact(target = home) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED @@ -213,13 +213,13 @@ /datum/ai_planning_subtree/find_and_hunt_target/find_cat_food target_key = BB_CAT_FOOD_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/find_cat_food + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/find_cat_food finding_behavior = /datum/ai_behavior/find_hunt_target/find_cat_food hunt_targets = list(/obj/item/fish, /obj/item/food/deadmouse, /obj/item/food/fishmeat) hunt_chance = 75 hunt_range = 9 -/datum/ai_behavior/hunt_target/unarmed_attack_target/find_cat_food +/datum/ai_behavior/hunt_target/interact_with_target/find_cat_food always_reset_target = TRUE /datum/ai_behavior/find_hunt_target/find_cat_food/valid_dinner(mob/living/source, atom/dinner, radius) @@ -253,7 +253,6 @@ return kitten return null -/datum/ai_behavior/deliver_food_to_kitten /datum/ai_behavior/deliver_food_to_kitten behavior_flags = AI_BEHAVIOR_REQUIRE_MOVEMENT | AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION | AI_BEHAVIOR_REQUIRE_REACH action_cooldown = 5 SECONDS 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 fb106809918..77263b17489 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 @@ -111,9 +111,7 @@ if(isnull(revive_mob) || revive_mob.stat != DEAD || !(revive_mob.mind in cult_team.members)) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_FAILED - var/mob/living/basic/living_pawn = controller.pawn - living_pawn.melee_attack(target) - + controller.ai_interact(target = target) return AI_BEHAVIOR_DELAY | AI_BEHAVIOR_SUCCEEDED /datum/ai_behavior/activate_rune/finish_action(datum/ai_controller/controller, success, target_key) diff --git a/code/modules/mob/living/basic/slime/ai/behaviours.dm b/code/modules/mob/living/basic/slime/ai/behaviours.dm index 35fe1a60c91..fe8102eee11 100644 --- a/code/modules/mob/living/basic/slime/ai/behaviours.dm +++ b/code/modules/mob/living/basic/slime/ai/behaviours.dm @@ -54,9 +54,9 @@ //We are not THAT hungry return FALSE -/datum/ai_behavior/hunt_target/unarmed_attack_target/slime +/datum/ai_behavior/hunt_target/interact_with_target/slime -/datum/ai_behavior/hunt_target/unarmed_attack_target/slime/target_caught(mob/living/basic/slime/hunter, mob/living/hunted) +/datum/ai_behavior/hunt_target/interact_with_target/slime/target_caught(mob/living/basic/slime/hunter, mob/living/hunted) if (!hunter.can_feed_on(hunted)) // Target is no longer edible hunter.UnarmedAttack(hunted, TRUE) return @@ -71,7 +71,7 @@ hunter.start_feeding(hunted) -/datum/ai_behavior/hunt_target/unarmed_attack_target/slime/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) +/datum/ai_behavior/hunt_target/interact_with_target/slime/finish_action(datum/ai_controller/controller, succeeded, hunting_target_key, hunting_cooldown_key) . = ..() var/mob/living/basic/slime/slime_pawn = controller.pawn var/atom/target = controller.blackboard[hunting_target_key] diff --git a/code/modules/mob/living/basic/slime/ai/pet_command.dm b/code/modules/mob/living/basic/slime/ai/pet_command.dm index 42d6b289937..33484e360fb 100644 --- a/code/modules/mob/living/basic/slime/ai/pet_command.dm +++ b/code/modules/mob/living/basic/slime/ai/pet_command.dm @@ -4,7 +4,7 @@ pointed_reaction = "and blorbles" refuse_reaction = "jiggles sadly" - var/hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/slime + var/hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/slime /datum/pet_command/point_targeting/attack/slime/execute_action(datum/ai_controller/controller) diff --git a/code/modules/mob/living/basic/slime/ai/subtrees.dm b/code/modules/mob/living/basic/slime/ai/subtrees.dm index 056befece5d..08886f98365 100644 --- a/code/modules/mob/living/basic/slime/ai/subtrees.dm +++ b/code/modules/mob/living/basic/slime/ai/subtrees.dm @@ -24,7 +24,7 @@ // Slime subtree for hunting down people to drain /datum/ai_planning_subtree/find_and_hunt_target/find_slime_food finding_behavior = /datum/ai_behavior/find_hunt_target/find_slime_food - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/slime + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/slime hunt_targets = list(/mob/living) hunt_range = 7 diff --git a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm index f50fca8c559..5051f815371 100644 --- a/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm +++ b/code/modules/mob/living/basic/space_fauna/eyeball/eyeball_ai_behavior.dm @@ -83,6 +83,6 @@ else return AI_BEHAVIOR_INSTANT | AI_BEHAVIOR_FAILED -/datum/ai_behavior/hunt_target/unarmed_attack_target/carrot +/datum/ai_behavior/hunt_target/interact_with_target/carrot hunt_cooldown = 2 SECONDS always_reset_target = TRUE 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 29ea1dfc352..17b260d03ed 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 @@ -47,6 +47,6 @@ /datum/ai_planning_subtree/find_and_hunt_target/carrot target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/carrot + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/carrot hunt_targets = list(/obj/item/food/grown/carrot) hunt_range = 6 diff --git a/code/modules/mob/living/basic/space_fauna/mushroom.dm b/code/modules/mob/living/basic/space_fauna/mushroom.dm index ae267542594..de501eaea2e 100644 --- a/code/modules/mob/living/basic/space_fauna/mushroom.dm +++ b/code/modules/mob/living/basic/space_fauna/mushroom.dm @@ -78,15 +78,10 @@ /datum/ai_planning_subtree/find_and_hunt_target/mushroom_food target_key = BB_LOW_PRIORITY_HUNTING_TARGET - hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/mushroom_food + hunting_behavior = /datum/ai_behavior/hunt_target/interact_with_target/reset_target hunt_targets = list(/obj/item/food/grown/mushroom) hunt_range = 6 - -/datum/ai_behavior/hunt_target/unarmed_attack_target/mushroom_food - hunt_cooldown = 15 SECONDS - always_reset_target = TRUE - /mob/living/basic/mushroom/UnarmedAttack(atom/attack_target, proximity_flag, list/modifiers) . = ..() if(!.)