init
This commit is contained in:
250
Prototypes/NPCs/Combat/gun.yml
Normal file
250
Prototypes/NPCs/Combat/gun.yml
Normal file
@@ -0,0 +1,250 @@
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# Tries to shoot a target at range.
|
||||
- type: htnCompound
|
||||
id: GunCombatCompound
|
||||
branches:
|
||||
# Pick target, then move into range and shoot them.
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyGunTargets
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
shutdownState: PlanFinished
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
stopOnLineOfSight: true
|
||||
rangeKey: MeleeRange
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:JukeOperator
|
||||
jukeType: AdjacentTile
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
operator: !type:GunOperator
|
||||
targetKey: Target
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: RangedService
|
||||
proto: NearbyGunTargets
|
||||
key: Target
|
||||
|
||||
# Selects ammo in range, then moves to it and picks it up
|
||||
- type: htnCompound
|
||||
id: PickupAmmoCompound
|
||||
branches:
|
||||
# Find ammo then pick it up.
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyAmmo
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: InteractRange
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: Target
|
||||
# TODO: Prioritise ammo for weapon we have equipped, otherwise grab anything if we don't have any.
|
||||
# TODO: Only works on ballistic
|
||||
|
||||
# Selects a gun in range, then moves to it and picks it up.
|
||||
- type: htnCompound
|
||||
id: PickupGunCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyGuns
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandFreePrecondition
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: InteractRange
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: Target
|
||||
|
||||
# TODO: Need a thing to recharge a laser gun
|
||||
# TODO: When selecting pickup guns also add chargers or easy container grabs.
|
||||
|
||||
# Shorted version of RangedCombatCompound for entities that are guns themselves.
|
||||
- type: htnCompound
|
||||
id: InnateRangedCombatCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:GunAmmoPrecondition
|
||||
minPercent: 0.001
|
||||
- !type:GunCanFirePrecondition # Goobstation
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: GunCombatCompound
|
||||
|
||||
|
||||
- type: htnCompound
|
||||
id: RangedCombatCompound
|
||||
branches:
|
||||
# Goobstation - drop a gun if it can't be wielded and wielding is required
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- type: GunRequiresWield
|
||||
- !type:UnwieldedEntityInHandsPrecondition
|
||||
- !type:CanWieldPrecondition
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandEntityPrecondition
|
||||
operator: !type:DropOperator
|
||||
|
||||
# Goobstation - wield an item if it's wieldable
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- type: Wieldable
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:UnwieldedEntityInHandsPrecondition
|
||||
operator: !type:WieldOperator
|
||||
|
||||
# Goobstation start - Cycle/Rack/Empty a gun if it can't shoot
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- type: BallisticAmmoProvider
|
||||
- !type:GunCanFirePrecondition
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandEntityPrecondition
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: ActiveHandEntity
|
||||
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- type: MagazineAmmoProvider
|
||||
- !type:GunCanFirePrecondition
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandEntityPrecondition
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: ActiveHandEntity
|
||||
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- type: ChamberMagazineAmmoProvider
|
||||
- !type:GunCanFirePrecondition
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandEntityPrecondition
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: ActiveHandEntity
|
||||
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- type: RevolverAmmoProvider
|
||||
- !type:GunCanFirePrecondition
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandEntityPrecondition
|
||||
operator: !type:AltInteractOperator
|
||||
targetKey: ActiveHandEntity
|
||||
# Goobstation end
|
||||
|
||||
# Move to target and shoot them if ammo
|
||||
- preconditions:
|
||||
- !type:GunAmmoPrecondition
|
||||
minPercent: 0.001
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: GunCombatCompound
|
||||
|
||||
# Reload gun
|
||||
# TODO
|
||||
|
||||
# Equip a gun from inventory if one found, preferring over pickup.
|
||||
# TODO: Doing inventory cleanly will be a PITA so deferring to later
|
||||
# The issue is recursively checking items but also ignoring some recursive entities
|
||||
# i.e. we need to recursively go into storage containers.
|
||||
#- tasks:
|
||||
# - !type:HTNCompoundTask
|
||||
# task: ClearActiveHandCompound
|
||||
#
|
||||
# - !type:HTNPrimitiveTask
|
||||
# operator: !type:UtilityOperator
|
||||
# proto: InventoryGuns
|
||||
#
|
||||
# - !type:HTNPrimitiveTask
|
||||
# operator: !type:EquipOperator
|
||||
|
||||
# Pickup ammo if any nearby
|
||||
#- preconditions:
|
||||
# - !type:GunAmmoPrecondition
|
||||
# maxPercent: 0.0
|
||||
# tasks:
|
||||
# - !type:HTNCompoundTask
|
||||
# task: ClearActiveHandCompound
|
||||
#
|
||||
# - !type:HTNCompoundTask
|
||||
# task: PickupAmmoCompound
|
||||
|
||||
# Pickup gun with ammo if we have no ammo
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: PickupGunCompound
|
||||
|
||||
# Discard gun if no ammo
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Gun
|
||||
- !type:GunAmmoPrecondition
|
||||
maxPercent: 0.001
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandEntityPrecondition
|
||||
operator: !type:DropOperator
|
||||
|
||||
# TODO: Reload a nearby gun
|
||||
206
Prototypes/NPCs/Combat/melee.yml
Normal file
206
Prototypes/NPCs/Combat/melee.yml
Normal file
@@ -0,0 +1,206 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 Tayrtahn <tayrtahn@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2024 Vigers Ray <60344369+VigersRay@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 metalgearsloth <comedian_vs_clown@hotmail.com>
|
||||
# SPDX-FileCopyrightText: 2024 osjarw <62134478+osjarw@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
|
||||
# SPDX-FileCopyrightText: 2025 Ilya246 <ilyukarno@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2025 SX-7 <sn1.test.preria.2002@gmail.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# -- Melee --
|
||||
# Selects a target in melee and tries to attack it.
|
||||
- type: htnCompound
|
||||
id: MeleeCombatCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyMeleeTargets
|
||||
- !type:HTNCompoundTask
|
||||
task: BeforeMeleeAttackTargetCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: BeforeMeleeAttackTargetCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:BuckledPrecondition
|
||||
isBuckled: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UnbuckleOperator
|
||||
shutdownState: TaskFinished
|
||||
|
||||
- preconditions:
|
||||
- !type:PulledPrecondition
|
||||
isPulled: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UnPullOperator
|
||||
shutdownState: TaskFinished
|
||||
|
||||
- preconditions:
|
||||
- !type:InContainerPrecondition
|
||||
isInContainer: true
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: EscapeCompound
|
||||
|
||||
# Pickup weapon if we don't have one.
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
# Just serializer things
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: PickupMeleeCompound
|
||||
|
||||
# Goobstation - wield an item if it's wieldable
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: Wieldable
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:UnwieldedEntityInHandsPrecondition
|
||||
operator: !type:WieldOperator
|
||||
|
||||
# Melee combat (unarmed or otherwise)
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeAttackTargetCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: RatServantCombatCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:ActiveHandComponentPrecondition
|
||||
components:
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
invert: true
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: PickupMeleeCompound
|
||||
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: OrderedTargets
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeAttackOrderedTargetCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: PickupMeleeCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyMeleeWeapons
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ActiveHandFreePrecondition
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: InteractRange
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: Target
|
||||
|
||||
# Tries to melee attack our target.
|
||||
- type: htnCompound
|
||||
id: MeleeAttackTargetCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
shutdownState: PlanFinished
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
brakeMaxVelocity: null # Goobstation - no braking
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: MeleeRange
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:JukeOperator
|
||||
jukeType: Away
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MeleeOperator
|
||||
targetKey: Target
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: MeleeRange
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: MeleeService
|
||||
proto: NearbyMeleeTargets
|
||||
key: Target
|
||||
|
||||
- type: htnCompound
|
||||
id: EscapeCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:ContainerOperator
|
||||
targetKey: Target
|
||||
shutdownState: TaskFinished
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:EscapeOperator
|
||||
targetKey: Target
|
||||
preconditions:
|
||||
- !type:InContainerPrecondition
|
||||
isInContainer: true
|
||||
|
||||
- type: htnCompound
|
||||
id: MeleeAttackOrderedTargetCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
shutdownState: PlanFinished
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
brakeMaxVelocity: null # Goobstation - no braking
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: MeleeRange
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:JukeOperator
|
||||
jukeType: Away
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MeleeOperator
|
||||
targetKey: Target
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: MeleeRange
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: MeleeService
|
||||
proto: OrderedTargets
|
||||
key: Target
|
||||
22
Prototypes/NPCs/basilisk.yml
Normal file
22
Prototypes/NPCs/basilisk.yml
Normal file
@@ -0,0 +1,22 @@
|
||||
- type: htnCompound
|
||||
id: BasiliskCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: BasiliskMeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: InnateRangedCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: BasiliskMeleeCombatCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyColdMeleeTargets
|
||||
- !type:HTNCompoundTask
|
||||
task: BeforeMeleeAttackTargetCompound
|
||||
44
Prototypes/NPCs/cleanbot.yml
Normal file
44
Prototypes/NPCs/cleanbot.yml
Normal file
@@ -0,0 +1,44 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: CleanbotCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: BufferNearbyPuddlesCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
# Picks a random puddle in range to move to and idle
|
||||
- type: htnCompound
|
||||
id: BufferNearbyPuddlesCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyPuddles
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: MeleeRange
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: InteractRange
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: Target
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: PuddleService
|
||||
proto: NearbyPuddles
|
||||
key: Target
|
||||
9
Prototypes/NPCs/clothing.yml
Normal file
9
Prototypes/NPCs/clothing.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
# Generic pickups to not be naked.
|
||||
# TODO: Armor / Pressure pickups.
|
||||
# TODO: Preferred slots
|
||||
#- type: htnCompound
|
||||
# id:
|
||||
95
Prototypes/NPCs/debug.yml
Normal file
95
Prototypes/NPCs/debug.yml
Normal file
@@ -0,0 +1,95 @@
|
||||
# SPDX-FileCopyrightText: 2024 Tornado Tech <54727692+Tornado-Technology@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
- type: htnCompound
|
||||
id: DebugCounterCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:AddFloatOperator
|
||||
targetKey: Count
|
||||
amount: 1
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SayKeyOperator
|
||||
key: Count
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RandomOperator
|
||||
targetKey: IdleTime
|
||||
minKey: MinimumIdleTime
|
||||
maxKey: MaximumIdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
- type: htnCompound
|
||||
id: DebugRandomCounterCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SetRandomFloatOperator
|
||||
targetKey: Count
|
||||
minAmount: 0
|
||||
maxAmount: 100
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SayKeyOperator
|
||||
key: Count
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RandomOperator
|
||||
targetKey: IdleTime
|
||||
minKey: MinimumIdleTime
|
||||
maxKey: MaximumIdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
- type: htnCompound
|
||||
id: DebugRandomLessCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SetRandomFloatOperator
|
||||
targetKey: Count
|
||||
minAmount: 0
|
||||
maxAmount: 100
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SayKeyOperator
|
||||
key: Count
|
||||
preconditions:
|
||||
- !type:KeyFloatLessPrecondition
|
||||
key: Count
|
||||
value: 50
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RandomOperator
|
||||
targetKey: IdleTime
|
||||
minKey: MinimumIdleTime
|
||||
maxKey: MaximumIdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SpeakOperator
|
||||
speech: "fuck!"
|
||||
|
||||
|
||||
62
Prototypes/NPCs/firebot.yml
Normal file
62
Prototypes/NPCs/firebot.yml
Normal file
@@ -0,0 +1,62 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 Golinth <amh2023@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
- type: htnCompound
|
||||
id: FirebotCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: DouseFireTargetCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: DouseFireTargetCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyOnFire
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SpeakOperator
|
||||
speech: firebot-fire-detected
|
||||
hidden: true
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: InteractRange
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SetFloatOperator
|
||||
targetKey: WaitTime
|
||||
amount: 1
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: WaitTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: WaitTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: InteractRange
|
||||
operator: !type:InteractWithOperator
|
||||
targetKey: Target
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: FireService
|
||||
proto: NearbyOnFire
|
||||
key: Target
|
||||
64
Prototypes/NPCs/follow.yml
Normal file
64
Prototypes/NPCs/follow.yml
Normal file
@@ -0,0 +1,64 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
# There are limitations to this ATM. The pathfinder is too slow to check accessibility well
|
||||
# and reachable only takes in an entity so sometimes the follow idle spot is outside of the follow range
|
||||
|
||||
# Follows the specified target.
|
||||
- type: htnCompound
|
||||
id: FollowCompound
|
||||
branches:
|
||||
# Head to follow target
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:CoordinatesNotInRangePrecondition
|
||||
targetKey: FollowTarget
|
||||
rangeKey: FollowRange
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: true
|
||||
targetKey: FollowTarget
|
||||
rangeKey: FollowCloseRange
|
||||
removeKeyOnFinish: false
|
||||
|
||||
# Keep idling near follow target
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
- !type:CoordinatesInRangePrecondition
|
||||
targetKey: FollowTarget
|
||||
rangeKey: FollowRange
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
|
||||
# Pick a new idle spot near the follow target
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:PickAccessibleOperator
|
||||
# originKey: FollowTarget
|
||||
rangeKey: FollowCloseRange
|
||||
targetCoordinates: FollowIdleTarget
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
targetKey: FollowIdleTarget
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RandomOperator
|
||||
targetKey: IdleTime
|
||||
minKey: MinimumIdleTime
|
||||
maxKey: MaximumIdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
- !type:CoordinatesInRangePrecondition
|
||||
targetKey: FollowTarget
|
||||
rangeKey: FollowRange
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
30
Prototypes/NPCs/generic.yml
Normal file
30
Prototypes/NPCs/generic.yml
Normal file
@@ -0,0 +1,30 @@
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: ClearActiveHandCompound
|
||||
branches:
|
||||
# Do nothing
|
||||
- preconditions:
|
||||
- !type:ActiveHandFreePrecondition
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:NoOperator
|
||||
|
||||
# Swap to another free hand
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SwapToFreeHandOperator
|
||||
|
||||
# TODO: Need to make sure this works with blackboard and handles storage + pockets + inventory slots
|
||||
# Put active hand into storage
|
||||
#- tasks:
|
||||
# - !type:HTNPrimitiveTask
|
||||
# operator: !type:StashActiveHandOperator
|
||||
|
||||
# Drop active hand
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:DropOperator
|
||||
80
Prototypes/NPCs/goliath.yml
Normal file
80
Prototypes/NPCs/goliath.yml
Normal file
@@ -0,0 +1,80 @@
|
||||
# SPDX-FileCopyrightText: 2024 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
- type: htnCompound
|
||||
id: GoliathCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: GoliathMeleeCombatPrecondition
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: GoliathMeleeCombatPrecondition
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:BuckledPrecondition
|
||||
isBuckled: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UnbuckleOperator
|
||||
shutdownState: TaskFinished
|
||||
|
||||
- preconditions:
|
||||
- !type:InContainerPrecondition
|
||||
isInContainer: true
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: EscapeCompound
|
||||
|
||||
- preconditions:
|
||||
- !type:PulledPrecondition
|
||||
isPulled: true
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UnPullOperator
|
||||
shutdownState: TaskFinished
|
||||
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyMeleeTargets
|
||||
- !type:HTNCompoundTask
|
||||
task: GoliathAttackTargetCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: GoliathAttackTargetCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
shutdownState: PlanFinished
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: MeleeRange
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:JukeOperator
|
||||
jukeType: AdjacentTile
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MeleeOperator
|
||||
targetKey: Target
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
rangeKey: MeleeRange
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: MeleeService
|
||||
proto: NearbyMeleeTargets
|
||||
key: Target
|
||||
14
Prototypes/NPCs/honkbot.yml
Normal file
14
Prototypes/NPCs/honkbot.yml
Normal file
@@ -0,0 +1,14 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 Tayrtahn <tayrtahn@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2024 superjj18 <gagnonjake@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: HonkbotCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
82
Prototypes/NPCs/idle.yml
Normal file
82
Prototypes/NPCs/idle.yml
Normal file
@@ -0,0 +1,82 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 PopGamer46 <yt1popgamer@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
|
||||
# SPDX-FileCopyrightText: 2025 Ilya246 <ilyukarno@gmail.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# Picks a random location for the NPC to move to and idle.
|
||||
- type: htnCompound
|
||||
id: IdleCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
# Pick a new spot and wait there.
|
||||
- preconditions:
|
||||
- !type:BuckledPrecondition
|
||||
isBuckled: false
|
||||
- !type:PulledPrecondition
|
||||
isPulled: false
|
||||
tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:PickAccessibleOperator
|
||||
rangeKey: IdleRange
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: false
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RandomOperator
|
||||
targetKey: IdleTime
|
||||
minKey: MinimumIdleTime
|
||||
maxKey: MaximumIdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
# Spin to a random rotation and idle.
|
||||
- type: htnCompound
|
||||
id: IdleSpinCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
# Pick a new angle and spin there
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:PickRandomRotationOperator
|
||||
targetKey: RotateTarget
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RotateToTargetOperator
|
||||
targetKey: RotateTarget
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:RandomOperator
|
||||
targetKey: IdleTime
|
||||
minKey: MinimumIdleTime
|
||||
maxKey: MaximumIdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
55
Prototypes/NPCs/medibot.yml
Normal file
55
Prototypes/NPCs/medibot.yml
Normal file
@@ -0,0 +1,55 @@
|
||||
# SPDX-FileCopyrightText: 2022 Leon Friedrich <60421075+ElectroJr@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 Arendian <137322659+Arendian@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 deltanedas <39013340+deltanedas@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 deltanedas <@deltanedas:kde.org>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: MedibotCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: InjectNearbyCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: InjectNearbyCompound
|
||||
branches:
|
||||
- tasks:
|
||||
# TODO: Kill this shit
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:PickNearbyInjectableOperator
|
||||
targetKey: InjectTarget
|
||||
targetMoveKey: TargetCoordinates
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SpeakOperator
|
||||
speech: medibot-start-inject
|
||||
hidden: true
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: false
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SetFloatOperator
|
||||
targetKey: IdleTime
|
||||
amount: 3
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
# TODO: Kill this
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MedibotInjectOperator
|
||||
targetKey: InjectTarget
|
||||
126
Prototypes/NPCs/mob.yml
Normal file
126
Prototypes/NPCs/mob.yml
Normal file
@@ -0,0 +1,126 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 Kara <lunarautomaton6@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 lzk <124214523+lzk228@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 potato1234_x <79580518+potato1234x@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 Ed <96445749+TheShuEd@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 PopGamer46 <yt1popgamer@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2024 faint <46868845+ficcialfaint@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 metalgearsloth <comedian_vs_clown@hotmail.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Ilya246 <57039557+Ilya246@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# Really you should write your own
|
||||
- type: htnCompound
|
||||
id: SimpleHostileCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: RatServantTargetAttackCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: RatServantCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FollowCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: MouseCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FoodCompound
|
||||
# Goobstation - for retaliation; yes, they care about food more
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: MoproachCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FoodCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: BufferNearbyPuddlesCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: GlockroachCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: InnateRangedCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FoodCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: RuminantCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FoodCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: RuminantHostileCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FoodCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: DragonCarpCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FollowCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: KillerTomatoCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FollowCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
70
Prototypes/NPCs/nutrition.yml
Normal file
70
Prototypes/NPCs/nutrition.yml
Normal file
@@ -0,0 +1,70 @@
|
||||
# SPDX-FileCopyrightText: 2023 deltanedas <39013340+deltanedas@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 deltanedas <@deltanedas:kde.org>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 778b <33431126+778b@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: FoodCompound
|
||||
branches:
|
||||
# Picks a nearby food, moves into range, then eats it and waits the idle time.
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:HungryPrecondition
|
||||
minHungerState: Starving # See HungerThreshold enum
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyFood
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: MeleeRange
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
operator: !type:AltInteractOperator
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
|
||||
# Picks nearby drink then consumes it and waits idle time
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:ThirstyPrecondition
|
||||
minThirstState: Parched # See ThirstThreshold enum
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyDrink
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: true
|
||||
removeKeyOnFinish: false
|
||||
targetKey: TargetCoordinates
|
||||
pathfindKey: TargetPathfind
|
||||
rangeKey: MeleeRange
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
operator: !type:AltInteractOperator
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
32
Prototypes/NPCs/regalrat.yml
Normal file
32
Prototypes/NPCs/regalrat.yml
Normal file
@@ -0,0 +1,32 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: RatServantCompound
|
||||
branches:
|
||||
- preconditions:
|
||||
- !type:HasOrdersPrecondition
|
||||
orders: enum.RatKingOrderType.Stay
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
- preconditions:
|
||||
- !type:HasOrdersPrecondition
|
||||
orders: enum.RatKingOrderType.Follow
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: FollowCompound
|
||||
- preconditions:
|
||||
- !type:HasOrdersPrecondition
|
||||
orders: enum.RatKingOrderType.CheeseEm
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: RatServantTargetAttackCompound
|
||||
- preconditions:
|
||||
- !type:HasOrdersPrecondition
|
||||
orders: enum.RatKingOrderType.Loose
|
||||
tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: SimpleHostileCompound
|
||||
98
Prototypes/NPCs/root.yml
Normal file
98
Prototypes/NPCs/root.yml
Normal file
@@ -0,0 +1,98 @@
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
# Specific Root compound tasks being used for NPCs.
|
||||
|
||||
# Tries to shoot a target in LOS in range.
|
||||
- type: htnCompound
|
||||
id: TurretCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyGunTargets
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
# TODO: Non-scuffed
|
||||
rangeKey: RangedRange
|
||||
- !type:TargetInLOSPrecondition
|
||||
targetKey: Target
|
||||
rangeKey: RangedRange
|
||||
operator: !type:GunOperator
|
||||
targetKey: Target
|
||||
requireLOS: true
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: RangedService
|
||||
proto: NearbyGunTargets
|
||||
key: Target
|
||||
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleSpinCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: EnergyTurretCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:UtilityOperator
|
||||
proto: NearbyGunTargets
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: Target
|
||||
- !type:TargetInRangePrecondition
|
||||
targetKey: Target
|
||||
# TODO: Non-scuffed
|
||||
rangeKey: RangedRange
|
||||
- !type:TargetInLOSPrecondition
|
||||
targetKey: Target
|
||||
rangeKey: RangedRange
|
||||
opaqueKey: true
|
||||
operator: !type:GunOperator
|
||||
targetKey: Target
|
||||
opaqueKey: true
|
||||
services:
|
||||
- !type:UtilityService
|
||||
id: RangedService
|
||||
proto: NearbyGunTargets
|
||||
key: Target
|
||||
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleSpinCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: SimpleRangedHostileCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: InnateRangedCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: SimpleHumanoidHostileCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: RangedCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
28
Prototypes/NPCs/test.yml
Normal file
28
Prototypes/NPCs/test.yml
Normal file
@@ -0,0 +1,28 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 degradka <69397649+degradka@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
# Selects a random pathfind point and tries to move there.
|
||||
- type: htnCompound
|
||||
id: MoveToPathfindPointCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:PickPathfindPointOperator
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: false
|
||||
|
||||
|
||||
- type: entity
|
||||
id: MobPathfindDummy
|
||||
name: pathfind dummy
|
||||
suffix: NPC
|
||||
parent: MobSpiderAngryBase
|
||||
components:
|
||||
- type: HTN
|
||||
rootTask:
|
||||
task: MoveToPathfindPointCompound
|
||||
283
Prototypes/NPCs/utility_queries.yml
Normal file
283
Prototypes/NPCs/utility_queries.yml
Normal file
@@ -0,0 +1,283 @@
|
||||
# SPDX-FileCopyrightText: 2023 Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 deltanedas <39013340+deltanedas@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2023 deltanedas <@deltanedas:kde.org>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2024 Golinth <amh2023@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2024 Tayrtahn <tayrtahn@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2024 osjarw <62134478+osjarw@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aviu00 <93730715+Aviu00@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 GoobBot <uristmchands@proton.me>
|
||||
# SPDX-FileCopyrightText: 2025 Ilya246 <ilyukarno@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2025 chromiumboy <50505512+chromiumboy@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
- type: utilityQuery
|
||||
id: InventoryGuns
|
||||
query:
|
||||
- !type:InventoryQuery
|
||||
- !type:ComponentFilter
|
||||
components:
|
||||
- type: Gun
|
||||
considerations:
|
||||
- !type:TargetAmmoCon
|
||||
curve: !type:QuadraticCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyAmmo
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
- type: Ammo
|
||||
- type: Item
|
||||
considerations:
|
||||
- !type:TargetAmmoMatchesCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
# TODO: Get ammo count.
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyFood
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
- type: Food
|
||||
considerations:
|
||||
- !type:TargetIsAliveCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:FoodValueCon
|
||||
curve: !type:QuadraticCurve
|
||||
slope: 1.0
|
||||
exponent: 0.4
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyDrink
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
- type: Drink
|
||||
considerations:
|
||||
- !type:TargetIsAliveCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:DrinkValueCon
|
||||
curve: !type:QuadraticCurve
|
||||
slope: 1.0
|
||||
exponent: 0.4
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyGuns
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
- type: Gun
|
||||
- type: Item
|
||||
considerations:
|
||||
# TODO: Prefer highest DPC probably?
|
||||
- !type:TargetAmmoCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetRequiresWieldAndCanWieldCon # Goobstation
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyMeleeTargets
|
||||
query:
|
||||
- !type:NearbyHostilesQuery
|
||||
considerations:
|
||||
# Goobstation - check is dead instead so we can target non-living stuff
|
||||
- !type:TargetIsDeadCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetHealthCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetHealth
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetInLOSOrCurrentCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyColdMeleeTargets
|
||||
query:
|
||||
- !type:NearbyHostilesQuery
|
||||
considerations:
|
||||
- !type:TargetLowTempCon
|
||||
curve: !type:BoolCurve
|
||||
minTemp: 250
|
||||
- !type:TargetIsAliveCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetHealthCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetHealth
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetInLOSOrCurrentCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: OrderedTargets
|
||||
query:
|
||||
- !type:NearbyHostilesQuery
|
||||
considerations:
|
||||
# Goobstation - check is dead instead so we can target non-living stuff
|
||||
- !type:TargetIsDeadCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetHealthCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetHealth
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetInLOSOrCurrentCon
|
||||
curve: !type:BoolCurve
|
||||
# they gotta be what we ordered
|
||||
- !type:OrderedTargetCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyMeleeWeapons
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
# Just serializer things
|
||||
- type: MeleeWeapon
|
||||
damage:
|
||||
types:
|
||||
Blunt: 0
|
||||
- type: Item
|
||||
- !type:ComponentFilter
|
||||
components:
|
||||
- type: Gun
|
||||
invert: true
|
||||
- !type:RemoveAnchoredFilter
|
||||
considerations:
|
||||
- !type:TargetMeleeCon
|
||||
curve: !type:QuadraticCurve
|
||||
slope: 0.5
|
||||
exponent: 0.5
|
||||
yOffset: 0
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyOnFire
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
- type: Flammable
|
||||
# why does Flammable even have a required damage
|
||||
damage:
|
||||
types:
|
||||
burn: 0
|
||||
considerations:
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetInLOSOrCurrentCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetOnFireCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyPuddles
|
||||
query:
|
||||
- !type:ComponentQuery
|
||||
components:
|
||||
- type: Puddle
|
||||
- !type:PuddleFilter
|
||||
considerations:
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetInLOSOrCurrentCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
- type: utilityQuery
|
||||
id: NearbyGunTargets
|
||||
query:
|
||||
- !type:NearbyHostilesQuery
|
||||
considerations:
|
||||
# Goobstation - check is dead instead so we can target non-living stuff
|
||||
- !type:TargetIsDeadCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TargetIsCritCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TargetIsStunnedCon
|
||||
curve: !type:InverseBoolCurve
|
||||
- !type:TurretTargetingCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetDistanceCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetDistance
|
||||
- !type:TargetHealthCon
|
||||
curve: !type:PresetCurve
|
||||
preset: TargetHealth
|
||||
- !type:TargetAccessibleCon
|
||||
curve: !type:BoolCurve
|
||||
- !type:TargetInLOSOrCurrentCon
|
||||
curve: !type:BoolCurve
|
||||
|
||||
#- type: utilityQuery
|
||||
# id: NearbyShoes
|
||||
# query:
|
||||
# - !type:ComponentQuery
|
||||
# components:
|
||||
# - type: Clothing
|
||||
# - !type:ClothingSlotFilter
|
||||
# slotFlags: Feet
|
||||
# considerations:
|
||||
# - !type:TargetDistanceCon
|
||||
# curve: !type:PresetCurve
|
||||
# preset: TargetDistance
|
||||
# - !type:TargetAccessibleCon
|
||||
# curve: !type:BoolCurve
|
||||
|
||||
|
||||
# Presets
|
||||
- type: utilityCurvePreset
|
||||
id: TargetDistance
|
||||
curve: !type:QuadraticCurve
|
||||
slope: -1
|
||||
exponent: 1
|
||||
yOffset: 1
|
||||
xOffset: 0
|
||||
|
||||
- type: utilityCurvePreset
|
||||
id: TargetHealth
|
||||
curve: !type:QuadraticCurve
|
||||
slope: 1.0
|
||||
exponent: 0.4
|
||||
xOffset: -0.02
|
||||
43
Prototypes/NPCs/weldbot.yml
Normal file
43
Prototypes/NPCs/weldbot.yml
Normal file
@@ -0,0 +1,43 @@
|
||||
- type: htnCompound
|
||||
id: WeldbotCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: WeldNearbyCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
|
||||
- type: htnCompound
|
||||
id: WeldNearbyCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:PickNearbyWeldableOperator
|
||||
targetKey: WeldTarget
|
||||
targetMoveKey: TargetCoordinates
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SpeakOperator
|
||||
speech: weldbot-start-weld
|
||||
hidden: true
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:MoveToOperator
|
||||
pathfindInPlanning: false
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:SetFloatOperator
|
||||
targetKey: IdleTime
|
||||
amount: 3
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WaitOperator
|
||||
key: IdleTime
|
||||
preconditions:
|
||||
- !type:KeyExistsPrecondition
|
||||
key: IdleTime
|
||||
|
||||
- !type:HTNPrimitiveTask
|
||||
operator: !type:WeldbotWeldOperator
|
||||
targetKey: WeldTarget
|
||||
15
Prototypes/NPCs/xeno.yml
Normal file
15
Prototypes/NPCs/xeno.yml
Normal file
@@ -0,0 +1,15 @@
|
||||
# SPDX-FileCopyrightText: 2022 metalgearsloth <metalgearsloth@gmail.com>
|
||||
# SPDX-FileCopyrightText: 2023 metalgearsloth <31366439+metalgearsloth@users.noreply.github.com>
|
||||
# SPDX-FileCopyrightText: 2025 Aiden <28298836+Aidenkrz@users.noreply.github.com>
|
||||
#
|
||||
# SPDX-License-Identifier: MIT
|
||||
|
||||
- type: htnCompound
|
||||
id: XenoCompound
|
||||
branches:
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: MeleeCombatCompound
|
||||
- tasks:
|
||||
- !type:HTNCompoundTask
|
||||
task: IdleCompound
|
||||
Reference in New Issue
Block a user