[gd_scene load_steps=43 format=3 uid="uid://3bcudbixirkj"] [ext_resource type="Shader" path="res://Shaders/Flash.gdshader" id="2_2lfeo"] [ext_resource type="Script" path="res://Characters/Enemy.cs" id="2_l16dp"] [ext_resource type="Script" path="res://State/Character/CharacterStateMachine.cs" id="3_lj2a2"] [ext_resource type="Script" path="res://State/Character/NPCIdleState.cs" id="4_38uyt"] [ext_resource type="Script" path="res://State/Character/NPCMoveState.cs" id="5_0peb6"] [ext_resource type="Script" path="res://Utils/AnimationManager.cs" id="6_1a373"] [ext_resource type="Script" path="res://State/Thinker/ThinkerStateMachine.cs" id="6_8y4xc"] [ext_resource type="Script" path="res://State/Thinker/PursueState.cs" id="7_q01ij"] [ext_resource type="Animation" uid="uid://8e8r3y1imvsx" path="res://Assets/Animations/stun.res" id="8_n0iqj"] [ext_resource type="Script" path="res://State/Thinker/AttackState.cs" id="8_woh6n"] [ext_resource type="Material" uid="uid://bat28samf7ukd" path="res://Assets/Sprites/Particles/NPCDamageProcessMaterial.tres" id="9_x36vb"] [ext_resource type="Texture2D" uid="uid://bd8l8kafb42dt" path="res://Assets/Sprites/Particles/circle.png" id="10_io6bw"] [ext_resource type="Material" uid="uid://2tsvsp45elru" path="res://Assets/Sprites/Particles/NPCDeathParticles.tres" id="10_yyggy"] [ext_resource type="Texture2D" uid="uid://c1a7lvb4uuwfy" path="res://Assets/Sprites/Particles/circle-16.png" id="12_vfix1"] [ext_resource type="AudioStream" uid="uid://k6kpdj1kv0jg" path="res://Assets/Sounds/splat.ogg" id="15_luroj"] [ext_resource type="Texture2D" uid="uid://cynlarq6mmvmd" path="res://Assets/Sprites/Characters/doc-cultist.png" id="16_licfs"] [ext_resource type="PackedScene" uid="uid://bgavhkdtbx2o6" path="res://Items/Weapons/ProjectileSpawner.tscn" id="17_dmlbb"] [ext_resource type="Script" path="res://Items/Inventory.cs" id="17_sjq8t"] [ext_resource type="PackedScene" uid="uid://cjgxyhgcyvsv7" path="res://BoundingBoxes/Hurtbox.tscn" id="18_ajs2x"] [ext_resource type="PackedScene" uid="uid://1y5r6sklwgrp" path="res://Entities/UnwantedFrequency.tscn" id="18_lwg36"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_2fq6c"] resource_local_to_scene = true shader = ExtResource("2_2lfeo") shader_parameter/color = Vector4(1, 1, 1, 1) shader_parameter/intensity = 0.0 shader_parameter/alpha_modulate = 1.0 [sub_resource type="Animation" id="Animation_rqtrh"] length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath("../Sprites/Node2D/Character:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath("../Sprites/Node2D/Character:position") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, "values": [Vector2(0, -8)] } [sub_resource type="Animation" id="Animation_qws2q"] resource_name = "idle" length = 0.8 loop_mode = 1 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath("../Sprites/Node2D/Character:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath("../Sprites/Node2D/Character:position") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0, 0.4, 0.8), "transitions": PackedFloat32Array(-2, -2, -2), "update": 0, "values": [Vector2(0, -9), Vector2(0, -7), Vector2(0, -9)] } [sub_resource type="Animation" id="Animation_dwyme"] resource_name = "move" length = 0.8 loop_mode = 1 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = false tracks/0/path = NodePath("../Sprites/Node2D/Character:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath("../Sprites/Node2D/Character:position") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0, 0.4, 0.8), "transitions": PackedFloat32Array(-2, -2, -2), "update": 0, "values": [Vector2(0, -9), Vector2(0, -7), Vector2(0, -9)] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_hvti5"] _data = { "RESET": SubResource("Animation_rqtrh"), "idle": SubResource("Animation_qws2q"), "move": SubResource("Animation_dwyme") } [sub_resource type="Animation" id="Animation_adxyh"] resource_local_to_scene = true length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath("../Sprites/Node2D/Character:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath("../Effects/SpawnParticles:emitting") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [false] } [sub_resource type="Animation" id="Animation_3w3u1"] resource_name = "attack" length = 2.0 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath("../Sprites/Node2D/Character:frame") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9), "transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1), "update": 1, "values": [1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath("../Effects/SpawnParticles:emitting") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0, 2), "transitions": PackedFloat32Array(1, 1), "update": 1, "values": [true, false] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_6wkji"] _data = { "RESET": SubResource("Animation_adxyh"), "attack": SubResource("Animation_3w3u1") } [sub_resource type="Animation" id="Animation_k6l16"] length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath(".:material:shader_parameter/intensity") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, "values": [0.0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath(".:material:shader_parameter/alpha_modulate") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 0, "values": [1.0] } tracks/2/type = "value" tracks/2/imported = false tracks/2/enabled = true tracks/2/path = NodePath("Effects/DeathParticles:emitting") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [false] } tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = true tracks/3/path = NodePath("Effects/HurtParticles:emitting") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [false] } tracks/4/type = "value" tracks/4/imported = false tracks/4/enabled = true tracks/4/path = NodePath("Sprites/Node2D/Character:frame") tracks/4/interp = 1 tracks/4/loop_wrap = true tracks/4/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [8] } [sub_resource type="Animation" id="Animation_lhc4c"] resource_name = "death" tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath("Effects/DeathParticles:emitting") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [true] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath(".:material:shader_parameter/alpha_modulate") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0, 0.1), "transitions": PackedFloat32Array(1, 1), "update": 0, "values": [1.0, 0.0] } [sub_resource type="Animation" id="Animation_0vgmg"] resource_local_to_scene = true resource_name = "hurt" length = 0.2 step = 0.05 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true tracks/0/path = NodePath(".:material:shader_parameter/intensity") tracks/0/interp = 2 tracks/0/loop_wrap = true tracks/0/keys = { "times": PackedFloat32Array(0, 0.05, 0.1, 0.2), "transitions": PackedFloat32Array(4, 4, 4, 4), "update": 0, "values": [1.0, 0.0, 1.0, 0.0] } tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true tracks/1/path = NodePath("Effects/HurtParticles:emitting") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [true] } tracks/2/type = "method" tracks/2/imported = false tracks/2/enabled = true tracks/2/path = NodePath("Effects/HurtParticles") tracks/2/interp = 1 tracks/2/loop_wrap = true tracks/2/keys = { "times": PackedFloat32Array(0.1), "transitions": PackedFloat32Array(1), "values": [{ "args": [], "method": &"restart" }] } tracks/3/type = "value" tracks/3/imported = false tracks/3/enabled = false tracks/3/path = NodePath("Sprites/Node2D/Character:frame") tracks/3/interp = 1 tracks/3/loop_wrap = true tracks/3/keys = { "times": PackedFloat32Array(0), "transitions": PackedFloat32Array(1), "update": 1, "values": [8] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_rc55s"] _data = { "RESET": SubResource("Animation_k6l16"), "death": SubResource("Animation_lhc4c"), "hurt": SubResource("Animation_0vgmg") } [sub_resource type="Animation" id="Animation_7j54f"] length = 0.001 [sub_resource type="AnimationLibrary" id="AnimationLibrary_kks2p"] _data = { "RESET": SubResource("Animation_7j54f"), "stun": ExtResource("8_n0iqj") } [sub_resource type="CanvasTexture" id="CanvasTexture_pited"] diffuse_texture = ExtResource("12_vfix1") [sub_resource type="Gradient" id="Gradient_b2o0f"] colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) [sub_resource type="GradientTexture1D" id="GradientTexture1D_iyaih"] gradient = SubResource("Gradient_b2o0f") [sub_resource type="Curve" id="Curve_30p4b"] _data = [Vector2(0, 0), 0.0, 0.0, 0, 0, Vector2(0.2, 1), 0.0, 0.0, 0, 0, Vector2(1, 0.5), 0.0, 0.0, 0, 0] point_count = 3 [sub_resource type="CurveTexture" id="CurveTexture_5uulw"] curve = SubResource("Curve_30p4b") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_qdhau"] particle_flag_disable_z = true spread = 180.0 gravity = Vector3(0, 0, 0) initial_velocity_min = 32.0 initial_velocity_max = 32.0 angular_velocity_min = 90.0 angular_velocity_max = 90.0 orbit_velocity_min = 0.0 orbit_velocity_max = 0.0 linear_accel_min = -64.0 linear_accel_max = -32.0 tangential_accel_min = 8.0 tangential_accel_max = 8.0 scale_min = 0.13 scale_max = 0.25 scale_curve = SubResource("CurveTexture_5uulw") color = Color(1, 0, 0, 1) color_ramp = SubResource("GradientTexture1D_iyaih") [sub_resource type="RectangleShape2D" id="RectangleShape2D_bfqew"] size = Vector2(12, 8) [sub_resource type="RectangleShape2D" id="RectangleShape2D_1gjgc"] size = Vector2(12, 16) [node name="Cultist" type="CharacterBody2D" node_paths=PackedStringArray("DefaultSelectedItem", "ThinkerStateMachine", "Sprite", "Inventory", "StateMachine", "Hurtbox")] y_sort_enabled = true texture_filter = 3 material = SubResource("ShaderMaterial_2fq6c") collision_layer = 6 collision_mask = 17 script = ExtResource("2_l16dp") DefaultSelectedItem = NodePath("Inventory/ProjectileSpawner") ShouldMoveWhenUsingItem = false ThinkerStateMachine = NodePath("ThinkerStateMachine") Speed = 40.0 Friction = 8.0 Mass = 0.5 Health = 170.0 Sprite = NodePath("Sprites/Node2D/Character") Inventory = NodePath("Inventory") StateMachine = NodePath("StateMachine") Hurtbox = NodePath("Hurtbox") [node name="StateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState", "Character")] script = ExtResource("3_lj2a2") InitialState = NodePath("Idle") Character = NodePath("..") [node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("MoveState", "Character")] script = ExtResource("4_38uyt") MoveState = NodePath("../Move") Character = NodePath("../..") [node name="Move" type="Node" parent="StateMachine" node_paths=PackedStringArray("IdleState", "Character")] script = ExtResource("5_0peb6") IdleState = NodePath("../Idle") Character = NodePath("../..") [node name="ThinkerStateMachine" type="Node" parent="." node_paths=PackedStringArray("InitialState")] script = ExtResource("6_8y4xc") InitialState = NodePath("Pursue") [node name="Pursue" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("NavigationAgent", "AttackState", "NPC")] script = ExtResource("7_q01ij") NavigationAgent = NodePath("../../NavigationAgent2D") AttackState = NodePath("../Attack") MinDistanceToTarget = 96.0 ThinkDelta = 0.05 NPC = NodePath("../..") [node name="Attack" type="Node" parent="ThinkerStateMachine" node_paths=PackedStringArray("PassiveState", "PursueState", "NPC")] script = ExtResource("8_woh6n") MaxDistanceToTarget = 128.0 PassiveState = NodePath("../Pursue") PursueState = NodePath("../Pursue") NPC = NodePath("../..") [node name="Idle" type="Node" parent="ThinkerStateMachine"] [node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] debug_enabled = true [node name="Animations" type="Node" parent="."] script = ExtResource("6_1a373") [node name="Movement" type="AnimationPlayer" parent="Animations"] libraries = { "": SubResource("AnimationLibrary_hvti5") } [node name="Attack" type="AnimationPlayer" parent="Animations"] libraries = { "": SubResource("AnimationLibrary_6wkji") } [node name="Hurt" type="AnimationPlayer" parent="Animations"] root_node = NodePath("../..") libraries = { "": SubResource("AnimationLibrary_rc55s") } [node name="Stun" type="AnimationPlayer" parent="Animations"] libraries = { "": SubResource("AnimationLibrary_kks2p") } [node name="Effects" type="Node2D" parent="."] [node name="HurtParticles" type="GPUParticles2D" parent="Effects"] position = Vector2(0, -8) emitting = false process_material = ExtResource("9_x36vb") texture = ExtResource("10_io6bw") lifetime = 0.4 one_shot = true explosiveness = 1.0 [node name="DeathParticles" type="GPUParticles2D" parent="Effects"] emitting = false amount = 32 process_material = ExtResource("10_yyggy") texture = SubResource("CanvasTexture_pited") lifetime = 2.0 one_shot = true preprocess = 0.1 explosiveness = 0.9 [node name="SpawnParticles" type="GPUParticles2D" parent="Effects"] emitting = false amount = 24 process_material = SubResource("ParticleProcessMaterial_qdhau") texture = ExtResource("12_vfix1") [node name="HurtSound" type="AudioStreamPlayer2D" parent="Effects"] stream = ExtResource("15_luroj") [node name="Sprites" type="Node2D" parent="."] y_sort_enabled = true use_parent_material = true rotation = 6.28319 [node name="Node2D" type="Node2D" parent="Sprites"] use_parent_material = true [node name="Character" type="Sprite2D" parent="Sprites/Node2D"] use_parent_material = true position = Vector2(0, -8) texture = ExtResource("16_licfs") offset = Vector2(0, -4) hframes = 6 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2(0, -4) shape = SubResource("RectangleShape2D_bfqew") [node name="Inventory" type="Node2D" parent="."] position = Vector2(0, -4) script = ExtResource("17_sjq8t") [node name="ProjectileSpawner" parent="Inventory" instance=ExtResource("17_dmlbb")] Projectile = ExtResource("18_lwg36") ShouldOverrideProjectileDamage = false ShouldRotate = false UseTime = 2.0 [node name="Hurtbox" parent="." instance=ExtResource("18_ajs2x")] [node name="CollisionShape2D" parent="Hurtbox" index="0"] position = Vector2(0, -8) shape = SubResource("RectangleShape2D_1gjgc") [editable path="Hurtbox"]