Files

69 lines
2.5 KiB
Plaintext

/datum/ai_controller/basic_controller/snail
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
)
ai_movement = /datum/ai_movement/basic_avoidance
idle_behavior = /datum/idle_behavior/idle_random_walk
planning_subtrees = list(
/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
/datum/ai_planning_subtree/use_mob_ability/snail_retreat,
/datum/ai_planning_subtree/find_food,
/datum/ai_planning_subtree/find_and_hunt_target/snail_people,
)
/datum/ai_planning_subtree/find_and_hunt_target/snail_people
target_key = BB_LOW_PRIORITY_HUNTING_TARGET
finding_behavior = /datum/ai_behavior/find_hunt_target/snail_people
hunting_behavior = /datum/ai_behavior/hunt_target/snail_people
hunt_targets = list(
/mob/living/carbon,
)
hunt_range = 5
hunt_chance = 45
/datum/ai_behavior/find_hunt_target/snail_people
action_cooldown = 1 MINUTES
behavior_flags = AI_BEHAVIOR_CAN_PLAN_DURING_EXECUTION
/datum/ai_behavior/find_hunt_target/snail_people/valid_dinner(mob/living/source, mob/living/carbon/potential_snail, radius, datum/ai_controller/controller, seconds_per_tick)
if(!istype(potential_snail))
return FALSE
if(potential_snail.stat != CONSCIOUS)
return FALSE
if(!is_species(potential_snail, /datum/species/snail))
return FALSE
return can_see(source, potential_snail, radius)
/datum/ai_behavior/hunt_target/snail_people
always_reset_target = TRUE
/datum/ai_behavior/hunt_target/snail_people/target_caught(mob/living/hunter, atom/hunted)
hunter.manual_emote("Celebrates around [hunted]!")
hunter.SpinAnimation(speed = 1, loops = 3)
/datum/ai_planning_subtree/use_mob_ability/snail_retreat
ability_key = BB_SNAIL_RETREAT_ABILITY
finish_planning = TRUE
/datum/ai_planning_subtree/use_mob_ability/snail_retreat/SelectBehaviors(datum/ai_controller/controller, seconds_per_tick)
var/shell_retreated = HAS_TRAIT(controller.pawn, TRAIT_SHELL_RETREATED)
var/has_target = controller.blackboard_key_exists(BB_BASIC_MOB_CURRENT_TARGET)
if((has_target && shell_retreated) || (!has_target && !shell_retreated))
return
return ..()
/datum/ai_controller/basic_controller/snail/trash
blackboard = list(
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
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/basic_melee_attack_subtree,
)