Files
Paradise/code/datums/ai/basic_mobs/generic_controllers.dm
PollardTheDragon 0ae73635e2 Adds some generic AI controllers (#30061)
* Generic controllers

* Linters
2025-08-22 15:33:14 +00:00

135 lines
5.1 KiB
Plaintext

/// 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/simple_find_target,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)
/// Prowls around when not attacking people
/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/prowler
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
/datum/ai_planning_subtree/find_and_hunt_target/prowl,
/datum/ai_planning_subtree/attack_obstacle_in_path/prowl,
)
/// Will ventcrawl around until it finds a target to attack.
/datum/ai_controller/basic_controller/simple/simple_hostile_obstacles/ventcrawler
blackboard = list (
BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic,
BB_VENT_SEARCH_RANGE = 10
)
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
/datum/ai_planning_subtree/ventcrawl_find_target,
/datum/ai_planning_subtree/ventcrawl,
)
/// Find a target, keep distance
/datum/ai_controller/basic_controller/simple/simple_ranged
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/maintain_distance,
/datum/ai_planning_subtree/ranged_skirmish,
)
/// Retaliate at range, keep distance
/datum/ai_controller/basic_controller/simple/simple_ranged_retaliate
planning_subtrees = list(
/datum/ai_planning_subtree/target_retaliate,
/datum/ai_planning_subtree/maintain_distance,
/datum/ai_planning_subtree/ranged_skirmish,
)
/// Find a target, walk towards it AND shoot it
/datum/ai_controller/basic_controller/simple/simple_skirmisher
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/ranged_skirmish,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)
/// Wanders around until it finds something it can walk towards and shoot
/datum/ai_controller/basic_controller/simple/simple_skirmisher/prowler
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/ranged_skirmish,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
/datum/ai_planning_subtree/find_and_hunt_target/prowl,
/datum/ai_planning_subtree/attack_obstacle_in_path/prowl,
)
/// Use an ability on target on cooldown
/datum/ai_controller/basic_controller/simple/simple_ability
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_target,
/datum/ai_planning_subtree/maintain_distance,
/datum/ai_planning_subtree/targeted_mob_ability,
)
/// Use an ability to retaliate on cooldown
/datum/ai_controller/basic_controller/simple/simple_ability_retaliate
planning_subtrees = list(
/datum/ai_planning_subtree/target_retaliate,
/datum/ai_planning_subtree/maintain_distance,
/datum/ai_planning_subtree/targeted_mob_ability,
)
/// 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/simple_find_target,
/datum/ai_planning_subtree/targeted_mob_ability,
/datum/ai_planning_subtree/attack_obstacle_in_path,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)
/// 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/simple_find_target,
/datum/ai_planning_subtree/maintain_distance,
/datum/ai_planning_subtree/targeted_mob_ability,
/datum/ai_planning_subtree/ranged_skirmish,
)
/// Fight back if attacked
/datum/ai_controller/basic_controller/simple/retaliate
ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED
planning_subtrees = list(
/datum/ai_planning_subtree/target_retaliate,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)
/// Get pissed at random people for no reason. Most often seen with goats.
/datum/ai_controller/basic_controller/simple/simple_capricious
ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED
planning_subtrees = list(
/datum/ai_planning_subtree/capricious_retaliate,
/datum/ai_planning_subtree/target_retaliate,
/datum/ai_planning_subtree/basic_melee_attack_subtree,
)
/// Runs away from anyone it sees
/datum/ai_controller/basic_controller/simple/simple_fearful
ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED
planning_subtrees = list(
/datum/ai_planning_subtree/simple_find_nearest_target_to_flee,
/datum/ai_planning_subtree/flee_target,
)
/// Runs away when attacked
/datum/ai_controller/basic_controller/simple/simple_skittish
ai_traits = AI_FLAG_STOP_MOVING_WHEN_PULLED
planning_subtrees = list(
/datum/ai_planning_subtree/find_nearest_thing_which_attacked_me_to_flee,
/datum/ai_planning_subtree/flee_target,
)