diff --git a/assets/materials/grunk_bubble.material b/assets/materials/grunk_bubble.material new file mode 100644 index 0000000..f81d6d1 Binary files /dev/null and b/assets/materials/grunk_bubble.material differ diff --git a/assets/materials/taste_the_god_particle_you_filthy_rat.tres b/assets/materials/taste_the_god_particle_you_filthy_rat.tres new file mode 100644 index 0000000..7bd1500 --- /dev/null +++ b/assets/materials/taste_the_god_particle_you_filthy_rat.tres @@ -0,0 +1,81 @@ +[gd_resource type="ShaderMaterial" load_steps=14 format=3 uid="uid://pr3m1n71vtof"] + +[ext_resource type="Shader" uid="uid://dawp27i0m5arl" path="res://src/shaders/glowing_rift.gdshader" id="1_cg36x"] + +[sub_resource type="Gradient" id="Gradient_c7m4v"] +offsets = PackedFloat32Array(0, 0.166161, 0.240685, 0.514515, 0.734619, 0.816075, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.0627591, 0.0627591, 0.0627591, 1, 0.34, 0.34, 0.34, 1, 0.103744, 0.103744, 0.103744, 1, 0.328559, 0.328559, 0.328559, 1, 0.0643529, 0.0643529, 0.0643529, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_vru5p"] +gradient = SubResource("Gradient_c7m4v") + +[sub_resource type="Gradient" id="Gradient_cp8sw"] +offsets = PackedFloat32Array(0, 0.140165, 0.29961, 0.426127, 0.597704, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.0685576, 0.0685576, 0.0685576, 1, 0.295867, 0.295867, 0.295866, 1, 0.336608, 0.336608, 0.336608, 1, 0.0889882, 0.0889882, 0.0889882, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_c7m4v"] +gradient = SubResource("Gradient_cp8sw") + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_6bdpa"] +seed = 1 +frequency = 0.0052 +fractal_type = 0 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_cp8sw"] +seamless = true +seamless_blend_skirt = 0.252 +noise = SubResource("FastNoiseLite_6bdpa") + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_10hsf"] +noise_type = 4 +frequency = 0.0105 +fractal_octaves = 2 +fractal_gain = 2.0 +fractal_weighted_strength = 0.61 +fractal_ping_pong_strength = 2.29 +domain_warp_enabled = true +domain_warp_frequency = 0.03 +domain_warp_fractal_octaves = 1 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_0bwtl"] +seamless = true +seamless_blend_skirt = 0.4 +noise = SubResource("FastNoiseLite_10hsf") + +[sub_resource type="Gradient" id="Gradient_6bdpa"] +offsets = PackedFloat32Array(0, 0.095104, 0.490251, 0.940858, 1) +colors = PackedColorArray(0, 0, 0, 1, 0.08, 0.08, 0.08, 1, 0.687215, 0.687215, 0.687215, 1, 0.0715679, 0.0715679, 0.0715679, 1, 0, 0, 0, 1) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_cp8sw"] +gradient = SubResource("Gradient_6bdpa") + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_c7m4v"] +noise_type = 2 +frequency = 0.0381 +fractal_octaves = 3 +cellular_distance_function = 2 + +[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_vru5p"] +seamless = true +seamless_blend_skirt = 0.4 +noise = SubResource("FastNoiseLite_c7m4v") + +[resource] +render_priority = 0 +shader = ExtResource("1_cg36x") +shader_parameter/rift_shape = SubResource("NoiseTexture2D_vru5p") +shader_parameter/rift_scale = SubResource("GradientTexture1D_cp8sw") +shader_parameter/rift_bias = SubResource("GradientTexture1D_c7m4v") +shader_parameter/shape_scale = 0.4 +shader_parameter/rift_speed = 0.2 +shader_parameter/progress = 0.0 +shader_parameter/smoothing = 0.02 +shader_parameter/rift_offset = SubResource("NoiseTexture2D_0bwtl") +shader_parameter/offset_scale = SubResource("GradientTexture1D_vru5p") +shader_parameter/color = Color(0, 0.101961, 0.301961, 1) +shader_parameter/emission = Color(0.51, 0.918333, 1, 1) +shader_parameter/emission_strength = 1.0 +shader_parameter/rift_noise = SubResource("NoiseTexture2D_cp8sw") +shader_parameter/rift_noise_scale = 10.0 +shader_parameter/rift_noise_bias = 0.4 +shader_parameter/rift_noise_speed = 0.3 diff --git a/assets/npc/shambler/animations/anim_RESET.tres b/assets/npc/shambler/animations/anim_RESET.tres index 7b322fb..3a4ec2b 100644 --- a/assets/npc/shambler/animations/anim_RESET.tres +++ b/assets/npc/shambler/animations/anim_RESET.tres @@ -403,7 +403,7 @@ tracks/55/keys = { tracks/56/type = "value" tracks/56/imported = false tracks/56/enabled = true -tracks/56/path = NodePath("SpawnDebris:emitting") +tracks/56/path = NodePath("SpawnEffects/MajorSpawnDebris:emitting") tracks/56/interp = 1 tracks/56/loop_wrap = true tracks/56/keys = { @@ -415,7 +415,7 @@ tracks/56/keys = { tracks/57/type = "value" tracks/57/imported = false tracks/57/enabled = true -tracks/57/path = NodePath("SpawnDebris:amount_ratio") +tracks/57/path = NodePath("SpawnEffects/MajorSpawnDebris:amount_ratio") tracks/57/interp = 1 tracks/57/loop_wrap = true tracks/57/keys = { @@ -436,3 +436,134 @@ tracks/58/keys = { "update": 0, "values": [1.0] } +tracks/59/type = "value" +tracks/59/imported = false +tracks/59/enabled = true +tracks/59/path = NodePath("SpawnEffects/MinorSpawnDebris:emitting") +tracks/59/interp = 1 +tracks/59/loop_wrap = true +tracks/59/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/60/type = "value" +tracks/60/imported = false +tracks/60/enabled = true +tracks/60/path = NodePath("SpawnEffects/MinorSpawnDebris:amount_ratio") +tracks/60/interp = 1 +tracks/60/loop_wrap = true +tracks/60/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/61/type = "value" +tracks/61/imported = false +tracks/61/enabled = true +tracks/61/path = NodePath("SpawnEffects/GurgleEffect:emitting") +tracks/61/interp = 1 +tracks/61/loop_wrap = true +tracks/61/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/62/type = "value" +tracks/62/imported = false +tracks/62/enabled = true +tracks/62/path = NodePath("SpawnEffects/GurgleEffect:amount_ratio") +tracks/62/interp = 1 +tracks/62/loop_wrap = true +tracks/62/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/63/type = "value" +tracks/63/imported = false +tracks/63/enabled = true +tracks/63/path = NodePath("SpawnEffects/SpawnRift:visible") +tracks/63/interp = 1 +tracks/63/loop_wrap = true +tracks/63/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/64/type = "value" +tracks/64/imported = false +tracks/64/enabled = true +tracks/64/path = NodePath("SpawnEffects/SpawnRift:mesh:material:shader_parameter/emission_strength") +tracks/64/interp = 1 +tracks/64/loop_wrap = true +tracks/64/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [1.0] +} +tracks/65/type = "bezier" +tracks/65/imported = false +tracks/65/enabled = true +tracks/65/path = NodePath("SpawnEffects/SpawnRift:mesh:material:shader_parameter/progress") +tracks/65/interp = 1 +tracks/65/loop_wrap = true +tracks/65/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/66/type = "value" +tracks/66/imported = false +tracks/66/enabled = true +tracks/66/path = NodePath("SpawnEffects/GodParticlesFast:emitting") +tracks/66/interp = 1 +tracks/66/loop_wrap = true +tracks/66/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/67/type = "value" +tracks/67/imported = false +tracks/67/enabled = true +tracks/67/path = NodePath("SpawnEffects/GodParticlesFaster:emitting") +tracks/67/interp = 1 +tracks/67/loop_wrap = true +tracks/67/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/68/type = "value" +tracks/68/imported = false +tracks/68/enabled = true +tracks/68/path = NodePath("SpawnEffects/GodParticlesFast:amount_ratio") +tracks/68/interp = 1 +tracks/68/loop_wrap = true +tracks/68/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} +tracks/69/type = "value" +tracks/69/imported = false +tracks/69/enabled = true +tracks/69/path = NodePath("SpawnEffects/GodParticlesFaster:amount_ratio") +tracks/69/interp = 1 +tracks/69/loop_wrap = true +tracks/69/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} diff --git a/assets/npc/shambler/animations/anim_emerge_floor.tres b/assets/npc/shambler/animations/anim_emerge_floor.tres index e65d259..2bbcbb1 100644 --- a/assets/npc/shambler/animations/anim_emerge_floor.tres +++ b/assets/npc/shambler/animations/anim_emerge_floor.tres @@ -426,7 +426,7 @@ tracks/56/keys = { tracks/57/type = "value" tracks/57/imported = false tracks/57/enabled = true -tracks/57/path = NodePath("SpawnDebris:emitting") +tracks/57/path = NodePath("SpawnEffects/MajorSpawnDebris:emitting") tracks/57/interp = 1 tracks/57/loop_wrap = true tracks/57/keys = { @@ -438,7 +438,7 @@ tracks/57/keys = { tracks/58/type = "value" tracks/58/imported = false tracks/58/enabled = true -tracks/58/path = NodePath("SpawnDebris:amount_ratio") +tracks/58/path = NodePath("SpawnEffects/MajorSpawnDebris:amount_ratio") tracks/58/interp = 1 tracks/58/loop_wrap = true tracks/58/keys = { @@ -459,14 +459,3 @@ tracks/59/keys = { "update": 0, "values": [0.0, 1.0] } -tracks/60/type = "method" -tracks/60/imported = false -tracks/60/enabled = true -tracks/60/path = NodePath("SpawnDebris") -tracks/60/interp = 1 -tracks/60/loop_wrap = true -tracks/60/keys = { -"times": PackedFloat32Array(), -"transitions": PackedFloat32Array(), -"values": [] -} diff --git a/assets/npc/shambler/animations/library.res b/assets/npc/shambler/animations/library.res new file mode 100644 index 0000000..a8cc7a8 --- /dev/null +++ b/assets/npc/shambler/animations/library.res @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430d8d45e0c1c8aff029b71f4de14245468625b25ca9a149bd39dc70057afa4a +size 51623 diff --git a/src/shaders/glowing_rift.gdshader b/src/shaders/glowing_rift.gdshader new file mode 100644 index 0000000..9370c8b --- /dev/null +++ b/src/shaders/glowing_rift.gdshader @@ -0,0 +1,51 @@ +// -*- mode: glsl -*- +// The RIFT is OPENING... +shader_type spatial; +render_mode depth_prepass_alpha; + +group_uniforms rift_shape; +uniform sampler2D rift_shape; +uniform sampler2D rift_scale; +uniform sampler2D rift_bias; +uniform float shape_scale = 1.0; +uniform float rift_speed = 1.0; +uniform float progress: hint_range(0.0, 1.0) = 1.0; +uniform float smoothing = 0.02; + +group_uniforms rift_offset; +uniform sampler2D rift_offset; +uniform sampler2D offset_scale; + +group_uniforms rift_color; +uniform vec3 color: source_color = vec3(1.0); +uniform vec3 emission: source_color = vec3(1.0); +uniform float emission_strength = 1.0; + +group_uniforms rift_noise; +uniform sampler2D rift_noise; +uniform float rift_noise_scale = 1.0; +uniform float rift_noise_bias = 0.0; +uniform float rift_noise_speed = 0.1; + + +void fragment() { + // Rift shape + float i_time = TIME * rift_speed; + vec2 uva = vec2(UV.x * 0.5, i_time); + vec2 uvb = vec2(UV.x * 0.5 + 0.5, i_time); + + float scale = texture(rift_scale, UV).r * shape_scale * progress; + float bias = texture(rift_bias, UV).r * progress; + float limit_a = 0.0 - texture(rift_shape, uva).r * scale - bias; + float limit_b = 0.0 + texture(rift_shape, uvb).r * scale + bias; + + float offset = texture(offset_scale, UV).r * (texture(rift_offset, vec2(UV.x, i_time)).r - 0.5); + float p = UV.y - 0.5 + offset; + ALPHA = smoothstep(limit_a, limit_a + smoothing, p) * (1.0 - smoothstep(limit_b - smoothing, limit_b, p)); + + // Rift emissive noise + float noise = texture(rift_noise, vec2(UV.x, TIME * rift_noise_speed)).r; + noise = noise * noise * noise * rift_noise_scale + rift_noise_bias; + EMISSION = emission * noise * emission_strength; + ALBEDO = color; +} diff --git a/src/shaders/glowing_rift.gdshader.uid b/src/shaders/glowing_rift.gdshader.uid new file mode 100644 index 0000000..30163d7 --- /dev/null +++ b/src/shaders/glowing_rift.gdshader.uid @@ -0,0 +1 @@ +uid://dawp27i0m5arl diff --git a/src/util/scene_tools.gd b/src/util/scene_tools.gd index 4983397..422aa4c 100644 --- a/src/util/scene_tools.gd +++ b/src/util/scene_tools.gd @@ -1,8 +1,8 @@ class_name SceneTools extends Object ## Tools for specialized operations in a scene -# const RAY_MASK := 0b00100101 -const RAY_MASK := 1 +const RAY_MASK := 0b00100101 +# const RAY_MASK := 1 ## Get the Node3D in the given group which is spatially closest to the target node. diff --git a/src/world/grunk_beast/beast_spawner/transient_floor_spawner.tscn b/src/world/grunk_beast/beast_spawner/transient_floor_spawner.tscn index cd504d3..b3aae01 100644 --- a/src/world/grunk_beast/beast_spawner/transient_floor_spawner.tscn +++ b/src/world/grunk_beast/beast_spawner/transient_floor_spawner.tscn @@ -31,7 +31,8 @@ collision_mask = 128 shape = SubResource("CylinderShape3D_42oks") debug_color = Color(0.980392, 0.854902, 0, 1) -[node name="MeshInstance3D" type="MeshInstance3D" parent="Area3D"] +[node name="DEBUGMesh" type="MeshInstance3D" parent="Area3D"] +visible = false mesh = SubResource("CylinderMesh_e5rh0") [node name="SpawnExclusionArea" type="Area3D" parent="."] diff --git a/src/world/grunk_beast/grunk_beast.tscn b/src/world/grunk_beast/grunk_beast.tscn index a7c9b72..9d35ab5 100644 --- a/src/world/grunk_beast/grunk_beast.tscn +++ b/src/world/grunk_beast/grunk_beast.tscn @@ -384,7 +384,7 @@ metadata/_custom_type_script = "uid://cg016dbe7gs1x" script = ExtResource("11_mbqcc") mean_time = 4.0 st_dev_time = 0.6 -wait_time = 4.58991 +wait_time = 3.52478 metadata/_custom_type_script = "uid://beyk2xtbjrsg4" [node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"] @@ -478,7 +478,7 @@ metadata/_custom_type_script = "uid://bogt3htgqe12s" script = ExtResource("11_mbqcc") mean_time = 9.0 st_dev_time = 1.0 -wait_time = 10.1664 +wait_time = 9.52982 metadata/_custom_type_script = "uid://beyk2xtbjrsg4" [node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"] diff --git a/src/world/grunk_beast/shambler/shambler.gd b/src/world/grunk_beast/shambler/shambler.gd index 9f3d4ed..a1f3830 100644 --- a/src/world/grunk_beast/shambler/shambler.gd +++ b/src/world/grunk_beast/shambler/shambler.gd @@ -36,7 +36,7 @@ func _ready() -> void: func _start_player_rumble() -> void: # TODO this is awful. Integrate PhantomCamera or similar if Player.instance: - create_tween().tween_property(Player.instance, "camera_rumble", SPAWN_RUMBLE, 0.1) + create_tween().tween_property(Player.instance, "camera_rumble", SPAWN_RUMBLE, 1.2) func _end_player_rumble() -> void: diff --git a/src/world/grunk_beast/shambler/shambler.tscn b/src/world/grunk_beast/shambler/shambler.tscn index f470d88..a24f87b 100644 --- a/src/world/grunk_beast/shambler/shambler.tscn +++ b/src/world/grunk_beast/shambler/shambler.tscn @@ -1,10 +1,13 @@ -[gd_scene load_steps=26 format=3 uid="uid://brrd33217oplv"] +[gd_scene load_steps=49 format=3 uid="uid://brrd33217oplv"] [ext_resource type="PackedScene" uid="uid://cyqr1ojnddyk0" path="res://assets/npc/shambler/shambler.gltf" id="1_uiw1a"] [ext_resource type="Material" uid="uid://7xrgrvf3lymv" path="res://assets/npc/shambler/shambler.material" id="2_nayyt"] [ext_resource type="Script" uid="uid://bueq1q2qva7gs" path="res://src/world/grunk_beast/shambler/shambler.gd" id="2_s7rwx"] [ext_resource type="Script" uid="uid://cuqr167olan8n" path="res://src/effects/particle_spawner.gd" id="4_elp7k"] [ext_resource type="PackedScene" uid="uid://cf1o33mq2hxjx" path="res://src/effects/grunk_debris.tscn" id="5_lqi3b"] +[ext_resource type="AnimationLibrary" uid="uid://vvljqrvmuim4" path="res://assets/npc/shambler/animations/library.res" id="6_lqi3b"] +[ext_resource type="Material" uid="uid://dcj6vk6q845b4" path="res://assets/materials/grunk_bubble.material" id="7_xyfav"] +[ext_resource type="Material" uid="uid://pr3m1n71vtof" path="res://assets/materials/taste_the_god_particle_you_filthy_rat.tres" id="8_6bdpa"] [sub_resource type="Curve" id="Curve_s7rwx"] _limits = [0.0, 1.0, 0.0, 10.0] @@ -34,7 +37,7 @@ point_count = 3 [sub_resource type="AnimationNodeTimeScale" id="AnimationNodeTimeScale_s7rwx"] [sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_vmxrd"] -animation = &"emerge_floor" +animation = &"extended_spawn" [sub_resource type="AnimationNodeOneShot" id="AnimationNodeOneShot_elp7k"] @@ -100,6 +103,154 @@ collision_mode = 1 collision_friction = 1.0 collision_bounce = 0.0 +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_lqi3b"] +lifetime_randomness = 0.71 +emission_shape = 6 +emission_ring_axis = Vector3(0, 1, 0) +emission_ring_height = 0.0 +emission_ring_radius = 1.0 +emission_ring_inner_radius = 0.0 +emission_ring_cone_angle = 90.0 +direction = Vector3(0, 1, 0) +spread = 20.0 +initial_velocity_min = 1.0 +initial_velocity_max = 2.0 +attractor_interaction_enabled = false +scale_curve = SubResource("CurveTexture_fabmb") +collision_mode = 1 +collision_friction = 1.0 +collision_bounce = 0.0 + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_s7rwx"] +vertex_color_use_as_albedo = true +albedo_color = Color(0, 0.101961, 0.301961, 1) +emission_enabled = true +emission = Color(0, 0.101961, 0.301961, 1) +emission_energy_multiplier = 0.6 +texture_filter = 0 +billboard_mode = 3 +billboard_keep_scale = true +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="QuadMesh" id="QuadMesh_xlxrx"] +material = SubResource("StandardMaterial3D_s7rwx") +size = Vector2(0.05, 0.05) + +[sub_resource type="Curve" id="Curve_o6myl"] +_data = [Vector2(0, 0), 0.0, 2.58321, 0, 0, Vector2(1, 1), -0.403345, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="Curve" id="Curve_xlxrx"] +_data = [Vector2(0, 0), 0.0, 1.63477, 0, 0, Vector2(0.837947, 1), -1.37504, -1.37504, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="Curve" id="Curve_6bdpa"] +_data = [Vector2(0, 0), 0.0, 3.72349, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveXYZTexture" id="CurveXYZTexture_cp8sw"] +curve_x = SubResource("Curve_o6myl") +curve_y = SubResource("Curve_xlxrx") +curve_z = SubResource("Curve_6bdpa") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_xyfav"] +lifetime_randomness = 0.2 +emission_shape = 6 +emission_ring_axis = Vector3(0, 1, 0) +emission_ring_height = 0.01 +emission_ring_radius = 1.2 +emission_ring_inner_radius = 1.0 +emission_ring_cone_angle = 90.0 +gravity = Vector3(0, 0, 0) +attractor_interaction_enabled = false +scale_min = 0.2 +scale_curve = SubResource("CurveXYZTexture_cp8sw") +sub_emitter_mode = 2 +sub_emitter_amount_at_end = 2 + +[sub_resource type="SphereMesh" id="SphereMesh_o6myl"] +material = ExtResource("7_xyfav") +radius = 0.4 +height = 0.8 +radial_segments = 32 +rings = 8 + +[sub_resource type="Curve" id="Curve_cp8sw"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(0.250213, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), -2.47309, 0.0, 0, 0] +point_count = 3 + +[sub_resource type="CurveTexture" id="CurveTexture_c7m4v"] +curve = SubResource("Curve_cp8sw") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_vru5p"] +lifetime_randomness = 0.4 +emission_shape_offset = Vector3(0, 1, 0) +direction = Vector3(0, 1, 0) +spread = 60.0 +initial_velocity_min = 1.0 +initial_velocity_max = 2.0 +gravity = Vector3(0, -1, 0) +damping_min = 8.0 +damping_max = 8.0 +attractor_interaction_enabled = false +scale_curve = SubResource("CurveTexture_c7m4v") + +[sub_resource type="QuadMesh" id="QuadMesh_10hsf"] +material = SubResource("StandardMaterial3D_s7rwx") +size = Vector2(0.05, 0.05) + +[sub_resource type="PlaneMesh" id="PlaneMesh_xlxrx"] +material = ExtResource("8_6bdpa") + +[sub_resource type="Curve" id="Curve_c7m4v"] +_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_vru5p"] +curve = SubResource("Curve_c7m4v") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_10hsf"] +emission_shape = 3 +emission_box_extents = Vector3(0.01, 0.01, 0.6) +direction = Vector3(0, 1, 0) +spread = 5.0 +initial_velocity_min = 10.0 +initial_velocity_max = 10.0 +gravity = Vector3(0, 0, 0) +attractor_interaction_enabled = false +alpha_curve = SubResource("CurveTexture_vru5p") + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6bdpa"] +transparency = 3 +alpha_hash_scale = 1.0 +alpha_antialiasing_mode = 0 +vertex_color_use_as_albedo = true +emission_enabled = true +emission = Color(0.25098, 0.878431, 1, 1) +emission_energy_multiplier = 16.0 +billboard_mode = 3 +billboard_keep_scale = true +particles_anim_h_frames = 1 +particles_anim_v_frames = 1 +particles_anim_loop = false + +[sub_resource type="QuadMesh" id="QuadMesh_6bdpa"] +material = SubResource("StandardMaterial3D_6bdpa") +size = Vector2(0.02, 0.02) + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_0bwtl"] +emission_shape = 3 +emission_box_extents = Vector3(0.01, 0.01, 0.6) +direction = Vector3(0, 1, 0) +spread = 5.0 +initial_velocity_min = 30.0 +initial_velocity_max = 30.0 +gravity = Vector3(0, 0, 0) +attractor_interaction_enabled = false +alpha_curve = SubResource("CurveTexture_vru5p") + [node name="Shambler" instance=ExtResource("1_uiw1a")] script = ExtResource("2_s7rwx") idle_blend_curve = SubResource("Curve_s7rwx") @@ -203,10 +354,14 @@ metadata/_custom_type_script = "uid://cuqr167olan8n" [node name="AnimationPlayer" parent="." index="1"] unique_name_in_owner = true +libraries = { +&"": ExtResource("6_lqi3b") +} [node name="AnimationTree" type="AnimationTree" parent="." index="2"] unique_name_in_owner = true root_node = NodePath("%AnimationTree/..") +callback_mode_discrete = 0 tree_root = SubResource("AnimationNodeBlendTree_nayyt") anim_player = NodePath("../AnimationPlayer") parameters/anim_scale/scale = 1.0 @@ -216,7 +371,7 @@ parameters/emerge_floor_trigger/request = 0 parameters/front_scale/scale = 1.0 parameters/idle_blend/blend_amount = 0.0 parameters/rear_add/add_amount = 0.0 -parameters/rear_scale/scale = 1.0 +parameters/rear_scale/scale = 2.0 [node name="DefaultLookTargetPivot" type="Node3D" parent="." index="3"] unique_name_in_owner = true @@ -236,12 +391,69 @@ mesh = SubResource("SphereMesh_s7rwx") transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.25, 0) size = Vector3(6, 0.5, 6) -[node name="SpawnDebris" parent="." index="5" instance=ExtResource("5_lqi3b")] +[node name="SpawnEffects" type="Node3D" parent="." index="5"] +process_mode = 3 + +[node name="MajorSpawnDebris" parent="SpawnEffects" index="0" instance=ExtResource("5_lqi3b")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0) amount = 64 amount_ratio = 0.0 one_shot = false preprocess = 0.0 -explosiveness = 0.1 +explosiveness = 0.0 randomness = 0.43 process_material = SubResource("ParticleProcessMaterial_elp7k") + +[node name="MinorSpawnDebris" parent="SpawnEffects" index="1" instance=ExtResource("5_lqi3b")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0) +amount = 64 +amount_ratio = 0.0 +one_shot = false +preprocess = 0.0 +explosiveness = 0.0 +randomness = 0.43 +process_material = SubResource("ParticleProcessMaterial_lqi3b") +draw_pass_1 = SubResource("QuadMesh_xlxrx") + +[node name="GurgleEffect" type="GPUParticles3D" parent="SpawnEffects" index="2"] +emitting = false +amount = 12 +amount_ratio = 0.0 +sub_emitter = NodePath("GurglePop") +lifetime = 0.4 +process_material = SubResource("ParticleProcessMaterial_xyfav") +draw_pass_1 = SubResource("SphereMesh_o6myl") + +[node name="GurglePop" type="GPUParticles3D" parent="SpawnEffects/GurgleEffect" index="0"] +amount = 64 +lifetime = 0.2 +preprocess = 1.13 +explosiveness = 1.0 +process_material = SubResource("ParticleProcessMaterial_vru5p") +draw_pass_1 = SubResource("QuadMesh_10hsf") + +[node name="SpawnRift" type="MeshInstance3D" parent="SpawnEffects" index="3"] +transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.01, 0) +visible = false +mesh = SubResource("PlaneMesh_xlxrx") +skeleton = NodePath("../..") + +[node name="GodParticlesFast" type="GPUParticles3D" parent="SpawnEffects" index="4"] +emitting = false +amount = 64 +amount_ratio = 0.0 +lifetime = 0.4 +fixed_fps = 60 +interpolate = false +process_material = SubResource("ParticleProcessMaterial_10hsf") +draw_pass_1 = SubResource("QuadMesh_6bdpa") + +[node name="GodParticlesFaster" type="GPUParticles3D" parent="SpawnEffects" index="5"] +emitting = false +amount = 32 +amount_ratio = 0.0 +lifetime = 0.2 +fixed_fps = 60 +interpolate = false +process_material = SubResource("ParticleProcessMaterial_0bwtl") +draw_pass_1 = SubResource("QuadMesh_6bdpa")