Grunkbeast AI tweaks

This commit is contained in:
Rob Kelly 2025-09-05 12:49:14 -06:00
parent 56d48949ab
commit 897f69fcd0
10 changed files with 202 additions and 118 deletions

View File

@ -384,7 +384,6 @@ environment = ExtResource("24_ibsng")
[node name="Player" parent="." instance=ExtResource("26_hposp")] [node name="Player" parent="." instance=ExtResource("26_hposp")]
transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, -6, 1.2, 9.3) transform = Transform3D(0.866025, 0, -0.5, 0, 1, 0, 0.5, 0, 0.866025, -6, 1.2, 9.3)
godmode = true
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."] [node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
navigation_mesh = SubResource("NavigationMesh_n2727") navigation_mesh = SubResource("NavigationMesh_n2727")
@ -2182,6 +2181,9 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.3, 0, -2.7)
visibility_aabb = AABB(-9, -3, -4.5, 18, 6, 9) visibility_aabb = AABB(-9, -3, -4.5, 18, 6, 9)
process_material = SubResource("ParticleProcessMaterial_42r5i") process_material = SubResource("ParticleProcessMaterial_42r5i")
[node name="LurkPoint11" type="Marker3D" parent="NavigationRegion3D/Level/CommonArea" groups=["LurkPoint"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.6, -3, -3.3)
[node name="Room1" type="Node3D" parent="NavigationRegion3D/Level"] [node name="Room1" type="Node3D" parent="NavigationRegion3D/Level"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2, 0, 9.3) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.2, 0, 9.3)
@ -2614,6 +2616,9 @@ process_material = SubResource("ParticleProcessMaterial_e530b")
[node name="OverheadLight" parent="NavigationRegion3D/Level/Room2" instance=ExtResource("6_n2727")] [node name="OverheadLight" parent="NavigationRegion3D/Level/Room2" instance=ExtResource("6_n2727")]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -3, 3, 0) transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -3, 3, 0)
[node name="LurkPoint10" type="Marker3D" parent="NavigationRegion3D/Level/Room2" groups=["LurkPoint"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.8, 0, -1.8)
[node name="Room3" type="Node3D" parent="NavigationRegion3D/Level"] [node name="Room3" type="Node3D" parent="NavigationRegion3D/Level"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.2, -3, 9.3) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.2, -3, 9.3)
@ -2836,6 +2841,9 @@ transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 2.9
transform = Transform3D(0.258819, 0, 0.965926, 0, 1, 0, -0.965926, 0, 0.258819, 11.4, 0.3, 3.90001) transform = Transform3D(0.258819, 0, 0.965926, 0, 1, 0, -0.965926, 0, 0.258819, 11.4, 0.3, 3.90001)
sleeping = true sleeping = true
[node name="LurkPoint1" type="Marker3D" parent="NavigationRegion3D/Level/Room3" groups=["LurkPoint"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.8, 0, 0)
[node name="Room4" type="Node3D" parent="NavigationRegion3D/Level"] [node name="Room4" type="Node3D" parent="NavigationRegion3D/Level"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.8, -3, 9.3) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.8, -3, 9.3)

View File

@ -108,7 +108,7 @@ gameplay/beast/anger_max=150.0
gameplay/beast/anger_decay_rate=1.0 gameplay/beast/anger_decay_rate=1.0
gameplay/beast/anger_noise=10.0 gameplay/beast/anger_noise=10.0
gameplay/beast/anger_noise_near=30.0 gameplay/beast/anger_noise_near=30.0
gameplay/beast/provocation_range=4.8 gameplay/beast/provocation_range=5.5
gameplay/beast/anger_alarm=60.0 gameplay/beast/anger_alarm=60.0
gameplay/beast/anger_alarm_extra=60.0 gameplay/beast/anger_alarm_extra=60.0
gameplay/beast/anger_touch=35.0 gameplay/beast/anger_touch=35.0

View File

@ -1,12 +1,15 @@
@tool @tool
class_name GetRandomTarget extends ActionLeaf class_name GetRandomTarget extends ActionLeaf
## Picks a random navigable point near the actor and writes it to the blackboard. ## Picks a random navigable point near a center target and writes it to the blackboard.
## ##
## If the random point is not navigable, will return RUNNING and pick a new point next tick. ## If the random point is not navigable, will return RUNNING and pick a new point next tick.
## Blackboard key under which to store the random target. ## Blackboard key under which to store the random target.
@export var blackboard_key := "target" @export var blackboard_key := "target"
## Optional blackboard key of the center target. By default, the actor's position will be used.
@export var center_target_key: String
## Standard deviation of position in each direction, in game units. ## Standard deviation of position in each direction, in game units.
@export var st_dev := Vector3(1, 0, 1) @export var st_dev := Vector3(1, 0, 1)
@ -15,12 +18,11 @@ class_name GetRandomTarget extends ActionLeaf
func tick(actor: Node, blackboard: Blackboard) -> int: func tick(actor: Node, blackboard: Blackboard) -> int:
var center: Vector3 = blackboard.get_value(center_target_key, (actor as Node3D).global_position)
var beast := actor as GrunkBeast var beast := actor as GrunkBeast
var target := Vector3( var target := Vector3(
randfn(beast.global_position.x, st_dev.x), randfn(center.x, st_dev.x), randfn(center.y, st_dev.y), randfn(center.z, st_dev.z)
randfn(beast.global_position.y, st_dev.y),
randfn(beast.global_position.z, st_dev.z)
) )
if not beast.path_shorter_than(target, max_path_len): if not beast.path_shorter_than(target, max_path_len):

