From 1987e52c627143ff33c8217afadbebdbd1433576 Mon Sep 17 00:00:00 2001 From: Rob Kelly Date: Mon, 21 Apr 2025 15:21:31 -0600 Subject: [PATCH] Relay reacts to damage --- assets/materials/gunk.material | Bin 924 -> 931 bytes assets/materials/gunk_bright.material | Bin 859 -> 867 bytes levels/ghost_ship/ghost_ship_level.tscn | 376 +++++++++--------- src/ui/quaker.gd | 33 ++ src/ui/quaker.gd.uid | 1 + .../slutch_beast/face_nodule.material | Bin 1142 -> 1157 bytes .../grunk_beast/slutch_beast/slutch.material | Bin 1090 -> 1100 bytes .../slutch_beast/slutch_nodule.material | Bin 1094 -> 1104 bytes src/world/mechanics/alarm/gunk_alarm.tscn | 144 +++---- src/world/mechanics/relay/gunk_relay.gd | 9 + src/world/mechanics/relay/gunk_relay.tscn | 29 +- 11 files changed, 324 insertions(+), 268 deletions(-) create mode 100644 src/ui/quaker.gd create mode 100644 src/ui/quaker.gd.uid diff --git a/assets/materials/gunk.material b/assets/materials/gunk.material index 4ec5adc4fa53f92edf29ddfe4259ccde1a034ff4..6b3a99a39f1738e619eaa0ffc82e2b05f3e0d26f 100644 GIT binary patch literal 931 zcmV;U16=%4Q$s@n000005C8y>2mkKRtHA#u zf&1ZAd8pR^k|i;<)6V~o{~ZDT9J`iOgWI#*Ekkf{i@6S+ZC{nH zByH20Jqu@-F?Uz!N$aW|dA!L^IjyqcoSc$e$seuqUb!*KU0N>7%^S3kdm+E~Lhf~n zds^BmE%z)(s^ENOrQ8N>+$OKCv1(S%e~=otCj6XJrmh_`hfr!T&qh=tK*hObliIU! zVcT_zK}5cnEw|O0>yr5})8%l40LfprZEe?Wz87*!91ndVhyNZpCMJv&EHe60v+kAI zdtEY@?amK?cz=OsFrYPH#NWpR{=3qA3RaSHFUX%MRcOlOylE2c&J@dXL&Ew_}f(s zBU1IGFVk522~|v#ADFB1>lq7MJXJW9q=H3HmqwBub!YzliLplCT4W#NBb|xdNrr%y z_53%qBN?^;H}Pwfx<3-$5e-39B4+O_)VNoqoPPB)IJ4OK>JegaEw)4A34O^fRcbqf z+LHD$G!e*8>d2B|t3X9KV-W)Acg@3pxLSM72N_CRzrUv8i2Gi-v%;}bx)O!vh~t`+ zOqxf?%)mmigEpcG53B3sF8Pb^&k}jq5)>=KAvdPz+W3xuSc&aFpG0x>ndv;9UcypS FLqnvrxflQd literal 924 zcmV;N17rMBQ$s@n000005C8yT2mk0Z`;a;ik#{G1Z+7fPn%v}e{Z-lt`B3d3+E|05kRoj>*@{!iu44CJ z|1b>4m;z@2YXEcrw#thAH*ofe@=aT5+qiQbq%2LY!S7``9}{?6=Altzh{__PU>wm} zwAlSG;HZ9@gRjc}1jG9+SThmM{}31#O-P+nr>-8MzZWwYS2H3BusXNQn7JAkwp*t- z1mt_!YO~TiirmuaHghxt=F2^VE}-6OAs#ZJ8&fgkdx}Iysk0g38RvpMqlYmyn#Jq#C(etX3-% zAr7klD&Zr;2Izlq%~<_7xLAz-SD2v@Lc`#CHYiG}1*O&MN5Q4~Hv|Q_&`@Iq36LMb zf$RT(jgE~JHzvY*bVU!skYLP-`Q^2c_!KjGiGfTSjYcF4n8^j6E@V^_Wt)ki1-Wh2 zW(W<*9tWE3PxI#2>3#K>v~5`a`S&_Uvih=h`%GE-0~Oq&7e`26_g%o1>c zpJ1ajzpDH1wpqP@IbMvgFyaa0hf7U1+6gY7`=I*C6mPPk%3vG*PMCluq`U1yxIsDH zivjCu4mEFB7{W7r<9w+@Se9Gejxeh1=){L5EoK-bhW9shrMKYSD>t|TUU^S5a*I_hi>v(yxmK~r zvm2Zu-?>*mTAzd$m2WTZXfOX4{hx52>qLwiA4L7X;}S;R3ODd#P|Nvm;Qxom9~rhM zr_SUn;nff2TFvHiZ3tZ{a-H;g3}tsM*DO=ZI?4^+Zn3U>(paICi;A3sze!_v+&1MT zmx{OU1{rd%O=+G`kGj4Kp}7I3bpggh!A`xr+7T z!BIpfq8JlvMu~?1mJf-wB9%&|_!(G2sUHjIK?*C&0Z;-VbI5E565u2?kU_(Y5s^@Z%1os+?FLZ)fGqeyg1P8; zzUVYY$U{)CKsVviPF6semI?9x3x$67ANr{OO+T~DzAM(gK_--NqxR+&4!@rWey15} z2V4>WHn>>L2E(a!S*lgTUM3@zUABlEKI6sQ^eiT=<6k7xvb3%c3m`Hc$dyQi=(q*}9pz6|f`4o-!syBBb&iwRhCK z^GMoF`0nfwZ`Y7wBG}976Ha}LM}D0xJ{5)#(c-pDsI{kAH7%Yr0j$^LKX(*2px2M tr3iQiORPFal)&@yM);l$yn>dOF#s91#Hb$1OQKTr6z)&Te4SELLqq+3pzQzv literal 859 zcmV-h1El;?Q$s@n000005C8!B2LJ#=0{{RhwJ-f(`UcGz0G8u-L=dqg9iSjYP=uml zsu?H<3yFi>NBSZFFsqwwWJ_AIH(49IBucW|3kvKGEDL#S&LUiHmyE|)|2F_Mw;w3$ zj{^%^3R?hO0BHdK3w%pN`7);SKY>?{rgqm{NpcO|y)t_{;Fb3@qqbKqVR1|UKVGU= z#M$gkknddBj#eihq|zcZfhlI(5E1JC9hWci*5`rudZn8G2>uK3_ygB2 zcJ0VlKG^QGL3pWRbGbH!jTE^~3LQVW!POdNmavU-1h-kNC!aLdC*`7|Mshc4?2g%% ze56wG*3BM2&569bpXMrRb82K7S#!MC40+We!`_Z`YT0AQR8klsGU9u=in6UyW~TOw z`42MlVnv1%I4~oQO-*EiPm-#x+x;FKX0*Ij)P|60A#uP+@u|NsQCE<=s#tpYBjxm3 zl6)@bN!}AJL9v<9p|HHje zdTea?p@HH*1CRs%4S=lwAP><012A30BnxXe^`Q1gIQ75ACFBQQ@(dhy(qpgcbJA}mo0^H7EUA}q|igiCy0TgbXb z38nBQjC^1iB23xn(~R+%g5JzF=%G float: + return exp(randfn(0, intensity)) + + +func rand_scale() -> Vector3: + if uniform: + return Vector3.ONE * rand_exp() + if correlated: + var v := Vector3(rand_exp(), _buffer.x, _buffer.y) + _buffer.x = _buffer.y + _buffer.y = _buffer.z + _buffer.z = v.x + return v + return Vector3(rand_exp(), rand_exp(), rand_exp()) + + +func _process(_delta: float) -> void: + scale = rand_scale() diff --git a/src/ui/quaker.gd.uid b/src/ui/quaker.gd.uid new file mode 100644 index 0000000..580f663 --- /dev/null +++ b/src/ui/quaker.gd.uid @@ -0,0 +1 @@ +uid://ccs67guidw4w4 diff --git a/src/world/grunk_beast/slutch_beast/face_nodule.material b/src/world/grunk_beast/slutch_beast/face_nodule.material index 8de322ac8f1660ac04213ab28d2cf580e221c65a..d46f4fb192d54240e8e000f3bba3510c2ee77025 100644 GIT binary patch literal 1157 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 Syo@SEqv6Etq~9e{Q$s@@>J)VV literal 1090 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 W(K8-*@?on0jfR&A^SX9YQ$s@v$Pxnp literal 1094 zcmV-M1iAZCQ$s@n000005C8zp3IG5u1ONaiwJ-f(%?TwT0A{Y1LGail9poh;pG_&k zmuI~ehFaWo)Z^krzM`+5?dP;oFg~NWMy!hgp6BXl5+o_@E_+pwnS-C z#pFEv2XMHrxh{=nx1${Y7yKU(;14}-S~!dHQTi;Fc?}KKT-n;*$zV2OqwQYh|rXrCH6oq4B#dQM!%#wG? zT|XArH={djLOkRQ8A7B3==8U6;^Ya7EKGv@ z95(zJVqX5A1hfdErCmV(T>`lLf2sM0;pJo;wR%BHRk|GNigK`JNoUIGibSOXN?w9f zgo0HlAmegFmCcmXT)QH+V-tYTs8O|2Xl7<4NkKs}98dxwrKXM>62OBg45Ee-VC?E1S3ZaPPOY>jx(yLSPtv)&UohKM}LH-I~dY6ys$=}@2`+4w(n}Y$) zpWFMuS9f7>+PhqC^Oq$y0W`5C6F#31Wl-DegxFh#(J~217B1oXJIJ>%u5tNf3_P|W2@Ijs)fCvKB>zOl6 zbq^F|g%XYFFODKKbD8zI;w(tuPZ_k-Rh(?MakuAa$cjgZh=)9&3oIUkriU8O9xYxBY%HX7H>kh}tnauYAzULKVs-bg#km6_B=k~J1LCiSPvw#Nvn`2EW+p+2Rr#>RDh!4 M&Xhr2J5p0aL)0x2asU7T diff --git a/src/world/mechanics/alarm/gunk_alarm.tscn b/src/world/mechanics/alarm/gunk_alarm.tscn index 1da2c0d..9d5d0f9 100644 --- a/src/world/mechanics/alarm/gunk_alarm.tscn +++ b/src/world/mechanics/alarm/gunk_alarm.tscn @@ -69,6 +69,78 @@ _data = { &"trigger": SubResource("Animation_6vdvf") } +[sub_resource type="Animation" id="Animation_bknln"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission_energy_multiplier") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.02] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(0.25098, 0.878431, 1, 1)] +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Rumbler3D/AlarmMesh:scale:x") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Rumbler3D/AlarmMesh:scale:y") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Rumbler3D/AlarmMesh:scale:z") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Rumbler3D:intensity") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + [sub_resource type="Animation" id="Animation_vokcn"] resource_name = "pulse" length = 9.0 @@ -156,78 +228,6 @@ tracks/6/keys = { "values": [0.0, 0.002, 0.0] } -[sub_resource type="Animation" id="Animation_bknln"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission_energy_multiplier") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0.02] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Rumbler3D/AlarmMesh/Armature/Skeleton3D/Bud:surface_material_override/1:emission") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(0.25098, 0.878431, 1, 1)] -} -tracks/2/type = "bezier" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Rumbler3D/AlarmMesh:scale:x") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/3/type = "bezier" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("Rumbler3D/AlarmMesh:scale:y") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/4/type = "bezier" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("Rumbler3D/AlarmMesh:scale:z") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(1, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/5/type = "value" -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/path = NodePath("Rumbler3D:intensity") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [0.0] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_bknln"] _data = { &"RESET": SubResource("Animation_bknln"), diff --git a/src/world/mechanics/relay/gunk_relay.gd b/src/world/mechanics/relay/gunk_relay.gd index b8d0302..1918fec 100644 --- a/src/world/mechanics/relay/gunk_relay.gd +++ b/src/world/mechanics/relay/gunk_relay.gd @@ -8,6 +8,9 @@ signal triggered ## Emitted when `pulse` is called, after a short delay. signal pulsed +const MAX_RUMBLE := 0.01 +const MAX_QUAKE := 0.2 + @export_category("Editor Tools") @export var quick_connect_to: SignalNode: set = _editor_connect @@ -19,6 +22,9 @@ var _busy := false var _editor_arrows: Dictionary[SignalNode, EditorArrow] = {} +@onready var rumbler_3d: Rumbler3D = %Rumbler3D +@onready var quaker: Quaker = %Quaker + @onready var animation_player: AnimationPlayer = %AnimationPlayer @onready var trigger_delay: Timer = %TriggerDelay @onready var pulse_delay: Timer = %PulseDelay @@ -83,6 +89,9 @@ func _editor_connect(node: SignalNode) -> void: func _process(delta: float) -> void: super._process(delta) if not Engine.is_editor_hint(): + # Non-editor process logic + rumbler_3d.intensity = pct_damage() * MAX_RUMBLE + quaker.intensity = pct_damage() * MAX_QUAKE return # Check connections diff --git a/src/world/mechanics/relay/gunk_relay.tscn b/src/world/mechanics/relay/gunk_relay.tscn index aca8bb4..7fab607 100644 --- a/src/world/mechanics/relay/gunk_relay.tscn +++ b/src/world/mechanics/relay/gunk_relay.tscn @@ -1,8 +1,10 @@ -[gd_scene load_steps=11 format=3 uid="uid://bttust5ohud8e"] +[gd_scene load_steps=13 format=3 uid="uid://bttust5ohud8e"] [ext_resource type="Script" uid="uid://1oup50bp0pwd" path="res://src/world/mechanics/relay/gunk_relay.gd" id="1_rdv5j"] [ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_ipm58"] [ext_resource type="PackedScene" uid="uid://ghdsr1b4hpr8" path="res://src/util/editor_arrow/editor_arrow.tscn" id="2_nfkbq"] +[ext_resource type="Script" uid="uid://b274q7uvn0cvp" path="res://src/ui/rumbler_3d.gd" id="3_mb114"] +[ext_resource type="Script" uid="uid://ccs67guidw4w4" path="res://src/ui/quaker.gd" id="5_peqs8"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_gk1l0"] resource_local_to_scene = true @@ -25,7 +27,7 @@ length = 0.001 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("MeshInstance3D:mesh:material:emission_energy_multiplier") +tracks/0/path = NodePath("Rumbler3D/Quaker/MeshInstance3D:mesh:material:emission_energy_multiplier") tracks/0/interp = 1 tracks/0/loop_wrap = true tracks/0/keys = { @@ -37,7 +39,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("MeshInstance3D:mesh:material:emission") +tracks/1/path = NodePath("Rumbler3D/Quaker/MeshInstance3D:mesh:material:emission") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -53,7 +55,7 @@ step = 0.1 tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("MeshInstance3D:mesh:material:emission_energy_multiplier") +tracks/0/path = NodePath("Rumbler3D/Quaker/MeshInstance3D:mesh:material:emission_energy_multiplier") tracks/0/interp = 2 tracks/0/loop_wrap = true tracks/0/keys = { @@ -65,7 +67,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("MeshInstance3D:mesh:material:emission") +tracks/1/path = NodePath("Rumbler3D/Quaker/MeshInstance3D:mesh:material:emission") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -80,7 +82,7 @@ resource_name = "trigger" tracks/0/type = "value" tracks/0/imported = false tracks/0/enabled = true -tracks/0/path = NodePath("MeshInstance3D:mesh:material:emission_energy_multiplier") +tracks/0/path = NodePath("Rumbler3D/Quaker/MeshInstance3D:mesh:material:emission_energy_multiplier") tracks/0/interp = 2 tracks/0/loop_wrap = true tracks/0/keys = { @@ -92,7 +94,7 @@ tracks/0/keys = { tracks/1/type = "value" tracks/1/imported = false tracks/1/enabled = true -tracks/1/path = NodePath("MeshInstance3D:mesh:material:emission") +tracks/1/path = NodePath("Rumbler3D/Quaker/MeshInstance3D:mesh:material:emission") tracks/1/interp = 1 tracks/1/loop_wrap = true tracks/1/keys = { @@ -117,9 +119,20 @@ editor_arrow_scene = ExtResource("2_nfkbq") value = 800.0 splatter_scale = 0.2 -[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +[node name="Rumbler3D" type="Node3D" parent="."] +unique_name_in_owner = true +script = ExtResource("3_mb114") +metadata/_custom_type_script = "uid://b274q7uvn0cvp" + +[node name="Quaker" type="Node3D" parent="Rumbler3D"] +unique_name_in_owner = true +script = ExtResource("5_peqs8") +metadata/_custom_type_script = "uid://ccs67guidw4w4" + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Rumbler3D/Quaker"] gi_mode = 2 mesh = SubResource("SphereMesh_hsruj") +skeleton = NodePath("../../..") [node name="CollisionShape3D" type="CollisionShape3D" parent="."] shape = SubResource("SphereShape3D_gk1l0")