From 7d32411612dd2528002213016dc1df653c08b27a Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Sat, 6 Sep 2025 21:05:09 -0600 Subject: [PATCH] Taste the GOD PARTICLE you FILTHY RAT --- assets/materials/grunk_bubble.material | Bin 0 -> 1205 bytes ...taste_the_god_particle_you_filthy_rat.tres | 81 +++++++ .../npc/shambler/animations/anim_RESET.tres | 135 ++++++++++- .../animations/anim_emerge_floor.tres | 15 +- assets/npc/shambler/animations/library.res | 3 + src/shaders/glowing_rift.gdshader | 51 ++++ src/shaders/glowing_rift.gdshader.uid | 1 + src/util/scene_tools.gd | 4 +- .../transient_floor_spawner.tscn | 3 +- src/world/grunk_beast/grunk_beast.tscn | 4 +- src/world/grunk_beast/shambler/shambler.gd | 2 +- src/world/grunk_beast/shambler/shambler.tscn | 222 +++++++++++++++++- 12 files changed, 495 insertions(+), 26 deletions(-) create mode 100644 assets/materials/grunk_bubble.material create mode 100644 assets/materials/taste_the_god_particle_you_filthy_rat.tres create mode 100644 assets/npc/shambler/animations/library.res create mode 100644 src/shaders/glowing_rift.gdshader create mode 100644 src/shaders/glowing_rift.gdshader.uid diff --git a/assets/materials/grunk_bubble.material b/assets/materials/grunk_bubble.material new file mode 100644 index 0000000000000000000000000000000000000000..f81d6d1f09dd5b3adc3b3eb184bb3b9fd1ab1c51 GIT binary patch literal 1205 zcmV;m1WNl-Q$s@n000005C8xx3;+O~1ONaiwJ-f(D+`?@04B1cL-5!n9k^z=vU*s@ z_#2QXeGb<6sSO&Q$ah-pw??*dkiA{eZlp=F??VJ`16z~gH|e#~TJ1YZda^dX(@ViL zX%`wPfB=O6kpS-6TEgO_u}c-11q{%_!XmE89B-{qxx#Z#RdugBQ`1K;e;1>d=_9j#72NTplI z8|~%)6#ldL_NZ}S$I>eQ1zf(!TVD*`>y>8wXYjwkfIrT(xk+Pp%vRMg=v@Lp{lBqB1iX zI4s;Na_qTvM&1+EKyqg*vpD(!`01EJ}26*q{Lv z;QxVn$b@i#owx4RE} z>k<20ab*A=xuE-B4R@K4pF`sm3{HOQ)f~FEVc<%NAm+t>Jm@b4i3cS&tfCyPQ>}5+ z#rc2YQIcIC=exr{NJg1qaQ7&{VE#TqkR~>Ty|m}4z9z6iW7l1d6q&qhEE#S1M{8A# zK9FQn0Kh6R$eK7_6lRF?_CmeJsAbO{hQZ;U@?c$d6CeheS({3+N-}h)EnQ<^SG^ni zj|GmM2OW^)Qh&KnTv(V?155kaO&FxN7UY@0fwslkD)HyNY1$9!e(yEcY2r9j@UpE$ zGyoMj^roG!kdDoR&fXw2ZK-y@MCEF`8$Fj*``_18Yb6R*1H7OQGsyid13?t-c+uZ$ zAVZw>t*xQddZ$A3J!j2i^cAY&QY`qcQlB6+Maq6>3(@#IU9$3n0fOu?P#~ywMvOl? znAekzPYuei_xr^v`&5hK1pJYEu}k{8 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")