View File

@ -1,3 +1,4 @@
@tool
class_name PrintDebugAction extends ActionLeaf class_name PrintDebugAction extends ActionLeaf
## Print this node's name every tick. ## Print this node's name every tick.

View File

@ -23,6 +23,8 @@ func _excluded_rids() -> Array[RID]:
func tick(_actor: Node, blackboard: Blackboard) -> int: func tick(_actor: Node, blackboard: Blackboard) -> int:
var target: Node3D = blackboard.get_value(blackboard_key) var target: Node3D = blackboard.get_value(blackboard_key)
if not target:
return FAILURE
var collisions := sight_origin.get_world_3d().direct_space_state.intersect_ray( var collisions := sight_origin.get_world_3d().direct_space_state.intersect_ray(
PhysicsRayQueryParameters3D.create( PhysicsRayQueryParameters3D.create(
sight_origin.global_position, target.global_position, collision_mask, _excluded_rids() sight_origin.global_position, target.global_position, collision_mask, _excluded_rids()

View File

@ -39,6 +39,7 @@ var traversing_link := false
@onready var nav_probe: NavigationAgent3D = %NavProbe @onready var nav_probe: NavigationAgent3D = %NavProbe
@onready var sound_detection_cooldown: Timer = %SoundDetectionCooldown @onready var sound_detection_cooldown: Timer = %SoundDetectionCooldown
@onready var touch_cooldown: Timer = %TouchCooldown
@onready var blackboard: Blackboard = %Blackboard @onready var blackboard: Blackboard = %Blackboard
@onready var behavior: BeehaveTree = %GrunkBeastBehavior @onready var behavior: BeehaveTree = %GrunkBeastBehavior
@ -97,6 +98,7 @@ func _set_poi(value: Vector3) -> void:
#region Character Controller #region Character Controller
func _ready() -> void: func _ready() -> void:
nav_agent.velocity_computed.connect(_on_velocity_computed)
if World.instance and World.instance.manager: if World.instance and World.instance.manager:
World.instance.manager.alarm_triggered.connect(_on_alarm_triggered) World.instance.manager.alarm_triggered.connect(_on_alarm_triggered)
if play_spawn_animation: if play_spawn_animation:
@ -144,36 +146,47 @@ func path_shorter_than(target: Vector3, limit: float) -> bool:
func _physics_process(_delta: float) -> void: func _physics_process(_delta: float) -> void:
# Update debug info
if debug_canvas_layer.visible:
beast_behavior_label.text = str(blackboard.get_value("current_mode"))
beast_anger_meter.value = anger_level
# Don't use nav agent before map has synchronized
if NavigationServer3D.map_get_iteration_id(nav_agent.get_navigation_map()) == 0:
return
var motion := Vector3.ZERO var motion := Vector3.ZERO
if pathfinding and not nav_agent.is_navigation_finished(): if pathfinding and not nav_agent.is_navigation_finished():
var path_pos := nav_agent.get_next_path_position() motion = global_position.direction_to(nav_agent.get_next_path_position()) * get_speed()
var relative_pos := path_pos - global_position
motion = relative_pos.normalized() * get_speed()
velocity.x = motion.x motion.y = velocity.y
velocity.z = motion.z
if not is_on_floor(): if not is_on_floor():
velocity += gravity motion += gravity
if motion: if motion:
model.set_target_rotation(atan2(motion.x, motion.z)) model.set_target_rotation(atan2(motion.x, motion.z))
model.set_move_speed(velocity.length()) if nav_agent.avoidance_enabled:
move_and_slide() nav_agent.set_velocity(motion)
else:
_on_velocity_computed(motion)
# Update debug info
if debug_canvas_layer.visible: func _on_velocity_computed(safe_velocity: Vector3) -> void:
beast_behavior_label.text = str(behavior.get_running_action()) model.set_move_speed(safe_velocity.length())
beast_anger_meter.value = anger_level velocity = safe_velocity
move_and_slide()
func on_sound_detected(source: Vector3) -> void: func on_sound_detected(source: Vector3) -> void:
point_of_interest = source point_of_interest = source
if sound_detection_cooldown.is_stopped(): if sound_detection_cooldown.is_stopped():
print_debug("Beast heard something from ", source)
anger_level += GrunkBeast.anger_noise anger_level += GrunkBeast.anger_noise
if source.distance_to(self.global_position) <= GrunkBeast.provocation_range: if source.distance_to(self.global_position) <= GrunkBeast.provocation_range:
print_debug("... And it was close, too!")
anger_level += GrunkBeast.anger_noise_near anger_level += GrunkBeast.anger_noise_near
sound_detection_cooldown.start() sound_detection_cooldown.start()
# TODO animation? # TODO animation?
@ -195,14 +208,16 @@ func _anger_decay() -> void:
func _on_alarm_triggered(source: GunkAlarm) -> void: func _on_alarm_triggered(source: GunkAlarm) -> void:
print_debug("The beast was angered by the alarm!")
point_of_interest = source.global_position point_of_interest = source.global_position
anger_level += GrunkBeast.anger_alarm anger_level += GrunkBeast.anger_alarm
if World.instance.manager.alert_level >= GrunkBeast.anger_extra_alert_level: if World.instance.manager.alert_level >= GrunkBeast.anger_extra_alert_level:
print_debug("The beast got extra-angry!")
anger_level += GrunkBeast.anger_alarm_extra anger_level += GrunkBeast.anger_alarm_extra
func _on_touch(body: Node3D) -> void: func _on_touch(_body: Node3D) -> void:
var player: Player = body as Player if touch_cooldown.is_stopped():
if not player: print_debug("Touched the beast!")
return
anger_level += GrunkBeast.anger_touch anger_level += GrunkBeast.anger_touch
touch_cooldown.start()

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=40 format=3 uid="uid://ehf5sg3ahvbf"] [gd_scene load_steps=41 format=3 uid="uid://ehf5sg3ahvbf"]
[ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="2_csisu"] [ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="2_csisu"]
[ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_lak6w"] [ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_lak6w"]
@ -17,10 +17,11 @@
[ext_resource type="Script" uid="uid://du7uk56300y28" path="res://src/world/grunk_beast/behaviors/conditions/compare_setting.gd" id="12_a1qno"] [ext_resource type="Script" uid="uid://du7uk56300y28" path="res://src/world/grunk_beast/behaviors/conditions/compare_setting.gd" id="12_a1qno"]
[ext_resource type="Script" uid="uid://cg55nu4y0a5ud" path="res://src/world/grunk_beast/behaviors/actions/pick_random_from_group.gd" id="12_ml8dd"] [ext_resource type="Script" uid="uid://cg55nu4y0a5ud" path="res://src/world/grunk_beast/behaviors/actions/pick_random_from_group.gd" id="12_ml8dd"]
[ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="12_xde72"] [ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="12_xde72"]
[ext_resource type="Script" uid="uid://b34l3v4sr8rmq" path="res://src/world/grunk_beast/behaviors/actions/set_target_from_area.gd" id="13_x8l6r"]
[ext_resource type="Script" uid="uid://om57w2acvgb7" path="res://src/world/grunk_beast/behaviors/actions/travel_to_destination.gd" id="14_4y64f"] [ext_resource type="Script" uid="uid://om57w2acvgb7" path="res://src/world/grunk_beast/behaviors/actions/travel_to_destination.gd" id="14_4y64f"]
[ext_resource type="Script" uid="uid://uoy6r3dbnq25" path="res://addons/beehave/nodes/leaves/blackboard_compare.gd" id="14_urnsk"]
[ext_resource type="Script" uid="uid://rdfsxwehjjrd" path="res://src/world/grunk_beast/behaviors/actions/set_player_target.gd" id="15_1cnlk"] [ext_resource type="Script" uid="uid://rdfsxwehjjrd" path="res://src/world/grunk_beast/behaviors/actions/set_player_target.gd" id="15_1cnlk"]
[ext_resource type="Script" uid="uid://dwfdg523bk776" path="res://addons/beehave/nodes/decorators/failer.gd" id="15_oons1"] [ext_resource type="Script" uid="uid://dwfdg523bk776" path="res://addons/beehave/nodes/decorators/failer.gd" id="15_oons1"]
[ext_resource type="Script" uid="uid://cvq483a337v6s" path="res://addons/beehave/nodes/leaves/blackboard_set.gd" id="17_6qixb"]
[ext_resource type="Script" uid="uid://ubcelage67hs" path="res://src/world/grunk_beast/behaviors/actions/get_random_target.gd" id="24_asd50"] [ext_resource type="Script" uid="uid://ubcelage67hs" path="res://src/world/grunk_beast/behaviors/actions/get_random_target.gd" id="24_asd50"]
[ext_resource type="Script" uid="uid://bksvlal4gjhfr" path="res://src/world/grunk_beast/behaviors/actions/sniff.gd" id="26_lak6w"] [ext_resource type="Script" uid="uid://bksvlal4gjhfr" path="res://src/world/grunk_beast/behaviors/actions/sniff.gd" id="26_lak6w"]
[ext_resource type="Script" uid="uid://crkjak4kyv56m" path="res://addons/beehave/nodes/decorators/inverter.gd" id="28_csisu"] [ext_resource type="Script" uid="uid://crkjak4kyv56m" path="res://addons/beehave/nodes/decorators/inverter.gd" id="28_csisu"]
@ -28,23 +29,24 @@
[ext_resource type="Script" uid="uid://ccifed50rmjm2" path="res://src/world/grunk_beast/behaviors/actions/increment_beast_anger.gd" id="31_6qixb"] [ext_resource type="Script" uid="uid://ccifed50rmjm2" path="res://src/world/grunk_beast/behaviors/actions/increment_beast_anger.gd" id="31_6qixb"]
[ext_resource type="Script" uid="uid://rpsd3i11lnur" path="res://src/world/grunk_beast/behaviors/conditions/target_reachable.gd" id="32_6qixb"] [ext_resource type="Script" uid="uid://rpsd3i11lnur" path="res://src/world/grunk_beast/behaviors/conditions/target_reachable.gd" id="32_6qixb"]
[ext_resource type="Script" uid="uid://dlbmi25edn8b7" path="res://src/world/grunk_beast/behaviors/conditions/has_line_of_sight.gd" id="32_urnsk"] [ext_resource type="Script" uid="uid://dlbmi25edn8b7" path="res://src/world/grunk_beast/behaviors/conditions/has_line_of_sight.gd" id="32_urnsk"]
[ext_resource type="Script" uid="uid://dj7a2tj4cqap2" path="res://src/world/grunk_beast/behaviors/actions/set_target_position_from_area.gd" id="32_vbkm0"]
[ext_resource type="Script" uid="uid://o625e667ig2e" path="res://src/world/grunk_beast/behaviors/conditions/point_in_range.gd" id="34_vbkm0"] [ext_resource type="Script" uid="uid://o625e667ig2e" path="res://src/world/grunk_beast/behaviors/conditions/point_in_range.gd" id="34_vbkm0"]
[ext_resource type="Script" uid="uid://dsf3a8vlolhx8" path="res://addons/beehave/nodes/decorators/succeeder.gd" id="35_4alar"] [ext_resource type="Script" uid="uid://dsf3a8vlolhx8" path="res://addons/beehave/nodes/decorators/succeeder.gd" id="35_4alar"]
[ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="36_uy7at"] [ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="36_uy7at"]
[sub_resource type="Curve" id="Curve_sm756"] [sub_resource type="Curve" id="Curve_sm756"]
_limits = [0.0, 10.0, 0.0, 150.0] _limits = [0.0, 10.0, 0.0, 150.0]
_data = [Vector2(0, 1.2), 0.0, 0.0, 0, 0, Vector2(30, 3), 0.0, 0.0, 0, 0, Vector2(80, 5), 0.00861322, 0.00861322, 0, 0, Vector2(120, 6), 0.0473384, 0.0473384, 0, 0, Vector2(150, 10), 0.0, 0.0, 0, 0] _data = [Vector2(0, 1.2), 0.0, 0.0, 0, 0, Vector2(30, 3), 0.0740828, 0.0740828, 0, 0, Vector2(80, 4), 0.0, 0.0, 0, 0, Vector2(120, 6), 0.0949869, 0.0949869, 0, 0, Vector2(150, 7), 0.0, 0.0, 0, 0]
point_count = 5 point_count = 5
[sub_resource type="SphereShape3D" id="SphereShape3D_1cnlk"]
radius = 2.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_faau1"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_faau1"]
radius = 0.4 radius = 0.4
[sub_resource type="SphereShape3D" id="SphereShape3D_wffas"] [sub_resource type="SphereShape3D" id="SphereShape3D_wffas"]
radius = 16.0 radius = 9.0
[sub_resource type="SphereShape3D" id="SphereShape3D_1cnlk"]
radius = 2.0
[sub_resource type="SphereShape3D" id="SphereShape3D_3gbao"] [sub_resource type="SphereShape3D" id="SphereShape3D_3gbao"]
radius = 1.4 radius = 1.4
@ -52,11 +54,8 @@ radius = 1.4
[sub_resource type="SphereShape3D" id="SphereShape3D_6qixb"] [sub_resource type="SphereShape3D" id="SphereShape3D_6qixb"]
radius = 6.0 radius = 6.0
[sub_resource type="SphereShape3D" id="SphereShape3D_d4ex2"]
radius = 6.2
[sub_resource type="SphereShape3D" id="SphereShape3D_lak6w"] [sub_resource type="SphereShape3D" id="SphereShape3D_lak6w"]
radius = 12.0 radius = 10.0
[node name="GrunkBeast" type="CharacterBody3D" groups=["GrunkBeast"]] [node name="GrunkBeast" type="CharacterBody3D" groups=["GrunkBeast"]]
collision_layer = 36 collision_layer = 36
@ -74,14 +73,6 @@ unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
time_scale_factor = 2.0 time_scale_factor = 2.0
[node name="TouchingRange" type="Area3D" parent="FrameSkipper/Shambler"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -0.9)
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="FrameSkipper/Shambler/TouchingRange"]
shape = SubResource("SphereShape3D_1cnlk")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_faau1") shape = SubResource("CapsuleShape3D_faau1")
@ -95,7 +86,6 @@ script = ExtResource("4_csisu")
[node name="NavAgent" type="NavigationAgent3D" parent="Navigation"] [node name="NavAgent" type="NavigationAgent3D" parent="Navigation"]
unique_name_in_owner = true unique_name_in_owner = true
path_height_offset = 0.25 path_height_offset = 0.25
avoidance_enabled = true
debug_enabled = true debug_enabled = true
[node name="NavProbe" type="NavigationAgent3D" parent="Navigation"] [node name="NavProbe" type="NavigationAgent3D" parent="Navigation"]
@ -114,6 +104,14 @@ metadata/_custom_type_script = "uid://cfsiyhhrcua6o"
[node name="CollisionShape3D" type="CollisionShape3D" parent="GameSoundListener"] [node name="CollisionShape3D" type="CollisionShape3D" parent="GameSoundListener"]
shape = SubResource("SphereShape3D_wffas") shape = SubResource("SphereShape3D_wffas")
[node name="TouchingRange" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -0.9)
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="TouchingRange"]
shape = SubResource("SphereShape3D_1cnlk")
[node name="GrabbingRange" type="Area3D" parent="."] [node name="GrabbingRange" type="Area3D" parent="."]
collision_layer = 0 collision_layer = 0
collision_mask = 8 collision_mask = 8
@ -128,13 +126,6 @@ collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="PouncingRange"] [node name="CollisionShape3D" type="CollisionShape3D" parent="PouncingRange"]
shape = SubResource("SphereShape3D_6qixb") shape = SubResource("SphereShape3D_6qixb")
[node name="TrackingRange" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="TrackingRange"]
shape = SubResource("SphereShape3D_d4ex2")
[node name="SniffRange" type="Area3D" parent="."] [node name="SniffRange" type="Area3D" parent="."]
collision_layer = 0 collision_layer = 0
collision_mask = 8 collision_mask = 8
@ -146,6 +137,11 @@ shape = SubResource("SphereShape3D_lak6w")
unique_name_in_owner = true unique_name_in_owner = true
one_shot = true one_shot = true
[node name="TouchCooldown" type="Timer" parent="."]
unique_name_in_owner = true
wait_time = 0.5
one_shot = true
[node name="AngerDecay" type="Timer" parent="."] [node name="AngerDecay" type="Timer" parent="."]
autostart = true autostart = true
@ -183,92 +179,110 @@ metadata/_custom_type_script = "uid://du7uk56300y28"
script = ExtResource("35_4alar") script = ExtResource("35_4alar")
metadata/_custom_type_script = "uid://dsf3a8vlolhx8" metadata/_custom_type_script = "uid://dsf3a8vlolhx8"
[node name="PursuitSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator"] [node name="TransitionToPursuit" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"] [node name="PursuitModeInactive" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/TransitionToPursuit"]
script = ExtResource("14_urnsk")
left_operand = "get_value(\"current_mode\")"
operator = 1
right_operand = "\"pursuit\""
metadata/_custom_type_script = "uid://uoy6r3dbnq25"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/TransitionToPursuit"]
script = ExtResource("31_6qixb") script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_start_pursuit" settings_key = "game/gameplay/beast/anger_start_pursuit"
delta = 20.0 delta = 20.0
metadata/_custom_type_script = "uid://ccifed50rmjm2" metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="SetPlayerTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"] [node name="SetPlayerTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/TransitionToPursuit"]
script = ExtResource("15_1cnlk") script = ExtResource("15_1cnlk")
metadata/_custom_type_script = "uid://rdfsxwehjjrd" metadata/_custom_type_script = "uid://rdfsxwehjjrd"
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"] [node name="SetPursuitModeActive" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode"]
script = ExtResource("17_6qixb")
key = "\"current_mode\""
value = "\"pursuit\""
metadata/_custom_type_script = "uid://cvq483a337v6s"
[node name="AlwaysSucceedDecorator2" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode"]
script = ExtResource("35_4alar")
metadata/_custom_type_script = "uid://dsf3a8vlolhx8"
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2"]
script = ExtResource("7_vvw1q") script = ExtResource("7_vvw1q")
metadata/_custom_type_script = "uid://cw22yurt5l74k" metadata/_custom_type_script = "uid://cw22yurt5l74k"
[node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector"]
script = ExtResource("15_oons1") script = ExtResource("15_oons1")
metadata/_custom_type_script = "uid://dwfdg523bk776" metadata/_custom_type_script = "uid://dwfdg523bk776"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/AlwaysFailDecorator"] [node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/AlwaysFailDecorator"]
script = ExtResource("10_kjykp") script = ExtResource("10_kjykp")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj" metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="GrabSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="GrabSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="IsTargetInGrabbingRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/GrabSequence" node_paths=PackedStringArray("area")] [node name="IsTargetInGrabbingRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/GrabSequence" node_paths=PackedStringArray("area")]
script = ExtResource("9_xuag8") script = ExtResource("9_xuag8")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
area = NodePath("../../../../../../../../GrabbingRange") area = NodePath("../../../../../../../GrabbingRange")
metadata/_custom_type_script = "uid://7k5hor1omsxc" metadata/_custom_type_script = "uid://7k5hor1omsxc"
[node name="GrabCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/GrabSequence"] [node name="GrabCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/GrabSequence"]
script = ExtResource("10_ntlom") script = ExtResource("10_ntlom")
wait_time = 2.0 wait_time = 2.0
metadata/_custom_type_script = "uid://2qri6rrfv8ui" metadata/_custom_type_script = "uid://2qri6rrfv8ui"
[node name="GrabTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/GrabSequence/GrabCooldown"] [node name="GrabTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/GrabSequence/GrabCooldown"]
script = ExtResource("11_nq7ke") script = ExtResource("11_nq7ke")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
metadata/_custom_type_script = "uid://b0xue7ao0gjqo" metadata/_custom_type_script = "uid://b0xue7ao0gjqo"
[node name="ChaseSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="ChaseSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector"]
script = ExtResource("12_xde72") script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0" metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="TargetReachable" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/ChaseSequence"] [node name="TargetReachable" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/ChaseSequence"]
script = ExtResource("32_6qixb") script = ExtResource("32_6qixb")
metadata/_custom_type_script = "uid://rpsd3i11lnur" metadata/_custom_type_script = "uid://rpsd3i11lnur"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/ChaseSequence"] [node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/ChaseSequence"]
script = ExtResource("14_4y64f") script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://om57w2acvgb7" metadata/_custom_type_script = "uid://om57w2acvgb7"
[node name="FrustrationSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="FrustrationSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector"]
script = ExtResource("12_xde72") script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0" metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="HasLineOfSight" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence" node_paths=PackedStringArray("exclusions", "sight_origin")] [node name="HasLineOfSight" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/FrustrationSequence" node_paths=PackedStringArray("exclusions", "sight_origin")]
script = ExtResource("32_urnsk") script = ExtResource("32_urnsk")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
exclusions = [NodePath("../../../../../../../..")] exclusions = [NodePath("../../../../../../..")]
sight_origin = NodePath("../../../../../../../../CollisionShape3D/SightOrigin") sight_origin = NodePath("../../../../../../../CollisionShape3D/SightOrigin")
metadata/_custom_type_script = "uid://dlbmi25edn8b7" metadata/_custom_type_script = "uid://dlbmi25edn8b7"
[node name="FrustrationCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence"] [node name="FrustrationCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/FrustrationSequence"]
script = ExtResource("10_ntlom") script = ExtResource("10_ntlom")
wait_time = 1.0 wait_time = 1.0
metadata/_custom_type_script = "uid://2qri6rrfv8ui" metadata/_custom_type_script = "uid://2qri6rrfv8ui"
[node name="GetFrustrated" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence/FrustrationCooldown"] [node name="GetFrustrated" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/FrustrationSequence/FrustrationCooldown"]
script = ExtResource("31_6qixb") script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_pursuit_frustrated" settings_key = "game/gameplay/beast/anger_pursuit_frustrated"
delta = 6.0 delta = 6.0
metadata/_custom_type_script = "uid://ccifed50rmjm2" metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="BoredomCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="BoredomCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector"]
script = ExtResource("10_ntlom") script = ExtResource("10_ntlom")
wait_time = 4.0
metadata/_custom_type_script = "uid://2qri6rrfv8ui" metadata/_custom_type_script = "uid://2qri6rrfv8ui"
[node name="GetBored" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/BoredomCooldown"] [node name="GetBored" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator2/ActionSelector/BoredomCooldown"]
script = ExtResource("31_6qixb") script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_pursuit_bored" settings_key = "game/gameplay/beast/anger_pursuit_bored"
delta = -10.0 delta = -10.0
@ -284,103 +298,112 @@ blackboard_key = "anger_level"
settings_key = "game/gameplay/beast/anger_threshold_tracking" settings_key = "game/gameplay/beast/anger_threshold_tracking"
metadata/_custom_type_script = "uid://du7uk56300y28" metadata/_custom_type_script = "uid://du7uk56300y28"
[node name="SequenceComposite" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"] [node name="AlwaysSucceedDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
script = ExtResource("35_4alar")
metadata/_custom_type_script = "uid://dsf3a8vlolhx8"
[node name="TransitionToTracking" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/AlwaysSucceedDecorator"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite"] [node name="TransitionFromLurking" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/AlwaysSucceedDecorator/TransitionToTracking"]
script = ExtResource("14_urnsk")
left_operand = "get_value(\"current_mode\")"
right_operand = "\"lurking\""
metadata/_custom_type_script = "uid://uoy6r3dbnq25"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/AlwaysSucceedDecorator/TransitionToTracking"]
script = ExtResource("31_6qixb") script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_pursuit_frustrated" settings_key = "game/gameplay/beast/anger_pursuit_frustrated"
delta = 4.0 delta = 4.0
metadata/_custom_type_script = "uid://ccifed50rmjm2" metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite"] [node name="SetTrackingModeActive" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
script = ExtResource("17_6qixb")
key = "\"current_mode\""
value = "\"tracking\""
metadata/_custom_type_script = "uid://cvq483a337v6s"
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
script = ExtResource("7_vvw1q") script = ExtResource("7_vvw1q")
metadata/_custom_type_script = "uid://cw22yurt5l74k" metadata/_custom_type_script = "uid://cw22yurt5l74k"
[node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"] [node name="InvestigateAction" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector"]
script = ExtResource("15_oons1")
metadata/_custom_type_script = "uid://dwfdg523bk776"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/AlwaysFailDecorator"]
script = ExtResource("10_kjykp")
blackboard_key = "point_of_interest"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="InvestigateAction" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"]
script = ExtResource("12_xde72") script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0" metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="POIInRange" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction"] [node name="POIInRange" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction"]
script = ExtResource("34_vbkm0") script = ExtResource("34_vbkm0")
blackboard_key = "point_of_interest" blackboard_key = "point_of_interest"
max_range = 6.2 max_range = 6.0
metadata/_custom_type_script = "uid://o625e667ig2e" metadata/_custom_type_script = "uid://o625e667ig2e"
[node name="AlwaysSucceedDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction"] [node name="AlwaysSucceedDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction"]
script = ExtResource("35_4alar") script = ExtResource("35_4alar")
metadata/_custom_type_script = "uid://dsf3a8vlolhx8" metadata/_custom_type_script = "uid://dsf3a8vlolhx8"
[node name="InvestigateSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator"] [node name="InvestigateSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"] [node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
script = ExtResource("11_mbqcc") script = ExtResource("11_mbqcc")
mean_time = 4.0 mean_time = 4.0
st_dev_time = 0.6 st_dev_time = 0.6
wait_time = 4.48953 wait_time = 4.26245
metadata/_custom_type_script = "uid://beyk2xtbjrsg4" metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"] [node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"]
script = ExtResource("24_asd50") script = ExtResource("24_asd50")
blackboard_key = "investigation_target" blackboard_key = "investigation_target"
center_target_key = "point_of_interest"
st_dev = Vector3(5, 0, 5)
metadata/_custom_type_script = "uid://ubcelage67hs" metadata/_custom_type_script = "uid://ubcelage67hs"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"] [node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
script = ExtResource("10_kjykp") script = ExtResource("10_kjykp")
blackboard_key = "investigation_target" blackboard_key = "investigation_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj" metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"] [node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
script = ExtResource("14_4y64f") script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://om57w2acvgb7" metadata/_custom_type_script = "uid://om57w2acvgb7"
[node name="RandomChance" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"] [node name="RandomChance" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
script = ExtResource("36_uy7at") script = ExtResource("36_uy7at")
probability = 0.1 probability = 0.1
metadata/_custom_type_script = "uid://c7n3lak5yhrpv" metadata/_custom_type_script = "uid://c7n3lak5yhrpv"
[node name="SniffSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance"] [node name="SniffSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="Sniff" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"] [node name="Sniff" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"]
script = ExtResource("26_lak6w") script = ExtResource("26_lak6w")
metadata/_custom_type_script = "uid://bksvlal4gjhfr" metadata/_custom_type_script = "uid://bksvlal4gjhfr"
[node name="SetTargetFromArea" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence" node_paths=PackedStringArray("area")] [node name="SetPointOfInterest" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence" node_paths=PackedStringArray("area")]
script = ExtResource("13_x8l6r") script = ExtResource("32_vbkm0")
blackboard_key = "point_of_interest" blackboard_key = "point_of_interest"
area = NodePath("../../../../../../../../../../../SniffRange") area = NodePath("../../../../../../../../../../SniffRange")
metadata/_custom_type_script = "uid://b34l3v4sr8rmq" metadata/_custom_type_script = "uid://dj7a2tj4cqap2"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"] [node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"]
script = ExtResource("31_6qixb") script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_sniff" settings_key = "game/gameplay/beast/anger_sniff"
delta = 40.0 delta = 40.0
metadata/_custom_type_script = "uid://ccifed50rmjm2" metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="TravelSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"] [node name="TravelSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/TravelSequence"] [node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/TravelSequence"]
script = ExtResource("10_kjykp") script = ExtResource("10_kjykp")
blackboard_key = "point_of_interest" blackboard_key = "point_of_interest"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj" metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/TravelSequence"] [node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/TravelSequence"]
script = ExtResource("14_4y64f") script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://om57w2acvgb7" metadata/_custom_type_script = "uid://om57w2acvgb7"
@ -388,11 +411,17 @@ metadata/_custom_type_script = "uid://om57w2acvgb7"
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="SetLurkingModeActive" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
script = ExtResource("17_6qixb")
key = "\"current_mode\""
value = "\"lurking\""
metadata/_custom_type_script = "uid://cvq483a337v6s"
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"] [node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
script = ExtResource("11_mbqcc") script = ExtResource("11_mbqcc")
mean_time = 9.0 mean_time = 9.0
st_dev_time = 1.0 st_dev_time = 1.0
wait_time = 9.31084 wait_time = 9.20004
metadata/_custom_type_script = "uid://beyk2xtbjrsg4" metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"] [node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"]
@ -435,7 +464,7 @@ layout_mode = 2
[node name="Label" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer"] [node name="Label" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2 layout_mode = 2
text = "Current beast behavior: " text = "Current beast mode: "
[node name="BeastBehaviorLabel" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer"] [node name="BeastBehaviorLabel" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true unique_name_in_owner = true
@ -456,8 +485,8 @@ layout_mode = 2
size_flags_vertical = 1 size_flags_vertical = 1
max_value = 150.0 max_value = 150.0
[connection signal="body_entered" from="FrameSkipper/Shambler/TouchingRange" to="." method="_on_touch"]
[connection signal="link_reached" from="Navigation/NavAgent" to="." method="_on_link_reached"] [connection signal="link_reached" from="Navigation/NavAgent" to="." method="_on_link_reached"]
[connection signal="waypoint_reached" from="Navigation/NavAgent" to="." method="_on_waypoint_reached"] [connection signal="waypoint_reached" from="Navigation/NavAgent" to="." method="_on_waypoint_reached"]
[connection signal="sound_detected" from="GameSoundListener" to="." method="on_sound_detected"] [connection signal="sound_detected" from="GameSoundListener" to="." method="on_sound_detected"]
[connection signal="body_entered" from="TouchingRange" to="." method="_on_touch"]
[connection signal="timeout" from="AngerDecay" to="." method="_anger_decay"] [connection signal="timeout" from="AngerDecay" to="." method="_anger_decay"]

View File

@ -171,6 +171,9 @@ bone = 5
forward_axis = 2 forward_axis = 2
primary_rotation_axis = 2 primary_rotation_axis = 2
use_secondary_rotation = false use_secondary_rotation = false
duration = 0.3
transition_type = 7
ease_type = 1
use_angle_limitation = true use_angle_limitation = true
symmetry_limitation = true symmetry_limitation = true
primary_limit_angle = 1.5708 primary_limit_angle = 1.5708
@ -217,6 +220,7 @@ parameters/rear_scale/scale = 1.0
[node name="LookTargetPivot" type="Node3D" parent="." index="3"] [node name="LookTargetPivot" type="Node3D" parent="." index="3"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)
top_level = true top_level = true
[node name="LookTarget" type="Marker3D" parent="LookTargetPivot" index="0"] [node name="LookTarget" type="Marker3D" parent="LookTargetPivot" index="0"]

View File

@ -4,7 +4,7 @@
[ext_resource type="Resource" uid="uid://tgac5tnfx56r" path="res://src/world/world_manager.tres" id="2_5kmgb"] [ext_resource type="Resource" uid="uid://tgac5tnfx56r" path="res://src/world/world_manager.tres" id="2_5kmgb"]
[ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="2_6fy3g"] [ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="2_6fy3g"]
[ext_resource type="Resource" uid="uid://0i72bf8ip1lx" path="res://src/world/spook_manager.tres" id="3_l0av5"] [ext_resource type="Resource" uid="uid://0i72bf8ip1lx" path="res://src/world/spook_manager.tres" id="3_l0av5"]
[ext_resource type="PackedScene" uid="uid://bov4ok76woyc" path="res://levels/ghost_ship/ghost_ship.tscn" id="4_5kmgb"] [ext_resource type="PackedScene" uid="uid://700gr7k3gqlf" path="res://levels/grunkbeast_test/visual_test/visual_test.tscn" id="4_5kmgb"]
[ext_resource type="PackedScene" uid="uid://c0uitm5cg88h1" path="res://src/ui/menus/kill_screen/kill_screen.tscn" id="6_l0av5"] [ext_resource type="PackedScene" uid="uid://c0uitm5cg88h1" path="res://src/ui/menus/kill_screen/kill_screen.tscn" id="6_l0av5"]
[ext_resource type="PackedScene" uid="uid://brknr57xc2cp0" path="res://src/ui/elements/save_icon/save_icon.tscn" id="7_5kmgb"] [ext_resource type="PackedScene" uid="uid://brknr57xc2cp0" path="res://src/ui/elements/save_icon/save_icon.tscn" id="7_5kmgb"]

View File

@ -1,18 +1,20 @@
[gd_scene load_steps=6 format=3 uid="uid://db8w8eljku535"] [gd_scene load_steps=8 format=3 uid="uid://db8w8eljku535"]
[ext_resource type="Script" uid="uid://duegbpkukv4e" path="res://utilities/sandbox/sandbox.gd" id="1_mxso2"] [ext_resource type="Script" uid="uid://duegbpkukv4e" path="res://utilities/sandbox/sandbox.gd" id="1_mxso2"]
[ext_resource type="Script" uid="uid://bb0t2ovl7wifo" path="res://addons/beehave/nodes/beehave_tree.gd" id="2_fjanr"] [ext_resource type="Script" uid="uid://bb0t2ovl7wifo" path="res://addons/beehave/nodes/beehave_tree.gd" id="2_fjanr"]
[ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="3_hovx8"] [ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="3_hovx8"]
[ext_resource type="Script" uid="uid://yar3g43pb3fm" path="res://src/world/grunk_beast/behaviors/actions/print_debug_action.gd" id="4_1rbkg"] [ext_resource type="Script" uid="uid://yar3g43pb3fm" path="res://src/world/grunk_beast/behaviors/actions/print_debug_action.gd" id="4_1rbkg"]
[ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="5_f6f0v"] [ext_resource type="Script" uid="uid://cg016dbe7gs1x" path="res://addons/beehave/nodes/composites/sequence.gd" id="5_ua2rg"]
[ext_resource type="Script" uid="uid://dorri1tul8gfx" path="res://addons/beehave/nodes/decorators/delayer.gd" id="6_buuky"]
[ext_resource type="Script" uid="uid://c84st521ytmk3" path="res://addons/beehave/nodes/decorators/until_fail.gd" id="6_f6f0v"]
[node name="Sandbox" type="Node"] [node name="Sandbox" type="Node"]
script = ExtResource("1_mxso2") script = ExtResource("1_mxso2")
[node name="BeehaveTree" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")] [node name="BeehaveTree" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")]
script = ExtResource("2_fjanr") script = ExtResource("2_fjanr")
tick_rate = 60 tick_rate = 5
blackboard = NodePath("@Node@94268") blackboard = NodePath("@Node@22149")
actor = NodePath("..") actor = NodePath("..")
metadata/_custom_type_script = "uid://bb0t2ovl7wifo" metadata/_custom_type_script = "uid://bb0t2ovl7wifo"
@ -20,14 +22,35 @@ metadata/_custom_type_script = "uid://bb0t2ovl7wifo"
script = ExtResource("3_hovx8") script = ExtResource("3_hovx8")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0" metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="DebugA" type="Node" parent="BeehaveTree/SequenceReactiveComposite"] [node name="ShouldPrintEveryFrame" type="Node" parent="BeehaveTree/SequenceReactiveComposite"]
script = ExtResource("4_1rbkg") script = ExtResource("4_1rbkg")
metadata/_custom_type_script = "uid://yar3g43pb3fm" metadata/_custom_type_script = "uid://yar3g43pb3fm"
[node name="RandomChance" type="Node" parent="BeehaveTree/SequenceReactiveComposite"] [node name="SequenceComposite" type="Node" parent="BeehaveTree/SequenceReactiveComposite"]
script = ExtResource("5_f6f0v") script = ExtResource("5_ua2rg")
metadata/_custom_type_script = "uid://c7n3lak5yhrpv" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="DebugBB" type="Node" parent="BeehaveTree/SequenceReactiveComposite/RandomChance"] [node name="ShouldPrintOnlyOnceXXXXXXXXXXXX" type="Node" parent="BeehaveTree/SequenceReactiveComposite/SequenceComposite"]
script = ExtResource("4_1rbkg")
metadata/_custom_type_script = "uid://yar3g43pb3fm"
[node name="UntilFailDecorator" type="Node" parent="BeehaveTree/SequenceReactiveComposite/SequenceComposite"]
script = ExtResource("6_f6f0v")
metadata/_custom_type_script = "uid://c84st521ytmk3"
[node name="SequenceReactiveComposite" type="Node" parent="BeehaveTree/SequenceReactiveComposite/SequenceComposite/UntilFailDecorator"]
script = ExtResource("3_hovx8")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="ShouldPrintEveryFrameINNER" type="Node" parent="BeehaveTree/SequenceReactiveComposite/SequenceComposite/UntilFailDecorator/SequenceReactiveComposite"]
script = ExtResource("4_1rbkg")
metadata/_custom_type_script = "uid://yar3g43pb3fm"
[node name="DelayDecorator" type="Node" parent="BeehaveTree/SequenceReactiveComposite/SequenceComposite/UntilFailDecorator/SequenceReactiveComposite"]
script = ExtResource("6_buuky")
wait_time = 0.5
metadata/_custom_type_script = "uid://dorri1tul8gfx"
[node name="OnceInAWhile" type="Node" parent="BeehaveTree/SequenceReactiveComposite/SequenceComposite/UntilFailDecorator/SequenceReactiveComposite/DelayDecorator"]
script = ExtResource("4_1rbkg") script = ExtResource("4_1rbkg")
metadata/_custom_type_script = "uid://yar3g43pb3fm" metadata/_custom_type_script = "uid://yar3g43pb3fm"