From 755c691d25e973f595fab518e58a676fb6792347 Mon Sep 17 00:00:00 2001 From: Laurent Tourte <77699054+Harpokhrat@users.noreply.github.com> Date: Mon, 22 Jan 2024 14:53:13 +0100 Subject: [PATCH] right wrong fx + frog improvements --- assets/sfx/sfx_game_over_lose.mp3 | Bin 0 -> 24949 bytes assets/sfx/sfx_game_over_lose.mp3.import | 19 ++ assets/sfx/sfx_game_over_win.mp3 | Bin 0 -> 27109 bytes assets/sfx/sfx_game_over_win.mp3.import | 19 ++ assets/sfx/sfx_right.mp3 | Bin 0 -> 6589 bytes assets/sfx/sfx_right.mp3.import | 19 ++ assets/sfx/sfx_wrong.mp3 | Bin 0 -> 3709 bytes assets/sfx/sfx_wrong.mp3.import | 19 ++ assets/vfx/cross.png | Bin 0 -> 5548 bytes assets/vfx/cross.png.import | 34 +++ sources/minigames/frog/frog.gd | 29 +++ sources/minigames/frog/frog.tscn | 44 ++++ sources/minigames/frog/frog_minigame.gd | 7 + sources/minigames/frog/frog_minigame.tscn | 65 +++++- sources/minigames/frog/lilypad.gd | 12 + sources/minigames/frog/lilypad.tscn | 8 +- sources/minigames/frog/lilypad_track.gd | 8 + sources/minigames/frog/lilypad_track.tscn | 6 +- sources/minigames/frog/river.gdshader | 10 + sources/utils/fx/highlight.tscn | 32 +-- sources/utils/fx/right.gd | 14 ++ sources/utils/fx/right.tscn | 262 ++++++++++++++++++++++ sources/utils/fx/wrong.gd | 14 ++ sources/utils/fx/wrong.tscn | 164 ++++++++++++++ 24 files changed, 760 insertions(+), 25 deletions(-) create mode 100644 assets/sfx/sfx_game_over_lose.mp3 create mode 100644 assets/sfx/sfx_game_over_lose.mp3.import create mode 100644 assets/sfx/sfx_game_over_win.mp3 create mode 100644 assets/sfx/sfx_game_over_win.mp3.import create mode 100644 assets/sfx/sfx_right.mp3 create mode 100644 assets/sfx/sfx_right.mp3.import create mode 100644 assets/sfx/sfx_wrong.mp3 create mode 100644 assets/sfx/sfx_wrong.mp3.import create mode 100644 assets/vfx/cross.png create mode 100644 assets/vfx/cross.png.import create mode 100644 sources/minigames/frog/river.gdshader create mode 100644 sources/utils/fx/right.gd create mode 100644 sources/utils/fx/right.tscn create mode 100644 sources/utils/fx/wrong.gd create mode 100644 sources/utils/fx/wrong.tscn diff --git a/assets/sfx/sfx_game_over_lose.mp3 b/assets/sfx/sfx_game_over_lose.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..9a4e48700139c84d38d553fafdeb9e4a553846a0 GIT binary patch literal 24949 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 Z;;qU~4;&JoMjHwIzr_EKrvAU2{ud%hZTbKJ literal 0 HcmV?d00001 diff --git a/assets/sfx/sfx_game_over_lose.mp3.import b/assets/sfx/sfx_game_over_lose.mp3.import new file mode 100644 index 00000000..eb29c7d1 --- /dev/null +++ b/assets/sfx/sfx_game_over_lose.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://bpxwbk7r6rtfi" +path="res://.godot/imported/sfx_game_over_lose.mp3-f717ab837e7673ddd99e34ffedbf110d.mp3str" + +[deps] + +source_file="res://assets/sfx/sfx_game_over_lose.mp3" +dest_files=["res://.godot/imported/sfx_game_over_lose.mp3-f717ab837e7673ddd99e34ffedbf110d.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sfx/sfx_game_over_win.mp3 b/assets/sfx/sfx_game_over_win.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..01bd457bac3c9f0769cd96cc1893d217075d3f4c GIT binary patch literal 27109 zcmdpdWmlX{(B=&8!QI{6-JRg>!QDd$Hn_V(aCd?Rhv4oK2*KUmnT6-w{jg{M!S*>l z_nEpsOkH(VS9e#{$VqZQ0zQU4prV+P6vv1D zP__R@AuLi#$cq2~aQs6LXFST8|MTMilPCCj{@wlvoIveH0Dz&l>hPZLwmr%&*kAq6cT+{4r@-LndVw(ky+9;m@ccgbZ5AOFJrty2i6`!` zD)w8rw;n-Vr>!a5(>UulNBY;54&uofSH@5w?meGS;vaGe_%@46P$}1f@8e; zVz)JSjAt`g{lf~~YE>V+{q6kxGP4#Vtl2d2| z)oFlHxPfl+wqM8M-wf6Ku&0EW1fy&%BZef#+vaw?6&T?b1FMcOh2!t*3zu19F`RS# zW^R9?%pes-B?g7r1;$cX2;fN(3eu1jWnUU%piS;AOkeP6F zkc2;Ps7gjBkWq-)Mj+bV?dTJz@+lp@_&y+$5Ud&KsDu`EvQ?;g|GPe4_jp=GvRhT! zL*-UappzE^gFC=cpq03VE1S~kfxZC=O4wxcRLG2its?u+v?y+ht*Ok+UM3N65%3Rl z^klqSt=r%(CtnI!h!LILR#feP@6Q6Fo}6TmgJVBB`vEGblTb>uc3M=R+)pb9(nW#V3qkQx!@C!kOYzPqJXVX#}MYQIybdWoO z$KY~N0rJO5mgwq$eudMP$JfEfi%LQZP;I)I*dPm7S|P{N#Czkr35e?zb)v9A9!onf4Nj zsSd$!{|r{MMJm7H{rj{1twWR|0#P%aNz3GrEsO1I96`)?j6mJ#2W@sio577pTymq7 zU>YZA{lH1jqx)r6rdg^BV$D0@94^W>Ni6yY6|ZJCpmq^^du#v$VdcK7rSZp}u;}1AN;V z8AD+B=F$y^LI{P04@ho=bwL&{kuT^4uE+eUXkE2DpF0?F=_YNWJ|`^^@|o$6HwkHC zf)Rphfb~9`wR!WIuafPX+AUEj#=cc@a4K1KcT|uBOvEz+-zajY9y?+mYV&i6Y!qxx* zS;@#3(rgo!g{fLUT8|-35VhzWfH{0ac(64jLt7Vrf2XC2a8syWhbiYE{bL$DF94rc z#+5;Afee|MnV_Ara%u|r)kqA(&VDN7LM@sWL!usWsqX}1R%9D`rsGSqZ7f1kFsNJ05ad4P`6 zC}VZEs6A1rQ=2~#Dj576+)MZUASuQ?M6Y~JAnA8U36E;tr~YqI?0GvG?i z+7d+A(6?lJS28GCQi!KCC{hNb+{nCd3fW1f5B%Kk7hVS6f@~0iS;33|3i;8lgw{J$ zxaX)w+;$X0$m<&|%!xTMi9Zop52|1f&Y{ zuwYa)h|jJ2bF7?kuEV4iB1pb&-S~$2XDE2RdZnR43dbmce5&#Lw0ozS zoI9P)niD0$1hxotdH_Lu24#-}{wGqL@RLh(N;)KbIS>Z_!jS=)P8 zZ~vOs^lN5Zj0U2zwdW0Z{PH7Qv0vd$L0J4buG{UEd#dTxj0aW%z^DkoYQ&_*mY38O z+ewP0!f4)VQ>5rx%ORkaXuUxD>2IDfoX(WZ7Sp{MtqCVNI}z3v_nRoJzQV7jm|b{S z@7|{6(0{>rPT!VI|8iwGF>Vr@y2S%-Ukp0z+DIfew}zv1h7Mf21GkJM3A_>oIFgU3 z6g8S@YH|o`PR}(TR}1is9(qIRJ&eh6F(a5^j!8U!!;BIkpG%~N4b8vhmv5?+71J-? z2<+p_h<)Pw0*~mV;kW8G{^36tpilXpZYNaA1*!Fwd}&P&xX_gc;FY`m>KuB8BN`3u zZB?;F)8H3VC0*9^C=a?XWt~rGD>A#s;Q1#>IZaN$NdgG7oL}pCC-AGhWJr7=<8E1F z$))6io+#zi+G(n2wH>weN(5x;Y%ayazTM^x525vb1HOI+*)E0d zsPI?w^_%m_dwR`ZQv!oh^#<@Vr{SQpylB;@{($v;SEmBW;;$yKwz9x)1lIXZgtf6V zMS)zyuE7aM(IHQ0ZgdVUqd~2meb-cUIcMDLaPO^5VKvRoF}Y>ajB4_cq;<}cBq>}3qE$gYWvGzxFKyxg6# z**c|j!TVsROx0GLhg}5~R)LTYymtWPODn4rCgonw@>9WEZf92`idb+sxbSx6yQz+Z zCn-Qg9D9@w#ENtoO$ii4Qt`)<%!tVjouH%lm*i|G5&KK;MI8quv%>zS@;%2l4sCCH zn8nvgZLspy;jyb3oO)~Hvs^g>UX(7o4IaO%J5t}4J%0P*zkBq^S?;L;q?!Sd*3b9Y z9As!HZxIWUY4UL10~n^KBTk7IR&*o6AoOU(xshhDj|*{b4KiH~(x=LN?s3_YbVE|!a}80T@G3S8 zSH)J;@Gkrpyv32(kVJ1F-RaA9vyUaF z_?^xzMEG2p>{~gdG?lfT|2^+Bh!7OcGUTzQ#0|8*JRrLPSJ z9MSZ|&c`DPFa$VEKxjg|pdrUn1<=X`4$sd(&UBroo;zf*q<8r&AYGH3BDPLc#I!<_ z;9@#DiJEc={PCP{mwxVW6db#rX&h|&Xb@olI{>mupYm0)b9HB zAd5l)pa5v8|M3MtELOHVp_1>7E` zMbMJCh0=ex$TnOHy?%hb=gFzxdF@pqI1W6K@<7Uii3)53h|=hHN`G9a zJiwv+R463HIRsYWwo5jJ_BdPp#TX2xc$4x|G18CgjvAsj%ER|ZC40-?IKRO~c`03i z@1@6u*)sv`0ugG*c=bx;CkQImjc=;@0ea%B79bSDwR#Q;1D)Ro&YIr=*6VRg^uI?2 zUx{y7e=Ja+)Yy_W(j6P8_=B%SY8Mnd-ZU%b(Mh5aFWtaV-FnZ`dQ#kI9t!}?9-(xQ zU{DM%LgMdFuGY?R4U_gf%^QY>lQCAvYcj50TUA9S{QnFV!|l`1>AZ^x%sq(i`zH4| zxaEuohYsOBYZ|kkUk?I3zId@#vP4XI@@hZN{dhgEWwE?xysNb$g-sLR zhD9u9mjx$pxIL}?h6ws3qx>U)gDR;h`BhO8&&%%2c4$+&WnYSH8o*&zNM|qrf^?hhxd|GHf{PP)v ztf~CYuUxM)-HC5-xsLuz?I=V$X*|@fM_@Qqz`f+%Wv3ZZE3%HvV^@GBH*!n_8_{hj zOi^t@*fj)uB2T!&RQ2oFgXoD&`BoTbw#o|0(OHQ6&vm*&FRwQ6&2`H&rl03kwZ=#b zY74D?pY0PXmN@``X#*gf4xl=6%cDx+yj8PChA(fU!$WGHTwrw8WMS6rLr*y4mS_?C zn=Fy-CF9_K(fJnzSAy?E4(*?)gE&|OA4^kY>VvOS5W=B=&3)&G$(V)#MEMadWO)T@S_Kk_`nB!U-=Jhu)#NNqxIiIp^v8P! z-T|xVm>n~|;()0u?W<22a_3u^W?0wPh1$f=MU%5r*G)I?J`YZLD);lhY7-h z;xH&H!7<94JCEa*9eG<@*)-(<&4!}-KvLi(1?HyUK4)bzs&m&KuDX)`X_=H zz4qnDuVFtPUd*1-z@O&MAJ&zRS5dEHtJnN(uwYop10&h|%r5gLNl6%Mn^6*eY*rSgY=u&HhGdGsoF;7y zF4Oc@*kMaC=w%sHkk`Qf>3W_YiJ2g>0+KKc zZ4k;6t5Zt}+=?u$YbQm{>=-`q-hdDn1guUNuT5*qkNDCma7i0FqfSy?#m1~(=JS%0 z=X5VL;Fz4Mp8AJqe@=e=adt3o76-$X zo?$AHTkyiB?X2X26(8&ft1XPGtJ?ls!Ol(1XRyzz@@jHPo`JoVzisID+}}89_QE5# zLT@Mx4btv~`+*jy*Y7WV{&;(xHV>*C5I}%l6<`wt;$kyT?aZ1Qv*UA{kN!ktG4)x(IimT{dL**&Ct#pW)v|BB#$+ zaM?75_?+ek*W@;-r(gHoqF)E}_KCpjH;*#8mofceZ?(-7n@S7d!PvjWx1t=Z@458| zz(}3mJgE+(MmpMn1TFfG{T84Ri=3{IXgad>RUa;li8~u_nmtC#*1V1om0u_4GzusY z*|e3QN1t3r9!+gU7x0t3AYavk79pra&q6=hX7qpSZ^L4C!dVL}EiQ#N^<&NWUX-LZM+bTM4juD7gG*QqKn&#cmTJ<0#Y@PaY1ENYMd+$3nrW8|GTo;Z0pf?MAtGxryFHLH?FV{xAOR z3mF9(VZ}|dTnU;rzi`qTULKY&OB1BGIcfjqPJdl!?v4PnY{OprYpPd8C>tDK3Kh9{2~dD)XwCneKQj(J?6*x*RT8& z{{Pw^?I^|a0*JaAZs!Qof6&4rQFGf09k88>C=W4Qce~^`-G0BE;_Obl)jSTh;if<} zUMZ}jfjl7y7^ar$$D!oplgs!lelIC^3mv*Ls^X|G>y|qEI1fZM`oMbuK-pB%-p{-1 z?JcqO4a#EQ=pblR`l=RD%3smD3HdKY8Kf6Ib|3+X` zQ^q$!GFv6V%LMHWJ~F#N;2qJo5-W_h))J0JOBhgq-sB`!KkaosQW#bGv#f3 zo%^iZb}SF3lNmK4Qm1tDK_&@l) z0--c1o9!3<-1Me8?zkbrRr5EF{$8VWPlo9M_N^yjXc&I!&5jQMIO#Ujq0#nIc+5>a zOBGvw8Mf_7$u8WcbWCat3ULApNs@dcIO_W`B1Jwe<4a16R63ly(^S9rYdGCeL-%g@ zQyLBil8_a~L9=ydwUuBYU*sG6jVEHt=e{1f6xhf;Mb78bcrV1O+^gKSrZII) zi1#v|EtzS6TGc#~K7Bz6JnwN6cg~L(x5mV;c1T6!HI@F@(b-5_Xt-@)tbmt%;0O9K0b}zL z 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 ZJ@7a09pH~rkN|8C@@NbI+W(*N{|{Py80i22 literal 0 HcmV?d00001 diff --git a/assets/sfx/sfx_game_over_win.mp3.import b/assets/sfx/sfx_game_over_win.mp3.import new file mode 100644 index 00000000..836caa80 --- /dev/null +++ b/assets/sfx/sfx_game_over_win.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://dyckrr2uht3p6" +path="res://.godot/imported/sfx_game_over_win.mp3-9cb0b1b226fef69f748c9009dd90e32d.mp3str" + +[deps] + +source_file="res://assets/sfx/sfx_game_over_win.mp3" +dest_files=["res://.godot/imported/sfx_game_over_win.mp3-9cb0b1b226fef69f748c9009dd90e32d.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sfx/sfx_right.mp3 b/assets/sfx/sfx_right.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..a8df1a70615d0b8bd3e8e12dc5bbb4273844e9bd GIT binary patch literal 6589 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 literal 0 HcmV?d00001 diff --git a/assets/sfx/sfx_right.mp3.import b/assets/sfx/sfx_right.mp3.import new file mode 100644 index 00000000..6cdaff13 --- /dev/null +++ b/assets/sfx/sfx_right.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://s0cxaexjq5l2" +path="res://.godot/imported/sfx_right.mp3-a07cd051aeafb7fae04c4e1e31c2891c.mp3str" + +[deps] + +source_file="res://assets/sfx/sfx_right.mp3" +dest_files=["res://.godot/imported/sfx_right.mp3-a07cd051aeafb7fae04c4e1e31c2891c.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/sfx/sfx_wrong.mp3 b/assets/sfx/sfx_wrong.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d672f87d0f0bec00c9aa2a6bba16e37b44e19a6e GIT binary patch literal 3709 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 literal 0 HcmV?d00001 diff --git a/assets/sfx/sfx_wrong.mp3.import b/assets/sfx/sfx_wrong.mp3.import new file mode 100644 index 00000000..7127733f --- /dev/null +++ b/assets/sfx/sfx_wrong.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://2imrfcmquc7d" +path="res://.godot/imported/sfx_wrong.mp3-905fabb1947e91dd6908053ea413db85.mp3str" + +[deps] + +source_file="res://assets/sfx/sfx_wrong.mp3" +dest_files=["res://.godot/imported/sfx_wrong.mp3-905fabb1947e91dd6908053ea413db85.mp3str"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/vfx/cross.png b/assets/vfx/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..80f9117f8dd004af2b3b043c01336a4d31f7e94e GIT binary patch literal 5548 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 aB&PRtLgM8~XIt?56>@j+a&B-WrT-t_d;DDh literal 0 HcmV?d00001 diff --git a/assets/vfx/cross.png.import b/assets/vfx/cross.png.import new file mode 100644 index 00000000..6523353c --- /dev/null +++ b/assets/vfx/cross.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bqw5oyt88v05u" +path="res://.godot/imported/cross.png-2366f14ab7afd691863602d33c39a13e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/vfx/cross.png" +dest_files=["res://.godot/imported/cross.png-2366f14ab7afd691863602d33c39a13e.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/sources/minigames/frog/frog.gd b/sources/minigames/frog/frog.gd index ce07f710..a6d64e17 100644 --- a/sources/minigames/frog/frog.gd +++ b/sources/minigames/frog/frog.gd @@ -4,8 +4,25 @@ signal drowned() signal jumped() @onready var animation_player: = $AnimationPlayer +@onready var audio_player: = $AudioStreamPlayer2D @onready var sprite: = $Sprite +const jump_sounds: = [ + preload("res://assets/minigames/frog/audio/frog_jump_random_01.mp3"), + preload("res://assets/minigames/frog/audio/frog_jump_random_02.mp3"), + preload("res://assets/minigames/frog/audio/frog_jump_random_03.mp3"), + preload("res://assets/minigames/frog/audio/frog_jump_random_04.mp3"), + preload("res://assets/minigames/frog/audio/frog_jump_random_05.mp3"), +] + +const frog_sounds: = [ + preload("res://assets/minigames/frog/audio/frog_random_01.mp3"), + preload("res://assets/minigames/frog/audio/frog_random_02.mp3"), + preload("res://assets/minigames/frog/audio/frog_random_03.mp3"), + preload("res://assets/minigames/frog/audio/frog_random_04.mp3"), + preload("res://assets/minigames/frog/audio/frog_random_05.mp3"), +] + func jump_to(destination: Vector2) -> void: animation_player.play("jump") @@ -18,6 +35,18 @@ func drown() -> void: animation_player.play("drown") +func _play_jump_sound() -> void: + audio_player.stream = jump_sounds[randi() % jump_sounds.size()] + audio_player.play() + + +func _play_frog_sound() -> void: + var r: = randf() + if r <= 0.75: + audio_player.stream = frog_sounds[randi() % frog_sounds.size()] + audio_player.play() + + func _on_animation_player_animation_finished(animation_name: StringName) -> void: if animation_name == "drown": drowned.emit() diff --git a/sources/minigames/frog/frog.tscn b/sources/minigames/frog/frog.tscn index cddc03c5..846ca3e7 100644 --- a/sources/minigames/frog/frog.tscn +++ b/sources/minigames/frog/frog.tscn @@ -102,6 +102,20 @@ tracks/1/keys = { "update": 0, "values": [0.0] } +tracks/2/type = "method" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"_play_frog_sound" +}] +} [sub_resource type="Animation" id="Animation_0dpgo"] resource_name = "idle_side_1" @@ -158,6 +172,20 @@ tracks/1/keys = { "update": 0, "values": [0.0] } +tracks/2/type = "method" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"_play_frog_sound" +}] +} [sub_resource type="Animation" id="Animation_ir23o"] resource_name = "jump" @@ -187,6 +215,20 @@ tracks/1/keys = { "update": 0, "values": [0.0] } +tracks/2/type = "method" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath(".") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"values": [{ +"args": [], +"method": &"_play_jump_sound" +}] +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_at27w"] _data = { @@ -210,6 +252,8 @@ libraries = { } autoplay = "idle_front_1" +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] + [node name="Sprite" type="Sprite2D" parent="."] material = ExtResource("2_i6km5") scale = Vector2(1.5, 1.5) diff --git a/sources/minigames/frog/frog_minigame.gd b/sources/minigames/frog/frog_minigame.gd index 617a77a9..2ce2ac82 100644 --- a/sources/minigames/frog/frog_minigame.gd +++ b/sources/minigames/frog/frog_minigame.gd @@ -124,6 +124,8 @@ func _on_track_lilypad_in_center(lilypad: Control, track: Control) -> void: await frog.jumped if lilypad.is_distractor: + await lilypad.wrong() + lilypad.disappear() frog.drown() await frog.drowned @@ -148,6 +150,11 @@ func _on_track_lilypad_in_center(lilypad: Control, track: Control) -> void: frog.jump_to(end.global_position) await frog.jumped + for other_track in lilypad_tracks_container.get_children(): + if other_track != track: + other_track.right() + await track.right() + frog.jump_to(frog_despawn_point.global_position) await frog.jumped diff --git a/sources/minigames/frog/frog_minigame.tscn b/sources/minigames/frog/frog_minigame.tscn index 144774ce..c3ef5c3c 100644 --- a/sources/minigames/frog/frog_minigame.tscn +++ b/sources/minigames/frog/frog_minigame.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=17 format=3 uid="uid://dl5wx8l0awoi0"] +[gd_scene load_steps=22 format=3 uid="uid://dl5wx8l0awoi0"] [ext_resource type="PackedScene" uid="uid://8awe4usnucyv" path="res://sources/minigames/base/base_minigame.tscn" id="1_ng5er"] [ext_resource type="Script" path="res://sources/minigames/frog/frog_minigame.gd" id="2_0xg3r"] @@ -14,9 +14,52 @@ [ext_resource type="Texture2D" uid="uid://dg4n6nv84tl3u" path="res://assets/minigames/frog/graphics/grass_right.png" id="6_bvdcd"] [ext_resource type="Texture2D" uid="uid://ct24yoo1efipg" path="res://assets/minigames/frog/graphics/reed_01.png" id="7_161vn"] [ext_resource type="Texture2D" uid="uid://djg2gkxxjgqwx" path="res://assets/minigames/frog/graphics/reed_02.png" id="8_ps7uv"] +[ext_resource type="Shader" path="res://sources/minigames/frog/river.gdshader" id="8_uf2wy"] [ext_resource type="Texture2D" uid="uid://b51kxs3qm3wiw" path="res://assets/minigames/frog/graphics/rock.png" id="13_lifwj"] [ext_resource type="PackedScene" uid="uid://bloyucpsbvpx8" path="res://sources/minigames/frog/frog.tscn" id="13_o6mls"] +[sub_resource type="Animation" id="Animation_rgirw"] +resource_name = "flow" +length = 2.0 +loop_mode = 1 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("River:material:shader_parameter/y_offset") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 2), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [0.0, 1.0] +} + +[sub_resource type="Animation" id="Animation_utuls"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("River:material:shader_parameter/y_offset") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_c1hhy"] +_data = { +"RESET": SubResource("Animation_utuls"), +"flow": SubResource("Animation_rgirw") +} + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_doj3f"] +shader = ExtResource("8_uf2wy") +shader_parameter/y_offset = 0.0 + [node name="FrogMinigame" instance=ExtResource("1_ng5er")] script = ExtResource("2_0xg3r") difficulty = 1 @@ -40,7 +83,15 @@ grow_horizontal = 2 grow_vertical = 2 mouse_filter = 2 -[node name="River" type="TextureRect" parent="GameRoot/Background" index="0"] +[node name="AnimationPlayer" type="AnimationPlayer" parent="GameRoot/Background" index="0"] +libraries = { +"": SubResource("AnimationLibrary_c1hhy") +} +autoplay = "flow" + +[node name="River" type="TextureRect" parent="GameRoot/Background" index="1"] +texture_repeat = 2 +material = SubResource("ShaderMaterial_doj3f") layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -50,7 +101,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("2_wg03r") -[node name="LeftSand" type="TextureRect" parent="GameRoot/Background" index="1"] +[node name="LeftSand" type="TextureRect" parent="GameRoot/Background" index="2"] layout_mode = 1 anchors_preset = 9 anchor_bottom = 1.0 @@ -59,7 +110,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("3_eaixk") -[node name="LeftGrass" type="TextureRect" parent="GameRoot/Background" index="2"] +[node name="LeftGrass" type="TextureRect" parent="GameRoot/Background" index="3"] layout_mode = 1 anchors_preset = 9 anchor_bottom = 1.0 @@ -68,7 +119,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("4_mvhry") -[node name="RightSand" type="TextureRect" parent="GameRoot/Background" index="3"] +[node name="RightSand" type="TextureRect" parent="GameRoot/Background" index="4"] layout_mode = 1 anchors_preset = 11 anchor_left = 1.0 @@ -80,7 +131,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("5_6ofrr") -[node name="RightGrass" type="TextureRect" parent="GameRoot/Background" index="4"] +[node name="RightGrass" type="TextureRect" parent="GameRoot/Background" index="5"] layout_mode = 1 anchors_preset = 11 anchor_left = 1.0 @@ -92,7 +143,7 @@ grow_vertical = 2 mouse_filter = 2 texture = ExtResource("6_bvdcd") -[node name="Rocks" type="Control" parent="GameRoot/Background" index="5"] +[node name="Rocks" type="Control" parent="GameRoot/Background" index="6"] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 diff --git a/sources/minigames/frog/lilypad.gd b/sources/minigames/frog/lilypad.gd index 61a7b12d..ad30fe64 100644 --- a/sources/minigames/frog/lilypad.gd +++ b/sources/minigames/frog/lilypad.gd @@ -7,6 +7,8 @@ signal disappeared() @onready var button: = $TextureButton @onready var label: = %Label @onready var highlight_fx: = $HighlightFX +@onready var right_fx: = $RightFX +@onready var wrong_fx: = $WrongFX var stimulus: Dictionary: set = _set_stimulus @@ -24,6 +26,16 @@ func highlight() -> void: highlight_fx.play() +func right() -> void: + right_fx.play() + await right_fx.finished + + +func wrong() -> void: + wrong_fx.play() + await wrong_fx.finished + + func stop_highlight() -> void: if not is_distractor: highlight_fx.stop() diff --git a/sources/minigames/frog/lilypad.tscn b/sources/minigames/frog/lilypad.tscn index e6bf507f..de0edada 100644 --- a/sources/minigames/frog/lilypad.tscn +++ b/sources/minigames/frog/lilypad.tscn @@ -1,10 +1,12 @@ -[gd_scene load_steps=9 format=3 uid="uid://bkswcqcmf7a0r"] +[gd_scene load_steps=11 format=3 uid="uid://bkswcqcmf7a0r"] [ext_resource type="Material" uid="uid://cbs2x6nv6jl63" path="res://sources/minigames/frog/lilypad_material.tres" id="1_pbo2v"] [ext_resource type="Script" path="res://sources/minigames/frog/lilypad.gd" id="2_pdqed"] [ext_resource type="Texture2D" uid="uid://bl4csvpvhsgqh" path="res://assets/minigames/frog/graphics/lilypad_enabled.png" id="3_1ueu4"] [ext_resource type="Texture2D" uid="uid://bafwfqkof2og7" path="res://assets/minigames/frog/graphics/lilypad_disabled.png" id="4_0e8ya"] [ext_resource type="PackedScene" uid="uid://cge0uyn30tcpv" path="res://sources/utils/fx/highlight.tscn" id="5_1llgv"] +[ext_resource type="PackedScene" uid="uid://cn2rw06pltyiu" path="res://sources/utils/fx/right.tscn" id="6_wslmk"] +[ext_resource type="PackedScene" uid="uid://dlmbxcgiv8tpr" path="res://sources/utils/fx/wrong.tscn" id="7_241b6"] [sub_resource type="Animation" id="Animation_852sr"] length = 0.001 @@ -88,5 +90,9 @@ text = "A" horizontal_alignment = 1 vertical_alignment = 1 +[node name="RightFX" parent="." instance=ExtResource("6_wslmk")] + +[node name="WrongFX" parent="." instance=ExtResource("7_241b6")] + [connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"] [connection signal="pressed" from="TextureButton" to="." method="_on_texture_button_pressed"] diff --git a/sources/minigames/frog/lilypad_track.gd b/sources/minigames/frog/lilypad_track.gd index 405f4396..f9364dc0 100644 --- a/sources/minigames/frog/lilypad_track.gd +++ b/sources/minigames/frog/lilypad_track.gd @@ -2,6 +2,7 @@ extends Control signal lilypad_in_center(lilypad: Control) +@onready var audio_player: = $AudioStreamPlayer2D @onready var spawn_timer: = $SpawnTimer const lilypad_class: = preload("res://sources/minigames/frog/lilypad.tscn") @@ -54,6 +55,11 @@ func stop() -> void: ready_to_spawn = false +func right() -> void: + for lilypad in lilypads: + await lilypad.right() + + func _spawn_lilypad() -> void: var lilypad: = lilypad_class.instantiate() lilypads.append(lilypad) @@ -130,6 +136,8 @@ func _set_stimuli(value: Array) -> void: func _on_lilypad_pressed(lilypad: Control) -> void: + audio_player.play() + ready_to_spawn = false for tween in tweens: diff --git a/sources/minigames/frog/lilypad_track.tscn b/sources/minigames/frog/lilypad_track.tscn index efe9b4ad..b2ef9b6b 100644 --- a/sources/minigames/frog/lilypad_track.tscn +++ b/sources/minigames/frog/lilypad_track.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=2 format=3 uid="uid://byqqa5hk1hmv5"] +[gd_scene load_steps=3 format=3 uid="uid://byqqa5hk1hmv5"] [ext_resource type="Script" path="res://sources/minigames/frog/lilypad_track.gd" id="1_0nn04"] +[ext_resource type="AudioStream" uid="uid://b2idirdf5bdrl" path="res://assets/minigames/frog/audio/frog_taplily.mp3" id="2_8qte0"] [node name="LilypadTrack" type="Control"] layout_mode = 3 @@ -13,6 +14,9 @@ size_flags_horizontal = 3 size_flags_vertical = 3 script = ExtResource("1_0nn04") +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("2_8qte0") + [node name="SpawnTimer" type="Timer" parent="."] one_shot = true autostart = true diff --git a/sources/minigames/frog/river.gdshader b/sources/minigames/frog/river.gdshader new file mode 100644 index 00000000..9e83bd5f --- /dev/null +++ b/sources/minigames/frog/river.gdshader @@ -0,0 +1,10 @@ +shader_type canvas_item; + +uniform float y_offset: hint_range(0.0, 1.0) = 0.0; + + +void fragment() +{ + vec2 uv = UV - vec2(0.0, y_offset); + COLOR = texture(TEXTURE, uv); +} diff --git a/sources/utils/fx/highlight.tscn b/sources/utils/fx/highlight.tscn index 89caaca2..2596776d 100644 --- a/sources/utils/fx/highlight.tscn +++ b/sources/utils/fx/highlight.tscn @@ -4,7 +4,7 @@ [ext_resource type="Script" path="res://sources/utils/fx/highlight.gd" id="1_uj18s"] [ext_resource type="Texture2D" uid="uid://c161hyri7yhme" path="res://assets/vfx/fx_01.png" id="2_3sm6p"] -[sub_resource type="Animation" id="Animation_enql5"] +[sub_resource type="Animation" id="Animation_mfajw"] length = 0.001 tracks/0/type = "bezier" tracks/0/imported = false @@ -73,9 +73,9 @@ tracks/5/keys = { "times": PackedFloat32Array(0) } -[sub_resource type="Animation" id="Animation_upcal"] -resource_name = "highlight" -loop_mode = 1 +[sub_resource type="Animation" id="Animation_ud7pl"] +resource_name = "win" +length = 3.0 tracks/0/type = "bezier" tracks/0/imported = false tracks/0/enabled = true @@ -85,7 +85,7 @@ tracks/0/loop_wrap = true tracks/0/keys = { "handle_modes": PackedInt32Array(0, 0), "points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 1) +"times": PackedFloat32Array(0, 3) } tracks/1/type = "bezier" tracks/1/imported = false @@ -96,7 +96,7 @@ tracks/1/loop_wrap = true tracks/1/keys = { "handle_modes": PackedInt32Array(0, 0), "points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 1) +"times": PackedFloat32Array(0, 3) } tracks/2/type = "bezier" tracks/2/imported = false @@ -107,7 +107,7 @@ tracks/2/loop_wrap = true tracks/2/keys = { "handle_modes": PackedInt32Array(0, 0, 0), "points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5, 1, -0.05, 0, 0.5, 0, 0, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 0.1, 1) +"times": PackedFloat32Array(0, 0.1, 3) } tracks/3/type = "bezier" tracks/3/imported = false @@ -118,7 +118,7 @@ tracks/3/loop_wrap = true tracks/3/keys = { "handle_modes": PackedInt32Array(0, 0), "points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 1) +"times": PackedFloat32Array(0, 3) } tracks/4/type = "bezier" tracks/4/imported = false @@ -129,7 +129,7 @@ tracks/4/loop_wrap = true tracks/4/keys = { "handle_modes": PackedInt32Array(0, 0), "points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 1) +"times": PackedFloat32Array(0, 3) } tracks/5/type = "bezier" tracks/5/imported = false @@ -140,10 +140,10 @@ tracks/5/loop_wrap = true tracks/5/keys = { "handle_modes": PackedInt32Array(0, 0, 0), "points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5, 1, -0.05, 0, 0.5, 0, 0, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0, 0.1, 1) +"times": PackedFloat32Array(0, 0.1, 3) } -[sub_resource type="Animation" id="Animation_ty014"] +[sub_resource type="Animation" id="Animation_7q7mv"] resource_name = "stop" length = 0.1 tracks/0/type = "bezier" @@ -213,11 +213,11 @@ tracks/5/keys = { "times": PackedFloat32Array(0) } -[sub_resource type="AnimationLibrary" id="AnimationLibrary_20b8s"] +[sub_resource type="AnimationLibrary" id="AnimationLibrary_g6flg"] _data = { -"RESET": SubResource("Animation_enql5"), -"highlight": SubResource("Animation_upcal"), -"stop": SubResource("Animation_ty014") +"RESET": SubResource("Animation_mfajw"), +"highlight": SubResource("Animation_ud7pl"), +"stop": SubResource("Animation_7q7mv") } [sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_3qhub"] @@ -228,7 +228,7 @@ script = ExtResource("1_uj18s") [node name="AnimationPlayer" type="AnimationPlayer" parent="."] libraries = { -"": SubResource("AnimationLibrary_20b8s") +"": SubResource("AnimationLibrary_g6flg") } [node name="Rays" type="Sprite2D" parent="."] diff --git a/sources/utils/fx/right.gd b/sources/utils/fx/right.gd new file mode 100644 index 00000000..733f1354 --- /dev/null +++ b/sources/utils/fx/right.gd @@ -0,0 +1,14 @@ +extends Node2D + +signal finished() + +@onready var animation_player: = $AnimationPlayer + + +func play() -> void: + animation_player.play("right") + + +func _on_animation_player_animation_finished(animation_name: StringName) -> void: + if animation_name == "right": + finished.emit() diff --git a/sources/utils/fx/right.tscn b/sources/utils/fx/right.tscn new file mode 100644 index 00000000..e78aa503 --- /dev/null +++ b/sources/utils/fx/right.tscn @@ -0,0 +1,262 @@ +[gd_scene load_steps=15 format=3 uid="uid://cn2rw06pltyiu"] + +[ext_resource type="Script" path="res://sources/utils/fx/right.gd" id="1_83pnv"] +[ext_resource type="AudioStream" uid="uid://s0cxaexjq5l2" path="res://assets/sfx/sfx_right.mp3" id="2_ebh1q"] +[ext_resource type="Texture2D" uid="uid://3idggaf5hbbm" path="res://assets/vfx/fx_02.png" id="3_2nlkh"] +[ext_resource type="Texture2D" uid="uid://c161hyri7yhme" path="res://assets/vfx/fx_01.png" id="4_coc6y"] +[ext_resource type="Texture2D" uid="uid://dxl5h3tqf21cv" path="res://assets/vfx/fx_03.png" id="5_300xs"] + +[sub_resource type="Animation" id="Animation_sc4ca"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Rays:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Rays:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Rays:modulate:a") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5), +"times": PackedFloat32Array(0) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Halo:scale:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5), +"times": PackedFloat32Array(0) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Halo:scale:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5), +"times": PackedFloat32Array(0) +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Halo:modulate:a") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5), +"times": PackedFloat32Array(0) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("GPUParticles2D:emitting") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("AudioStreamPlayer2D:playing") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_xu0xr"] +resource_name = "right" +length = 3.0 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Halo:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 3) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Halo:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 3) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Halo:modulate:a") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5, 1, -0.05, 0, 0.5, 0, 0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.1, 3) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Rays:scale:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 3) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Rays:scale:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 3) +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Rays:modulate:a") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5, 1, -0.05, 0, 0.5, 0, 0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.1, 3) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("GPUParticles2D:emitting") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("AudioStreamPlayer2D:playing") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_k8dqy"] +_data = { +"RESET": SubResource("Animation_sc4ca"), +"right": SubResource("Animation_xu0xr") +} + +[sub_resource type="CanvasItemMaterial" id="CanvasItemMaterial_v3jt2"] +blend_mode = 1 + +[sub_resource type="Gradient" id="Gradient_u3fxj"] +colors = PackedColorArray(1, 1, 1, 1, 1, 1, 1, 0) + +[sub_resource type="GradientTexture1D" id="GradientTexture1D_1y1y0"] +gradient = SubResource("Gradient_u3fxj") +width = 32 + +[sub_resource type="Curve" id="Curve_4x1t7"] +max_value = 0.8 +_data = [Vector2(0, 0.8), 0.0, 0.0, 0, 0, Vector2(1, 0), -2.08937, 0.0, 0, 0] +point_count = 2 + +[sub_resource type="CurveTexture" id="CurveTexture_ebpu0"] +width = 32 +curve = SubResource("Curve_4x1t7") + +[sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_dwcrn"] +particle_flag_disable_z = true +direction = Vector3(0, -1, 0) +initial_velocity_min = 100.0 +initial_velocity_max = 200.0 +angular_velocity_max = 720.0 +gravity = Vector3(0, 98, 0) +scale_curve = SubResource("CurveTexture_ebpu0") +color_ramp = SubResource("GradientTexture1D_1y1y0") + +[node name="RightFX" type="Node2D"] +script = ExtResource("1_83pnv") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_k8dqy") +} + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("2_ebh1q") + +[node name="Rays" type="Sprite2D" parent="."] +modulate = Color(1, 1, 1, 0) +material = SubResource("CanvasItemMaterial_v3jt2") +scale = Vector2(0.8, 0.8) +texture = ExtResource("3_2nlkh") + +[node name="Halo" type="Sprite2D" parent="."] +modulate = Color(1, 1, 1, 0) +scale = Vector2(0.8, 0.8) +texture = ExtResource("4_coc6y") + +[node name="GPUParticles2D" type="GPUParticles2D" parent="."] +emitting = false +amount = 16 +process_material = SubResource("ParticleProcessMaterial_dwcrn") +texture = ExtResource("5_300xs") +lifetime = 2.5 +one_shot = true +explosiveness = 1.0 + +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"] diff --git a/sources/utils/fx/wrong.gd b/sources/utils/fx/wrong.gd new file mode 100644 index 00000000..57438729 --- /dev/null +++ b/sources/utils/fx/wrong.gd @@ -0,0 +1,14 @@ +extends Node2D + +signal finished() + +@onready var animation_player: = $AnimationPlayer + + +func play() -> void: + animation_player.play("wrong") + + +func _on_animation_player_animation_finished(animation_name: StringName) -> void: + if animation_name == "wrong": + finished.emit() diff --git a/sources/utils/fx/wrong.tscn b/sources/utils/fx/wrong.tscn new file mode 100644 index 00000000..e648757d --- /dev/null +++ b/sources/utils/fx/wrong.tscn @@ -0,0 +1,164 @@ +[gd_scene load_steps=8 format=3 uid="uid://dlmbxcgiv8tpr"] + +[ext_resource type="AudioStream" uid="uid://2imrfcmquc7d" path="res://assets/sfx/sfx_wrong.mp3" id="1_qd4na"] +[ext_resource type="Script" path="res://sources/utils/fx/wrong.gd" id="1_sgjc5"] +[ext_resource type="Texture2D" uid="uid://c161hyri7yhme" path="res://assets/vfx/fx_01.png" id="3_r5miu"] +[ext_resource type="Texture2D" uid="uid://bqw5oyt88v05u" path="res://assets/vfx/cross.png" id="4_7ijh5"] + +[sub_resource type="Animation" id="Animation_tj5mf"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Halo:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Halo:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Halo:modulate:a") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5), +"times": PackedFloat32Array(0) +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("AudioStreamPlayer2D:playing") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + +[sub_resource type="Animation" id="Animation_dn23k"] +resource_name = "wrong" +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Halo:scale:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 1) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Halo:scale:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 1) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Halo:modulate:a") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5, 1, -0.05, 0, 0.5, 0, 0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.1, 1) +} +tracks/3/type = "bezier" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Cross:scale:x") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 1) +} +tracks/4/type = "bezier" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Cross:scale:y") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"handle_modes": PackedInt32Array(0, 0), +"points": PackedFloat32Array(0.8, -0.25, 0, 0.25, 0.5, 1.6, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 1) +} +tracks/5/type = "bezier" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Cross:modulate:a") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"handle_modes": PackedInt32Array(0, 0, 0), +"points": PackedFloat32Array(0, -0.25, 0, 0.05, 0.5, 1, -0.05, 0, 0.5, 0, 0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0, 0.1, 1) +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("AudioStreamPlayer2D:playing") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_c86ui"] +_data = { +"RESET": SubResource("Animation_tj5mf"), +"wrong": SubResource("Animation_dn23k") +} + +[node name="WrongFX" type="Node2D"] +script = ExtResource("1_sgjc5") + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_c86ui") +} + +[node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="."] +stream = ExtResource("1_qd4na") + +[node name="Halo" type="Sprite2D" parent="."] +modulate = Color(1, 1, 1, 0) +scale = Vector2(0.8, 0.8) +texture = ExtResource("3_r5miu") + +[node name="Cross" type="Sprite2D" parent="."] +modulate = Color(1, 1, 1, 0) +scale = Vector2(0.8, 0.8) +texture = ExtResource("4_7ijh5") + +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]