Replaced our NPC AI with Behavior Trees. (#96628)

This PR replaces our current NPC AI with a [behavior tree
system](https://en.wikipedia.org/wiki/Behavior_tree_(artificial_intelligence,_robotics_and_control)).
Behavior trees are a common way of creating AI in which you place nodes
in a tree structure to define what actions an AI should take.

AI controllers defined a list of /datum/ai_planning_subtree types in
behavior_nodes. Each subtree was a self-contained unit that could call
queue_behavior() to fire off /datum/ai_behavior actions. The controller
iterated subtrees in order, each one deciding independently whether to
queue something and deciding whether the next subtree would run.

This has a few issues:
1. There's no real structure; you are just defining a list of things to
try in order.
2. There was a loooot of subtrees that were basically the same as
another but with some slight modification
3. It was hard to understand.

Controllers now define a single json file describing a tree of nodes.
The tree is composed of structural composites:

Sequence - do A, then B, then C (and so on)
Selector - try A, if it fails try B, then C (and so on)
Parallel - run A and B simultaneously, with configurable failure/success
policies and or looping behavior
Subplan - loop a child continiously

Along that we also have "Decorators". These are nodes that basically
check a condition (E.g.; do we have a combat target). These decorators
can be used to gate behavior and are re-useable across behavior trees.
They also have a concept known as "Observers". Which lets them cancel
lower priority behavior in case their condition changes (Which we check
whenever a signal fires that fits that specific decorator). This makes
the AI much more responsive to change in environment.

For behaviors, we still use the ai_behavior datums. These are the actual
behaviors such as "Move to X", "Attack X". The only major change is that
these can no longer sleep() since they now run in the ai_controller.

Lastly, we now also have subtrees, except now they are essentially
pieces of behavior tree that can be re-used, or even overriden at
runtime or as a variable. Allowing for making modular AI made out of
several smaller trees.

You can set variables on these nodes directly via the extension (see
below), which should reduce the need to make subtypes of behaviors by a
lot. All of these vars are saved on the JSON and will be applied at
runtime.

If you are using subtrees, you can also assign "bindings" to these
variables, which will allow instances of the subtree to override those
variables.

Since a tree structure with variables becomes hard to parse in a JSON,
I've made a VSCode extension to edit these JSONs:

https://marketplace.visualstudio.com/items?itemName=BehaviorTreeG.behaviortreeg
https://github.com/CabinetOnFire/BehaviorTreeG

<img width="1795" height="1268" alt="image"
src="https://github.com/user-attachments/assets/56aa2f0b-3cf9-449f-bca4-8281fca82db6"
/>

This extension allows you to edit the behavior tree JSONs, and browse
through all the behaviors/decorators/subtrees we have

If you'd like more info on how to build these AI check out the
learn_ai.md. I will also make a tutorial to go over more depth on what
the system offers because I kind of suck at doing technical write-ups.

Targetting has been changed to. I've made a new acquire_targets behavior
that takes a target_source (what am I targetting) and
targetting_strategy (what does the candidate need to fulfill to be
considered a target). This allows us to make composites targetting
combinations to reduce the amount of specific find_and_set esque
behaviors we had before. Not everything is ported to this system but
that would be a longer term goal.

I've added a new build_bt script that converts all the behavior tree
JSONs into compiled versions. Why is this needed? Because I wanted to
keep using defines in behavior trees, so we need a way to convert this
into literal values before we send it to DM. This script runs on compile
and should also run in CI (If I didn't fuck that up!). This saves to a
new build/ folder.

I've ported every single AI in the game to this system (except raptors,
Kobsa is working on those so should be in soon!), so I do expect some
bugs to come out of this. But I also fixed some issues that have
probably been in the game for a long time such as:
- Fixed penguins being unable to fish
- Fixed bileworms not being able to devour people
- Fixes goldgrubs not grubbing gold (they could not mine!)
- Lizards actually eat food they find

Either way, I'd reccomend a long TM on this.

1. (Hopefully) a better development experience for making AI
2. Less copy-paste for behaviors, we should be able to re-use more
pieces to make behavior
3. Behavior trees is a more common pattern in making AI, so it should be
easier to find resources to find out how to do things.

🆑 CabinetOnFire, Iamgoofball, SmartKar, Ben10omintrix
refactor: Replaces our AI system with behavior trees, porting all
datum/ai to it
/🆑

I will add this PR with more details down the line. I think I got the
big picture but its a big PR, so sorry if I missed something important.

---------

Co-authored-by: Iamgoofball <iamgoofball@gmail.com>
Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com>
Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com>
This commit is contained in:
CabinetOnFire
2026-08-15 10:33:57 -06:00
committed by The Sharkenning
co-authored by Iamgoofball SmArtKar Ghom Ben10Omintrix SyncIt21
parent ad0d6a3e7d
commit df7832aa43
1272 changed files with 37929 additions and 13503 deletions
+24
View File
@@ -0,0 +1,24 @@
name: Check BT Compiled JSON
on:
pull_request:
paths:
- "code/**/*.bt.json"
- "code/_generated/behavior_trees/**"
- "code/__DEFINES/**"
- "tools/build_bt.py"
jobs:
check_bt_compiled:
name: Verify BT compiled JSON is up to date
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.x"
- name: Check compiled BT files are up to date
run: python tools/build_bt.py --check
+2 -1
View File
@@ -7,6 +7,7 @@
"Donkie.vscode-tgstation-test-adapter",
"anturk.dmi-editor",
"esbenp.prettier-vscode",
"biomejs.biome"
"biomejs.biome",
"BehaviorTreeG.behaviortreeg"
]
}
+8 -1
View File
@@ -1,6 +1,13 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"command": "python tools/build_bt.py",
"group": "build",
"presentation": { "reveal": "silent", "panel": "shared" },
"label": "Compile BT Trees"
},
{
"type": "process",
"command": "tools/build/build.sh",
@@ -17,7 +24,7 @@
"kind": "build",
"isDefault": true
},
"dependsOn": "dm: reparse",
"dependsOn": ["dm: reparse", "Compile BT Trees"],
"label": "Build All"
},
{
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_babies_target","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/make_babies","target_key":"BB_babies_target","child_types_key":"BB_babies_child"}]}],"observer_abort":3,"key":"BB_babies_target"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_bane_batman","required_dist":1},{"type":"/datum/bt_node/ai_behavior/break_spine/bane","target_key":"BB_bane_batman"}]}],"key":"BB_bane_batman"},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_bane_batman","target_source":"/datum/target_source/oview_single_type/living_mob","targeting_strategy":"/datum/targeting_strategy/conscious_mob","vision_range":7}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_in_vent","children":[{"type":"/datum/bt_node/ai_behavior/exit_vent"}]},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_entry_vent_target"},{"type":"/datum/bt_node/ai_behavior/enter_vent"}]}],"cooldown_key":"Venting Cooldown","cooldown_duration":"BB_ventcrawl_cooldown"}],"observer_abort":3,"key":"BB_entry_vent_target"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/pawn_buckled_to_obj","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/buckle_target_dangerous","children":[{"type":"/datum/bt_node/ai_behavior/break_out_of_object/from_bb","target_key":"BB_basic_mob_escape_target"}]},{"type":"/datum/bt_node/ai_behavior/resist"}]}],"observer_abort":2},{"type":"/datum/bt_node/decorator/pawn_contained_in_obj","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/container_attackable","children":[{"type":"/datum/bt_node/ai_behavior/break_out_of_object/from_bb","target_key":"BB_basic_mob_escape_target"}]},{"type":"/datum/bt_node/ai_behavior/resist"}]}],"observer_abort":2},{"type":"/datum/bt_node/decorator/pawn_grabbed_by_enemy","children":[{"type":"/datum/bt_node/ai_behavior/resist"}],"observer_abort":2},{"type":"/datum/bt_node/decorator/pawn_is_restrained","children":[{"type":"/datum/bt_node/ai_behavior/resist"}],"observer_abort":2}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/pawn_buckled_to_obj","children":[{"type":"/datum/bt_node/ai_behavior/resist"}],"observer_abort":2},{"type":"/datum/bt_node/decorator/pawn_contained_in_obj","children":[{"type":"/datum/bt_node/ai_behavior/resist"}],"observer_abort":2},{"type":"/datum/bt_node/decorator/pawn_grabbed_by_enemy","children":[{"type":"/datum/bt_node/ai_behavior/resist"}],"observer_abort":2},{"type":"/datum/bt_node/decorator/pawn_is_restrained","children":[{"type":"/datum/bt_node/ai_behavior/resist"}],"observer_abort":2}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/write_on_paper","paper_key":"BB_SIMPLE_CARRY_ITEM","writing_list_key":"BB_writing_list"}],"observer_abort":1,"key":"BB_SIMPLE_CARRY_ITEM"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/attack_obstructions","time_between_perform":4.0,"target_key":"BB_found_paper","can_attack_turfs":true,"can_attack_dense_objects":true},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_found_paper","required_dist":0}]},{"type":"/datum/bt_node/ai_behavior/pick_up_item_virtual","target_key":"BB_found_paper","storage_key":"BB_SIMPLE_CARRY_ITEM"}]}],"success_policy":1,"failure_policy":1}],"observer_abort":2,"key":"BB_found_paper"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"swim_alternate_turf","required_dist":0,"finish_on_arrival":true}],"observer_abort":3,"key":"swim_alternate_turf"},{"type":"/datum/bt_node/ai_behavior/set_bb_cooldown","cooldown_key":"key_swimmer_cooldown","cooldown_duration":300},{"type":"/datum/bt_node/ai_behavior/wait","duration":300},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"swim_alternate_turf","targeting_strategy":"/datum/targeting_strategy/walkable_turf","target_source":"/datum/target_source/oview_land_turfs"},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"swim_alternate_turf","required_dist":0,"finish_on_arrival":true}]},{"type":"/datum/bt_node/ai_behavior/swim_splash"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/subplan","children":[{"type":"$bqdqne64"}],"__bindings":{"bqdqne64":{"label":"speech_behavior","default":"/datum/bt_node/ai_behavior/random_speech_blackboard"}},"success_policy":1,"failure_policy":1,"loop_delay":10}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/find_flee_location","target_key":"$byk9gqj4","hiding_location_key":"Current Target Hiding Location","destination_key":"BB_flee_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_flee_location","required_dist":0,"finish_on_arrival":true}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_basic_stop_fleeing","invert":true,"observer_abort":3,"__bindings":{"byk9gqj4":{"label":"target_key","default":"Current Target"}}}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/find_flee_location","target_key":"Current Target","hiding_location_key":"Current Target Hiding Location","destination_key":"BB_flee_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_flee_location","required_dist":0,"finish_on_arrival":true}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_basic_stop_fleeing","invert":true,"observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_at_distance","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"}],"target_key":"Current Target","maximum_distance":9},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}]}],"key":"Current Target","observer_abort":1},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/nearest","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/ai_behavior/tipped_reaction"}],"key":"BB_basic_tip_reacting","observer_abort":2}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack/dog","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack/minebot","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack/glockroach","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_home","required_dist":1,"finish_on_arrival":false},{"type":"/datum/bt_node/ai_behavior/enter_exit_hive"},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/key_in_typelist","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/keys_different_gender","children":[{"type":"/datum/bt_node/ai_behavior/perform_emote","emote":"Seems confused"}],"invert":true,"key_a":"Literally me","key_b":"BB_current_pet_target"},{"type":"/datum/bt_node/ai_behavior/ai_interact","target_key":"BB_current_pet_target","combat_mode":false}]},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}],"key":"BB_current_pet_target","typelist_key":"BB_babies_partner"}],"key":"BB_current_pet_target","observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/forget_failed_fetches"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/fetch_seek","target_key":"BB_current_pet_target"},{"type":"/datum/bt_node/ai_behavior/pick_up_item_virtual","target_key":"BB_current_pet_target","storage_key":"BB_SIMPLE_CARRY_ITEM"}]}],"key":"BB_current_pet_target","observer_abort":3}]},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_FETCH_DELIVER_TO","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/pass_item_virtual","delivery_key":"BB_FETCH_DELIVER_TO","storage_key":"BB_SIMPLE_CARRY_ITEM"},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}],"key":"BB_FETCH_DELIVER_TO","observer_abort":3}],"key":"BB_SIMPLE_CARRY_ITEM","observer_abort":3},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/wait"}],"observer_abort":3,"invert":true,"key":"BB_current_pet_target"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false},{"type":"/datum/bt_node/ai_behavior/ai_interact","target_key":"BB_current_pet_target","combat_mode":false}]}],"success_policy":1,"failure_policy":0}],"key":"BB_current_pet_target","observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":true}],"success_policy":1,"failure_policy":0}],"key":"BB_current_pet_target","observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false},{"type":"/datum/bt_node/ai_behavior/mine_wall","target_key":"BB_current_pet_target"}]}],"key":"BB_current_pet_target","observer_abort":3},{"type":"/datum/bt_node/ai_behavior/find_mineral_wall","target_key":"BB_current_pet_target"},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":0,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}],"key":"BB_current_pet_target","observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/play_dead"},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/protect_owner_check"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/protect_owner_check"},{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack/glockroach","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/subtree/run_away_from_target","bindings":{"byk9gqj4":"BB_current_pet_target"}},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/ai_behavior/wait","duration":0}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"BB_current_pet_target","targeting_strategy":"BB_pet_targeting","hiding_location_key":"BB_pet_attack_hiding_location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/swirl_around_target"},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_swirl_turf","required_dist":0,"finish_on_arrival":true}]}]}],"success_policy":1,"failure_policy":1}],"key":"BB_swarm_target","observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_TARGETED_action","target_key":"BB_current_pet_target"},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_current_pet_target","required_dist":1,"finish_on_arrival":false}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_current_pet_target","observer_abort":3}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/use_mob_ability","ability_key":"BB_pet_active_ability"},{"type":"/datum/bt_node/ai_behavior/clear_pet_command"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_ability_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_wizard_targeted_spell","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_wizard_secondary_spell","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_wizard_blink_spell","target_key":"Current Target"}]}],"observer_abort":2,"cooldown_key":"BB_wizard_spell_cooldown","cooldown_duration":10}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":3,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"invert":false,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_ability_melee_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_TARGETED_action","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_ability_ranged_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_TARGETED_action","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_ability_retaliate_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"BB_TARGETED_action","target_key":"Current Target"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":3,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"BB_basic_mob_shitlist"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_capricious_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"BB_basic_mob_shitlist"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/subtree/capricious_pick_target"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/simple_fearful_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/nearest","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true},{"type":"/datum/bt_node/subtree/random_walk"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree","override_id":"pet_command"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_hostile_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true},{"type":"$bbrbyj7y"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk","bindings":{"bf07i8ep":"$bp3p5vvb"}}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"__bindings":{"bbrbyj7y":{"label":"combat_speech_behavior","default":""},"bp3p5vvb":{"label":"walk_chance","default":25}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":0,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]},{"type":"$bhvqd9fh"}],"__bindings":{"bhvqd9fh":{"label":"speech loop subtree","default":"/datum/bt_node/subtree"}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"},{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack"}],"success_policy":1,"failure_policy":1,"loop_delay":10}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true},{"type":"/datum/bt_node/subtree/pick_retaliate_target"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":0,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false},{"type":"$b95z0f0c"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"$by235tlw"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"$bqul7l8t"}],"__bindings":{"b95z0f0c":{"label":"while_attacking_subtree","default":""},"by235tlw":{"label":"cant_attack_subtree","default":""},"bqul7l8t":{"label":"speech_subtree","default":"/datum/bt_node/subtree"}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_ranged_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","time_between_perform":6.0,"target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target","approach_movement_type":"/datum/ai_movement/basic_avoidance"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"$bsjjwub2"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"__bindings":{"bsjjwub2":{"label":"idle_behavior","default":"/datum/bt_node/subtree/random_walk"}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_ranged_retaliate_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"Current Target","observer_abort":1},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_retaliate_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location","check_faction":"$b2jvnm5d"}],"__bindings":{"b2jvnm5d":{"label":"check_faction","default":0}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/simple_skirmisher_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/simple_skittish_combat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"}],"key":"Current Target","observer_abort":1},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list/nearest","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true},{"type":"/datum/bt_node/subtree/random_walk"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/subtree/random_speech_loop"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/decorator/bot_mode_flag","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/find_next_beacon_target","target_key":"beacon_target"}],"key":"previous_beacon_target"},{"type":"/datum/bt_node/ai_behavior/find_first_beacon_target","target_key":"beacon_target"}]},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"beacon_target","required_dist":0,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/arrive_at_beacon","target_key":"beacon_target"}]}],"key":"beacon_target"}]}],"observer_abort":2,"flag":2}],"observer_abort":2,"cooldown_key":"bot_beacon_cooldown"},{"type":"/datum/bt_node/ai_behavior/wait","duration":10}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"bot_summon_target","required_dist":0,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/complete_summon_travel","target_key":"bot_summon_target"}]}],"key":"bot_summon_target"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/find_valid_authority","target_key":"salute_target"},{"type":"/datum/bt_node/ai_behavior/salute_authority","target_key":"salute_target","salute_keys":"salute_messages"}]}],"cooldown_key":"salute_cooldown","cooldown_duration":600}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/throw_attack/haunted","target_key":"BB_haunt_target","throw_count_key":"BB_haunted_throw_attempt_count","haunt_list_key":"BB_to_haunt_list"}],"success_policy":1,"failure_policy":0,"loop_delay":20},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_haunt_target","required_dist":3,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"BB_haunt_target"},{"type":"/datum/bt_node/ai_behavior/idle_ghost_item"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_haunt_target","target_source":"/datum/target_source/oview_single_type/carbon_mob","targeting_strategy":"/datum/targeting_strategy/anything","vision_range":7}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree","override_id":"pet_command"},{"type":"/datum/bt_node/subtree/dog_harassment"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/idle_dog"}],"success_policy":1,"failure_policy":0},{"type":"/datum/bt_node/subtree/random_speech_loop"},{"type":"/datum/bt_node/subtree/random_speech_loop"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree","override_id":"pet_command"},{"type":"/datum/bt_node/subtree/dog_harassment"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/make_babies"},{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/idle_dog"}],"success_policy":1,"failure_policy":0}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/subtree/find_partner"},{"type":"/datum/bt_node/subtree/random_speech_loop"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/random_chance","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/find_hated_dog_target","target_key":"BB_DOG_HARASS_TARGET","targeting_strategy":"BB_pet_targeting"},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_DOG_HARASS_TARGET","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack/dog","target_key":"BB_DOG_HARASS_TARGET","targeting_strategy":"BB_pet_targeting","hiding_location_key":"Current Target Hiding Location"}]}],"chance":0.1}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/consume","target_key":"bb_food_target","hunger_timer_key":"BB_NEXT_HUNGRY"},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"bb_food_target","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/pick_up","target_key":"bb_food_target","drop_held":true}]}]}],"key":"bb_food_target"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/decorator/is_holding_target","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_SONG_INSTRUMENT"},{"type":"/datum/bt_node/ai_behavior/pick_up","target_key":"BB_SONG_INSTRUMENT"}]}],"observer_abort":2,"invert":true,"key":"BB_SONG_INSTRUMENT"}],"invert":true,"key":"Has its instrument up its ass"},{"type":"/datum/bt_node/ai_behavior/keep_playing_instrument","song_instrument_key":"BB_SONG_INSTRUMENT"},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/setup_instrument","song_instrument_key":"BB_SONG_INSTRUMENT","song_lines_key":"song_lines"},{"type":"/datum/bt_node/ai_behavior/play_instrument","song_instrument_key":"BB_SONG_INSTRUMENT","volume":"$bulu13xf"}]}]}],"key":"BB_SONG_INSTRUMENT","__bindings":{"bulu13xf":{"label":"volume","default":50}}}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/capricious_retaliate","targeting_strategy":"targeting_strategy","ignore_faction":true},{"type":"/datum/bt_node/subtree/pick_retaliate_target"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_climbed_tree"},{"type":"/datum/bt_node/ai_behavior/ai_interact","target_key":"BB_climbed_tree"},{"type":"/datum/bt_node/ai_behavior/clear_key","key":"BB_climbed_tree"}]}],"observer_abort":3,"key":"BB_climbed_tree"}],"observer_abort":2,"cooldown_key":"Tree Climbing Cooldown","cooldown_duration":"$bb0lcfol","__bindings":{"bb0lcfol":{"label":"tree_climbing_cooldown","default":300}}}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target","target_key":"BB_TARGET_FOOD","targeting_strategy":"/datum/targeting_strategy/pickup_item","target_source":"/datum/target_source/oview_typed/from_bb_key/basic_foods","revalidation_mode":1}],"observer_abort":1,"cooldown_key":"BB_next_food_eat"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/ai_behavior/find_partner","target_key":"BB_babies_target","partner_types_key":"BB_babies_partner","child_types_key":"BB_babies_child"}],"cooldown_key":"BB_partner_search_timeout"}],"key":"BB_breed_ready"}],"observer_abort":2,"key":"can we fuck?"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_dragging","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/ai_behavior/stop_dragging"}],"chance_key":"guilty_concious_rate"},{"type":"/datum/bt_node/ai_behavior/succeed"}]}]},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_WANTS_TO_COMMIT_THEFT","value":true}],"chance_key":"steal_chance"}],"invert":true,"key":"BB_WANTS_TO_COMMIT_THEFT"},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/ai_behavior/succeed"}],"invert":true,"key":"BB_WANTS_TO_COMMIT_THEFT"},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"item_to_steal","targeting_strategy":"/datum/targeting_strategy/pickup_item/stealable_item","target_source":"/datum/target_source/oview","must_be_reachable":true},{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_WANTS_TO_COMMIT_THEFT","value":false}]}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"key":"BB_basic_mob_shitlist","observer_abort":1},{"type":"/datum/bt_node/subtree/move_to_and_eat"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/subtree/random_walk"}],"key":"BB_disable_idle","invert":true}]},{"type":"$z4n9bk7p"},{"type":"$q8w3rtv1"}],"__bindings":{"q8w3rtv1":{"label":"Food Finder","default":"/datum/bt_node/subtree/find_food"},"z4n9bk7p":{"label":"Retaliate Manager","default":"/datum/bt_node/subtree/capricious_pick_target"}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_TARGET_FOOD","required_dist":1},{"type":"/datum/bt_node/ai_behavior/perform_emote","emote":"eats up happily!"},{"type":"/datum/bt_node/ai_behavior/ai_interact","target_key":"BB_TARGET_FOOD"}]}],"observer_abort":3,"key":"BB_TARGET_FOOD"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"$b3y599q4","required_dist":1},{"type":"/datum/bt_node/ai_behavior/hunt_target/interact_with_target","target_key":"$brrasnah","always_reset_target":"$b3cnse9r","hunt_cooldown":"$bqwjf4id","cooldown_key":"$bm3y5m55","behavior_combat_mode":"$bd1towgc"}]}],"observer_abort":3,"key":"$bvtz06kb","__bindings":{"bvtz06kb":{"label":"hunting_target","default":"BB_low_priority_hunting_target"},"b3y599q4":{"label":"hunting_target","default":"BB_low_priority_hunting_target"},"brrasnah":{"label":"hunting_target","default":"BB_low_priority_hunting_target"},"bqwjf4id":{"label":"hunt_cooldown","default":50},"bm3y5m55":{"label":"cooldown_key","default":""},"bd1towgc":{"label":"behavior_combat_mode","default":1},"b3cnse9r":{"label":"always_reset_target","default":1}}}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_basic_mob_reinforcement_target","required_dist":0,"finish_on_arrival":false},{"type":"/datum/bt_node/ai_behavior/clear_key","key":"BB_basic_mob_reinforcement_target"}]}],"observer_abort":2,"key":"BB_basic_mob_reinforcement_target"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/true_for_time","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/idle_random_walk","walk_chance":"$bf07i8ep"}],"success_policy":1,"failure_policy":0,"loop_delay":15.0}],"duration":50,"__bindings":{"bf07i8ep":{"label":"walk_chance","default":25}}}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/subtree/simple_skittish_combat"}],"success_policy":1,"failure_policy":1},{"type":"$f17iiafz"}],"__bindings":{"f17iiafz":{"label":"Speech Behavior","default":"/datum/bt_node/ai_behavior/random_speech_blackboard"}},"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"item_to_steal"},{"type":"/datum/bt_node/ai_behavior/drag_target","target_key":"item_to_steal"},{"type":"/datum/bt_node/ai_behavior/copy_bb_key","dest_key":"BB_LAST_STOLEN_ITEM","source_key":"item_to_steal"},{"type":"/datum/bt_node/ai_behavior/clear_key","key":"item_to_steal"}]}],"observer_abort":3,"key":"item_to_steal"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/item_being_held","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/wait","duration":0}],"key":"BB_likes_equipper","observer_abort":1},{"type":"/datum/bt_node/ai_behavior/item_escape_grasp"}]}],"observer_abort":3},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/throw_attack/haunted","target_key":"BB_haunt_target","throw_count_key":"BB_haunted_throw_attempt_count","haunt_list_key":"BB_to_haunt_list"}],"success_policy":1,"failure_policy":0,"loop_delay":20},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_haunt_target","required_dist":3,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"BB_haunt_target"},{"type":"/datum/bt_node/ai_behavior/idle_ghost_item"}]},{"type":"/datum/bt_node/ai_behavior/pick_haunt_target","target_key":"BB_haunt_target","haunt_list_key":"BB_to_haunt_list"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/subtree/monkey_combat"},{"type":"/datum/bt_node/subtree/monkey_serve_food"},{"type":"/datum/bt_node/subtree/generic_hunger"},{"type":"/datum/bt_node/subtree/generic_play_instrument"},{"type":"/datum/bt_node/subtree/monkey_shenanigans"},{"type":"/datum/bt_node/ai_behavior/monkey_idle"}]},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/monkey_set_combat_target","attack_target_key":"Current Target","enemies_key":"BB_monkey_enemies"},{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_monkey_current_press_target","targeting_strategy":"/datum/targeting_strategy/anything","target_source":"/datum/target_source/monkey_press_target","vision_range":2}],"key":"Monkeys wants to press something"},{"type":"/datum/bt_node/decorator/bb_key_true","children":[{"type":"/datum/bt_node/decorator/random_chance","children":[{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"Monkeys wants to press something","value":true}],"chance":0.2}],"invert":true,"key":"Monkeys wants to press something"},{"type":"/datum/bt_node/ai_behavior/succeed"}]},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/target_is_holding_item","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_monkey_current_give_target","targeting_strategy":"/datum/targeting_strategy/anything","target_source":"/datum/target_source/oview_single_type/human_mob","vision_range":2}],"key":"Literally me"},{"type":"/datum/bt_node/decorator/target_is_holding_item","children":[{"type":"/datum/bt_node/ai_behavior/clear_key","key":"BB_monkey_current_give_target"}],"invert":true,"key":"Literally me"},{"type":"/datum/bt_node/ai_behavior/succeed"}]},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_holding_target","children":[{"type":"/datum/bt_node/ai_behavior/succeed"}],"key":"BB_SONG_INSTRUMENT"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_SONG_INSTRUMENT","targeting_strategy":"/datum/targeting_strategy/pickup_item","target_source":"/datum/target_source/held_items_typed/instrument"}],"key":"BB_monkey_tamed"},{"type":"/datum/bt_node/ai_behavior/succeed"}]},{"type":"/datum/bt_node/decorator/pawn_nutrition_below","children":[{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"bb_food_target","targeting_strategy":"/datum/targeting_strategy/pickup_item/food_or_drink","target_source":"/datum/target_source/held_items_then_oview","vision_range":2}],"cooldown_key":"BB_NEXT_HUNGRY"}]},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target/monkey_find_weapon","target_key":"BB_monkey_pickuptarget","target_source":"/datum/target_source/monkey_weapon_upgrade","targeting_strategy":"/datum/targeting_strategy/monkey_weapon_upgrade","vision_range":5}],"invert":true,"key":"BB_monkey_tamed"}]}]}],"key":"Current Target","invert":true},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target/monkey_find_weapon","target_key":"BB_monkey_pickuptarget","target_source":"/datum/target_source/monkey_weapon_upgrade","targeting_strategy":"/datum/targeting_strategy/monkey_weapon_upgrade","vision_range":5}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_at_distance","children":[{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"Current Target"}],"observer_abort":2,"invert":true,"target_key":"Current Target","maximum_distance":10,"require_reach":false},{"type":"/datum/bt_node/decorator/pawn_health_below","children":[{"type":"/datum/bt_node/subtree/run_away_from_target"}],"observer_abort":3,"health_threshold":40},{"type":"/datum/bt_node/subtree/monkey_find_weapon"},{"type":"/datum/bt_node/decorator/mob_stat_at_least","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_monkey_target_disposal","target_source":"/datum/target_source/oview_single_type/disposal_unit","targeting_strategy":"/datum/targeting_strategy/anything","vision_range":9},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/grab_target","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_monkey_target_disposal","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/stuff_in_disposal","attack_target_key":"Current Target","disposal_target_key":"BB_monkey_target_disposal"},{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"Current Target"}]},{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"Current Target"}]}],"observer_abort":2,"invert":false,"key":"Current Target","min_stat":1},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/ai_behavior/monkey_attack_mob","target_key":"Current Target"}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}]},{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/recruit_monkeys","target_key":"Current Target"}],"cooldown_key":"BB_monkey_recruit_cooldown","cooldown_duration":10}],"success_policy":1,"failure_policy":1,"loop_delay":50},{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/decorator/random_chance","children":[{"type":"/datum/bt_node/ai_behavior/battle_screech/monkey"}],"chance":0.25}],"cooldown_key":"Battle Screech Cooldown","cooldown_duration":5}],"success_policy":1,"failure_policy":1,"loop_delay":10},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target/monkey_find_weapon","time_between_perform":0,"target_key":"BB_monkey_pickuptarget","targeting_strategy":"/datum/targeting_strategy/monkey_weapon_upgrade","target_source":"/datum/target_source/monkey_weapon_upgrade","vision_range":5}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":2.0,"finish_on_primary":true}],"key":"Current Target","observer_abort":2}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_monkey_pickuptarget","required_dist":1,"finish_on_arrival":true,"movement_type":"/datum/ai_movement/jps"},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/monkey_equip/pickpocket","target_key":"BB_monkey_pickuptarget"}],"key":"BB_monkey_pickup_is_pickpocket"},{"type":"/datum/bt_node/ai_behavior/monkey_equip/ground","target_key":"BB_monkey_pickuptarget"}]}]}],"observer_abort":3,"key":"BB_monkey_pickuptarget"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/monkey_find_patrons","patrons_key":"BB_monkey_patrons_nearby","give_target_key":"BB_monkey_current_give_target"}],"cooldown_key":"Monkeys can look for patron","cooldown_duration":10,"lock_on_succeed":false},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/is_holding_target","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_monkey_current_give_target","required_dist":1,"finish_on_arrival":true,"movement_type":"/datum/ai_movement/jps"},{"type":"/datum/bt_node/ai_behavior/give","target_key":"BB_monkey_current_give_target"}]}],"key":"BB_monkey_current_served_item"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_monkey_current_served_item","targeting_strategy":"/datum/targeting_strategy/pickup_item/food_or_drink/include_drinks","target_source":"/datum/target_source/held_items_then_oview","vision_range":2,"must_be_reachable":true},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_monkey_current_served_item","required_dist":1,"finish_on_arrival":true,"movement_type":"/datum/ai_movement/jps"},{"type":"/datum/bt_node/ai_behavior/pick_up","target_key":"BB_monkey_current_served_item","drop_held":true}]}],"invert":false,"key":"BB_monkey_current_served_item"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_interaction_target","target_key":"BB_monkey_current_served_item","targeting_strategy":"/datum/targeting_strategy/pickup_item/food_or_drink/include_drinks","target_source":"/datum/target_source/held_items_then_oview","vision_range":2,"must_be_reachable":true}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}]}],"key":"BB_monkey_tamed"}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/target_is_holding_item","children":[{"type":"/datum/bt_node/decorator/random_chance","children":[{"type":"/datum/bt_node/ai_behavior/use_in_hand"}],"chance":0.05}],"key":"Literally me"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_monkey_current_press_target","required_dist":1,"finish_on_arrival":true,"movement_type":"/datum/ai_movement/jps"},{"type":"/datum/bt_node/ai_behavior/use_on_object","target_key":"BB_monkey_current_press_target"},{"type":"/datum/bt_node/ai_behavior/set_bb_key","target_key":"BB_monkey_current_press_target"},{"type":"/datum/bt_node/ai_behavior/clear_key","key":"Monkeys wants to press something"}]}],"key":"BB_monkey_current_press_target"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/random_chance_from_key","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_monkey_current_give_target","required_dist":1,"finish_on_arrival":true,"movement_type":"/datum/ai_movement/jps"},{"type":"/datum/bt_node/ai_behavior/give","target_key":"BB_monkey_current_give_target"}]}],"chance_key":"BB_monkey_give_chance"}],"key":"BB_monkey_current_give_target"},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/subtree/monkey_find_weapon"}],"key":"BB_monkey_tamed"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/vending_is_tilted","children":[{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/ai_behavior/vendor_rise_up"}],"cooldown_key":"BB_vending_untilt_cooldown"}]},{"type":"/datum/bt_node/decorator/vending_is_tilted","children":[{"type":"/datum/bt_node/decorator/key_off_cooldown","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/find_vendor_target","target_key":"BB_vending_current_target","vision_range":7},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_vending_current_target","required_dist":1,"finish_on_arrival":true},{"type":"/datum/bt_node/ai_behavior/vendor_crush","target_key":"BB_vending_current_target"}]}],"cooldown_key":"BB_vending_tilt_cooldown"}],"invert":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/robot_customer/find_exit_portal"},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_customer_exit_portal","required_dist":0},{"type":"/datum/bt_node/ai_behavior/robot_customer/leave_venue"}]}],"key":"BB_customer_leaving","observer_abort":2},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_customer_current_target","required_dist":1},{"type":"/datum/bt_node/ai_behavior/break_spine","target_key":"BB_customer_current_target"}]}],"key":"BB_customer_current_target","observer_abort":2},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/robot_customer/find_seat"}],"cooldown_key":"BB_customer_find_seat_cooldown","cooldown_duration":80,"lock_on_succeed":false}],"key":"BB_customer_my_seat","invert":true},{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/sequence","children":[{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"BB_customer_my_seat","required_dist":0},{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/ai_behavior/robot_customer/order_food"}],"key":"BB_customer_current_order","invert":true},{"type":"/datum/bt_node/ai_behavior/robot_customer/wait_for_food"}]}]}],"key":"BB_customer_my_seat"}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/ai_behavior/targeted_mob_ability","ability_key":"netguardian_rocket","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack/avoid_friendly_fire","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location","time_between_perform":10},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets/most_wounded","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_equals","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/call_reinforcements"}],"observer_abort":2,"cooldown_key":"BB_basic_mob_reinforcements_cooldown","cooldown_duration":300,"lock_on_succeed":true}],"key":"BB_calls_reinforcements","value":true},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/move_to_reinforce"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_equals","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/call_reinforcements"}],"observer_abort":2,"cooldown_key":"BB_basic_mob_reinforcements_cooldown","cooldown_duration":300,"lock_on_succeed":true}],"key":"BB_calls_reinforcements","value":true},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/move_to_target","target_key":"Current Target","required_dist":1,"finish_on_arrival":false}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/move_to_reinforce"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_equals","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/call_reinforcements"}],"observer_abort":2,"cooldown_key":"BB_basic_mob_reinforcements_cooldown","cooldown_duration":300,"lock_on_succeed":true}],"key":"BB_calls_reinforcements","value":true},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/ai_behavior/succeed"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/move_to_reinforce"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/update_combat_targets","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/subtree/escape_captivity"},{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_set","children":[{"type":"/datum/bt_node/composite/parallel","children":[{"type":"/datum/bt_node/composite/subplan","children":[{"type":"/datum/bt_node/composite/selector","children":[{"type":"/datum/bt_node/decorator/bb_key_equals","children":[{"type":"/datum/bt_node/decorator/cooldown","children":[{"type":"/datum/bt_node/ai_behavior/call_reinforcements"}],"observer_abort":2,"cooldown_key":"BB_basic_mob_reinforcements_cooldown","cooldown_duration":300,"lock_on_succeed":true}],"key":"BB_calls_reinforcements","value":true},{"type":"/datum/bt_node/ai_behavior/attack_obstructions","target_key":"Current Target"},{"type":"/datum/bt_node/ai_behavior/basic_ranged_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/ai_behavior/basic_melee_attack","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"},{"type":"/datum/bt_node/ai_behavior/succeed"}]}],"success_policy":1,"failure_policy":1},{"type":"/datum/bt_node/ai_behavior/maintain_distance","target_key":"Current Target"}],"failure_policy":1,"success_policy":0,"repeat_secondary":true,"finish_on_primary":true}],"observer_abort":3,"key":"Current Target"},{"type":"/datum/bt_node/subtree/move_to_reinforce"},{"type":"/datum/bt_node/subtree/random_walk"}]},{"type":"/datum/bt_node/ai_behavior/acquire_target/target_from_retaliate_list","target_key":"Current Target","targeting_strategy":"targeting_strategy","hiding_location_key":"Current Target Hiding Location"}],"failure_policy":0,"success_policy":0,"repeat_secondary":true,"repeat_secondary_delay":10,"finish_on_primary":true}]}
@@ -0,0 +1 @@
{"type":"/datum/bt_node/subtree/basic_alien","bindings":{"buewuqr6":"/datum/bt_node/subtree/melee_alien_combat","bkzbx73d":"/datum/bt_node/subtree/lay_alien_egg"}}

Some files were not shown because too many files have changed in this diff Show More