From 12c1360ae7560daea1a392484f71777cba4811a7 Mon Sep 17 00:00:00 2001 From: maru Date: Sat, 31 Jan 2026 23:24:13 +0200 Subject: [PATCH] save --- .../Characters/Enemies/stone_walk-Sheet.png | Bin 0 -> 2062 bytes .../Enemies/stone_walk-Sheet.png.import | 40 ++ .../Characters/Enemies/stump-Sheet.png | Bin 0 -> 2921 bytes .../Characters/Enemies/stump-Sheet.png.import | 40 ++ .../Characters/Enemies/stump_attack-Sheet.png | Bin 0 -> 3314 bytes .../Enemies/stump_attack-Sheet.png.import | 40 ++ .../Characters/Enemies/water-Sheet.png | Bin 0 -> 1800 bytes .../Characters/Enemies/water-Sheet.png.import | 40 ++ Assets/Sprites/Characters/Player/oniSheet.png | Bin 0 -> 976 bytes .../Characters/Player/oniSheet.png.import | 40 ++ .../Sprites/Characters/Player/tengu-Sheet.png | Bin 0 -> 1357 bytes .../Characters/Player/tengu-Sheet.png.import | 40 ++ Assets/Sprites/Environments/environment.png | Bin 4678 -> 10897 bytes Assets/Sprites/Environments/sakura.png | Bin 0 -> 2876 bytes Assets/Sprites/Environments/sakura.png.import | 40 ++ Assets/Sprites/Projectiles/blueflame.png | Bin 0 -> 737 bytes .../Sprites/Projectiles/blueflame.png.import | 40 ++ Assets/Sprites/Projectiles/flame_attack.png | Bin 0 -> 897 bytes .../Projectiles/flame_attack.png.import | 40 ++ Prefabs/Enemies/liquid.tscn | 75 ++++ Prefabs/Enemies/{rock_boi.tscn => stone.tscn} | 65 +-- Prefabs/Enemies/stump.tscn | 106 +++++ Prefabs/Projectiles/Fireball.tscn | 64 +++ Prefabs/Turrets/kitsune.tscn | 110 +++++ Prefabs/player.tscn | 83 ---- Resources/environment.tres | 86 ---- Resources/environmentSettings.tres | 8 + Resources/environmentTileMap.tres | 383 ++++++++++++++++++ Scenes/game.tscn | 279 +++++++++++-- Scripts/CameraController.cs | 69 ++++ Scripts/CameraController.cs.uid | 1 + Scripts/Common/GameController.cs | 6 +- Scripts/Common/ProjectileParent.cs | 13 + Scripts/Common/ProjectileParent.cs.uid | 1 + Scripts/Components/Health.cs | 39 ++ Scripts/Components/Health.cs.uid | 1 + Scripts/Enemies/Enemy.cs | 26 ++ Scripts/Enemies/Enemy.cs.uid | 1 + Scripts/Enemies/EnemyArea.cs | 6 + Scripts/Enemies/EnemyArea.cs.uid | 1 + Scripts/Enemies/EnemyMovement.cs | 24 +- Scripts/Enemies/EnemyPool.cs | 59 +++ Scripts/Enemies/EnemyPool.cs.uid | 1 + Scripts/Enemies/EnemySpawner.cs | 39 ++ Scripts/Enemies/EnemySpawner.cs.uid | 1 + Scripts/Helpers/Helpers.cs | 26 ++ Scripts/Helpers/Helpers.cs.uid | 1 + Scripts/Helpers/RNG.cs | 40 ++ Scripts/Helpers/RNG.cs.uid | 1 + Scripts/Projectiles/Projectile.cs | 52 +++ Scripts/Projectiles/Projectile.cs.uid | 1 + Scripts/Projectiles/ProjectilePool.cs | 39 ++ Scripts/Projectiles/ProjectilePool.cs.uid | 1 + Scripts/Turrets/Turret.cs | 56 +++ Scripts/Turrets/Turret.cs.uid | 1 + Scripts/Turrets/TurretController.cs | 8 + Scripts/Turrets/TurretController.cs.uid | 1 + project.godot | 6 + 58 files changed, 1902 insertions(+), 238 deletions(-) create mode 100644 Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png create mode 100644 Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import create mode 100644 Assets/Sprites/Characters/Enemies/stump-Sheet.png create mode 100644 Assets/Sprites/Characters/Enemies/stump-Sheet.png.import create mode 100644 Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png create mode 100644 Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import create mode 100644 Assets/Sprites/Characters/Enemies/water-Sheet.png create mode 100644 Assets/Sprites/Characters/Enemies/water-Sheet.png.import create mode 100644 Assets/Sprites/Characters/Player/oniSheet.png create mode 100644 Assets/Sprites/Characters/Player/oniSheet.png.import create mode 100644 Assets/Sprites/Characters/Player/tengu-Sheet.png create mode 100644 Assets/Sprites/Characters/Player/tengu-Sheet.png.import create mode 100644 Assets/Sprites/Environments/sakura.png create mode 100644 Assets/Sprites/Environments/sakura.png.import create mode 100644 Assets/Sprites/Projectiles/blueflame.png create mode 100644 Assets/Sprites/Projectiles/blueflame.png.import create mode 100644 Assets/Sprites/Projectiles/flame_attack.png create mode 100644 Assets/Sprites/Projectiles/flame_attack.png.import create mode 100644 Prefabs/Enemies/liquid.tscn rename Prefabs/Enemies/{rock_boi.tscn => stone.tscn} (51%) create mode 100644 Prefabs/Enemies/stump.tscn create mode 100644 Prefabs/Projectiles/Fireball.tscn create mode 100644 Prefabs/Turrets/kitsune.tscn delete mode 100644 Prefabs/player.tscn delete mode 100644 Resources/environment.tres create mode 100644 Resources/environmentSettings.tres create mode 100644 Resources/environmentTileMap.tres create mode 100644 Scripts/CameraController.cs create mode 100644 Scripts/CameraController.cs.uid create mode 100644 Scripts/Common/ProjectileParent.cs create mode 100644 Scripts/Common/ProjectileParent.cs.uid create mode 100644 Scripts/Components/Health.cs create mode 100644 Scripts/Components/Health.cs.uid create mode 100644 Scripts/Enemies/Enemy.cs create mode 100644 Scripts/Enemies/Enemy.cs.uid create mode 100644 Scripts/Enemies/EnemyArea.cs create mode 100644 Scripts/Enemies/EnemyArea.cs.uid create mode 100644 Scripts/Enemies/EnemyPool.cs create mode 100644 Scripts/Enemies/EnemyPool.cs.uid create mode 100644 Scripts/Enemies/EnemySpawner.cs create mode 100644 Scripts/Enemies/EnemySpawner.cs.uid create mode 100644 Scripts/Helpers/Helpers.cs create mode 100644 Scripts/Helpers/Helpers.cs.uid create mode 100644 Scripts/Helpers/RNG.cs create mode 100644 Scripts/Helpers/RNG.cs.uid create mode 100644 Scripts/Projectiles/Projectile.cs create mode 100644 Scripts/Projectiles/Projectile.cs.uid create mode 100644 Scripts/Projectiles/ProjectilePool.cs create mode 100644 Scripts/Projectiles/ProjectilePool.cs.uid create mode 100644 Scripts/Turrets/Turret.cs create mode 100644 Scripts/Turrets/Turret.cs.uid create mode 100644 Scripts/Turrets/TurretController.cs create mode 100644 Scripts/Turrets/TurretController.cs.uid diff --git a/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..09f2d1f5d7783921be0d39ccb74b22d986672380 GIT binary patch literal 2062 zcmeAS@N?(olHy`uVBq!ia0y~yU^u|Qz@Wgv#=yYfGNZhefq{XsILO_JVcj{ImkbQ- zCp=voLn`LHjai@f*iYPcWz+`!gb5z95B$9vRyrOKV`*s<(^ zl`1ncA4*9qQ8;kr$Ru8#qzB>=6Q+J*j(?Z&rtklebNkC`J?Gw-XZ-!inZ3p7G0bbX zUW>|J`*-%W%%aWfUPm*$`2PDttvthnU3rVmqW_5fpYr2+sUu^8(M$#goAb@9R$VaR zW%%(kdBVj<+kdnlS#QHo5_|vK@7h0qf17{(o3!yjiPh1hjSb5(XZWanu<7^9=XZ7L zzW+#`dH*E_g%1Z46wLaLCVgCG++)~tJelEv@+M7A-Ma32oj~68772rEe@SM+a-yN|a2IDTw8AA?{>XlTW}Ty#qHQ-?SQf2G2JlG*<$B8!*KNj_e zc5QNgbpOts2Z!7Fe|&!K|8Vd7ng735#a1#rYWee7bHcjU(V?L~Z@nto`Q)?Stn}2g zg>$alznRnaw5aoD&awW^n&X8NR6G;4u9Vh#Kj-V@XSn=wO80^@*It`GvasW@JL`P< z&7>dwi&hk8{M%pqyKLg0as?4t7NO&Yi!=_UZDwS!v9Wn@eSN%)OQ48~XVA%+KWq9< zrZC;!cJXalV=U|cKY!-jTA{$0F^lc8iFMD$+~7YyYxv$Ad2hjI;@kYZlH+i|E>9)5 zghP3+_CL1xP-`#RxcSEPWA>??^^O0vIb7Xkj$bh0-M)Q$O=PBt)JMMr^Yg#{{4^GE z^*sC9=kk+cgG~lJKMh0Q7s~99ny18=F#XWGcki|Zij>ZJWN&BJ#GxAVWDQq}@`tl$ z&pQ55|J1GYVd=;75{LI6`Y&4M%Fb}--n~z=SHAl9=_z;0G!@QCDi2?}zv;+${Z(q- z^N)hQ_D7O79;n*OR>V?JUcNoI>%I#^itk@{R>m!V=J)^Co~V-b=IK*b`}%)ArcRnK z>R->W7H?CONWK$jl|C!&RHc?j&h2Aqn;+Icws^O|g`xE0$yZzse*|a!>K9_%otNZ`&Z1*Guj)vG&y{MTCuO7$;F_ix8U$kNpLrSfU z`Tz6h&+lni+x-9U?{d5I`%?a`XIyao^}$U#JJxYuHmO|bsMdFE!S$(4spn5xna(~d z(5ARZqv`$cm0YoE3|&u3KPYk>D2-Lv?586&aZ8Mzp#;x|PoE}vt@Zt@FML4t)Bhho zZgl)#AHP5EKGXk|a}!(x<0j6}^|`h(XVHZ}6c$H(jv$ptd(JsYn~E?c$At5I|5*)-!7 zt7hFksNyNmrWg`>cJBIx4h*FqGC6g!OIa>l`7gw{<{z~By(N*uH8AV3blXKmCk2iMjuXO- z8V$?-J(v7>|NZx1?}fVmpFf<>&(I}s_@O|e#J;F_QQvLXvSz8tr@HKWy{jfA=#`?- zrq5(xlMR=yuw- zT}q5^n(KKO-!$7x^=i34_IsG(G^)Z@$i+P}g}<}T8RSR1xdLvh~f zrg)WxyUA>ql-}BY@V{t(T2^n$f9>m~)@_Lo{{5TBeDPZ0wq_Hi@0HtbZ_9nL>)drEOTj|G_J31L&{nFoT!`N|skN7{=-6j7v{}(v?+~@H} zi6pJXvtLTSU32l8scr6d{b99R z!kd%(dE(#v-}rO-!^s-=mHyi>2PB&Wxd_WTo|E2ww&u5B)>pw#$q@B zeD+=;eSe1C@4e&8r?=k^Vfazca3gA3t43GR^EpO;YFPuWY&ZI|On<)Cqy0SlUzqPI z`N#k5mR02A<(q;Zh$qgG{x4E?@`vxQZ}Jtl-np!-eU!n#z`)??>gTe~DWM4fUA6=a literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import new file mode 100644 index 0000000..1559886 --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cpyntpwy5riy8" +path="res://.godot/imported/stone_walk-Sheet.png-b37d03ae35e4fa21cd0b8f9fd3701b26.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/stone_walk-Sheet.png" +dest_files=["res://.godot/imported/stone_walk-Sheet.png-b37d03ae35e4fa21cd0b8f9fd3701b26.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Characters/Enemies/stump-Sheet.png b/Assets/Sprites/Characters/Enemies/stump-Sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..f1fb5b3cbd0d4909be1b48c7faa0a7ef0638f177 GIT binary patch literal 2921 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 literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Characters/Enemies/stump-Sheet.png.import b/Assets/Sprites/Characters/Enemies/stump-Sheet.png.import new file mode 100644 index 0000000..91c18fd --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/stump-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://blkxqlgahm4al" +path="res://.godot/imported/stump-Sheet.png-b806e33459c8ff66f9ee9ffc6bbbbf56.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/stump-Sheet.png" +dest_files=["res://.godot/imported/stump-Sheet.png-b806e33459c8ff66f9ee9ffc6bbbbf56.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8ac18ab365ad3fcbea83e2504bbaa2021f3d5b GIT binary patch literal 3314 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 O1B0ilpUXO@geCw9MTRo~ literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import new file mode 100644 index 0000000..1bd9dba --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://1kkgb0j1bnm7" +path="res://.godot/imported/stump_attack-Sheet.png-960eb7e1324b8df9df9cb38a637f24d4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/stump_attack-Sheet.png" +dest_files=["res://.godot/imported/stump_attack-Sheet.png-960eb7e1324b8df9df9cb38a637f24d4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Characters/Enemies/water-Sheet.png b/Assets/Sprites/Characters/Enemies/water-Sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..d95ac8756a8c87274b8c96a9bfb5170e6f77db42 GIT binary patch literal 1800 zcmeAS@N?(olHy`uVBq!ia0y~yU}#`qU{K&-V_;yorBtBGz`(#*9OUlAunp({iZ~|5j@jy!$Ws}}9zRSkh)wg)z zy4St^A0JzUP2FI^^m^C5H)Yl!qRUuZ`^`h3N+e`%|4cl_vAA8?hRH;yP z<7Z9Vy4Q2MF3fQ#w##Gj<=k;j)Ya_Xk~ig6b3P$GHFr^kY8 zEIYq)y!c&r*`znCW;(ml=UIY}E!rM`{F}QC-IQ#lX>?7Ng!D=*4PjbzeroV4uahmRi(tN*$DpD^RdixZ#kXe}^I^O)pPJAc{B z0^t(3$KP@;R7^W>o(EFb)=`Ig9@^Xa0gd7NeL>OWV0sBox#TAUcm zc;cf;wbFs5EO|92yHyWr=5#$i?mbE6g2~yO*z2W9B6qnQLl62iPQK6Bu$jY!HGg~b zg0_j*Eao^&mEXMJ?To8)ZiqF+@g11z-|BMkn%Dd}``WhUUSv>;nR)cvz0lh-eC>t2 z*ZC*#ERk*0D~Wx+X5+WtdrSFs8TMY*^?&bs`9R(Nc8k8_>D!9`$SujV@;J6M^1#$a zInVj;&o?_P(odZs@M}f7RL1=I^B@0z`CH)U-kA^m8qxzJr#-$YS%WnT!-x~DZl zwI>-bI9^+He(nVc<861hFz_$^e>j;pZ{Ne`d6CnSYd0+Ws9F1}B2dIp#C5f_e8dwq zPor&96p!sspA&QatIz)}7BQ>--%N^%^RS0}(R$uaH}(bTbNHLDzb;KrVfy@t&H zCf|D;5uU|t`mpc}I-EVcLZSFQSFR~{c9-+ub35vRoMs`#IV95D{hueZ7QF9?|# zW&JqoXU3GRx!j(Ue3s>yJ#5XoUnLWG`UBeGj$EeHioQ`ULstkS&bM_b=pb zW?hfhWqc2Z%Hk7IhXCxe!y5U@Sa3u%+H`F z7ymllc3u^Hj`^SZX`>gv3da*$Zly|yKm)Rjc|E71- zFN=7N3b7}S4QvyX`mGt|6fb=^#wyjpk$lF7{fgYAyC&`rDw_VU(>b2h`L9FBZRzfH z9;%8pj?cLcuuOg7vHxk;2UCVmy?x#Lr}8*BDwQ@ww-ntlVs)MOJYbrtO#ktdXPhVX zOUX}ZC_ZVw`^vEa0oD%~@0+flds}dURfEf%ye->43AzRzI3K@1{amY? zgVoiydtJWYTbR-POjGAeg)gq`|MTcO z!vdc@F$;=cRNJ4~aCUcYiM*@)lzn&D^1f96_@VXls;l=pANjwgefs>_wX7nCn2#?0 f@ssQ4e+GjWy~mE;dT@n-fq}u()z4*}Q$iB}K<#f2 literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Characters/Enemies/water-Sheet.png.import b/Assets/Sprites/Characters/Enemies/water-Sheet.png.import new file mode 100644 index 0000000..8daa807 --- /dev/null +++ b/Assets/Sprites/Characters/Enemies/water-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dab3cq4y0d2pm" +path="res://.godot/imported/water-Sheet.png-91c518e053a88010c4c4cf2bec7d93c8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Enemies/water-Sheet.png" +dest_files=["res://.godot/imported/water-Sheet.png-91c518e053a88010c4c4cf2bec7d93c8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Characters/Player/oniSheet.png b/Assets/Sprites/Characters/Player/oniSheet.png new file mode 100644 index 0000000000000000000000000000000000000000..a3f49d1dd1eaaea4c537d72007cb8bb55244dee5 GIT binary patch literal 976 zcmeAS@N?(olHy`uVBq!ia0y~yU`SwKU{K&-V_;x-d!ROifq{XsILO_JVcj{ImkbQd zU7jwEAsLNtBW?Yj8VLMr3X^GI)@hZFnh>M7x9L&o?Vm>4VIQ_I9Zb9wxHGm>OK6S) ztNKSVedcY+*24bx&U^j#)J*z4duINzvS*AR zP@td3%<$u4PK2QNHTgvik666EdjEX)`|QeS%N^p|3!Mx28a7|E%FZ?T_Q)*n={A{q zooCbL9jbEbn>}axuj#MEKV5cPv$fB`E$CeT!iJ##L4Td>nv`nxTk@XRCpfGB1iStN zCe8^j;+y`fwlEy9y<@wxefRQsQuk{x4o0Seo>sc#GMy|dcpL02ionP{!)zrmWP^b3i^n3G{YFTqU&=AtNs{bUv_YNO--rex< zNByEF+I1cTfju<;tyt4>31cIp9@#YwLI01W+jW0#cDYdN)A25L`Bphe$zw;DvV=9h zzW=QLMP2b}z1o9Ej~1;e`o}kcYr?w&QvZ*Hdv$&Ze|nzZPTb+ut(k}Kr!p@6_kE%L z@&9ZL@87>)ddH{fu=%kCxwqFa%nJ5;c>Vo+OXHLANkRXAUzmT`)25)Za%Rkrj~@>j zMI8Rl`s7Dc_Qd}&pLYIG zZ}y|&@_gMLAB%tF-afZY@!I=Zmq+E-*jrEgZ(Yw}t>Bc)ZX#;${ojS>>c8M$&DtI7 zW^BuqUTfN8cp++Y`G)iC7mn=t{Q0wrzG2+f$;$t){)xKsiodF0X~?G3Pq$ZB>^t)P zd6BxptAn*0$`X#*?`G9IqW|&yHFzKJNxY@w$eXM_n^I_FuF2 zt}kGfOwK6$#KAvT;MYF?bI*U2h!lr6*PHy_m(Qh}{4r~0S3MU`-PHe@e-FA}_`g6R zd5+;R&82_hD{|^=!a45TS6rH%5%%ZKVmue=`1TVNAx2n;(5Y zuqiP5kI?+Nf95!Ph8tY}>B5wC(C-0Dy_w5Nb&)br>y9_m>!r5tdz_vA{-ip`*Luer n^4^nn@W*@qI)C%jBmK5#8#24)mds*cU|{fc^>bP0l+XkK>u2GE literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Characters/Player/oniSheet.png.import b/Assets/Sprites/Characters/Player/oniSheet.png.import new file mode 100644 index 0000000..9345837 --- /dev/null +++ b/Assets/Sprites/Characters/Player/oniSheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c6dl0tlkdtis1" +path="res://.godot/imported/oniSheet.png-b8378366bf6353d355389916f84c4a21.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Player/oniSheet.png" +dest_files=["res://.godot/imported/oniSheet.png-b8378366bf6353d355389916f84c4a21.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Characters/Player/tengu-Sheet.png b/Assets/Sprites/Characters/Player/tengu-Sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..0b87bd10032145789a7b56af9924e21cd057c922 GIT binary patch literal 1357 zcmeAS@N?(olHy`uVBq!ia0y~yU`SwKU{K&-V_;x-d!ROifq{XsILO_JVcj{ImkbQ7 z?4B-;AsLN#BlmaTag(Txn&Z^!Um(LI{;}z)(^0W%?#XYr-w@H`JHs;PmP#uZd(h4k zp|jO`6~l9c?<^0fZjF7y-|^tu(L<{?@UXKrTS(Wi?|ancDcGC0~UFZ@R~2 z5v8`rbpawD9=+g*HD8d?!n%LszeCQ+e`Gg0)EW8)>l`l7z4-YmSD{R|!14oA)czdd zwy=xSe(*f~{Dk#kYpylK_BbThMgN`qfb)RT{q)uepEwRr2=tO9D9P_;dTPvzumW>(3-U?Yii{*Z#TAJ09n|yw}sC(4^zdx&~e8jMewq z?mzw?GiUC@1Pc}how$3u&8~lUtf_xnwUp6@pZ&1nqDPi;nX?{kkto`_F#ITU?~SKL zo%ZrJ3=DrZZdR84x9!iiU%4M_Ken9T-TZ#vI-4m^EIAtF=hrc4@+fbO+i;d`%hUHx z`!)B)u(l?4+<$-H-9YZ~!yGn_y`K^+jvT!y$?)Lay*SS=e{L1^}X6wY=JN)l5|5T}Gm2o@u`WT|?qW_vz z950Q%_Wrx!&o3)$EF}6rKKmh2zqejrcb_-oZIgnRyEa_Re?6a>VclyZh8=tMOtI5x zd%a6z-u)`(TT&UT_jB76*s2>Ilc@gmW8}L#$N7;{Dt;s-91N>&W#=Fo^ZLy?Ogk zvD>D9{qq08yf>yY)|_8(Y5k{jV&|JV>rda!6mebJu*~g&wCrrA9G)#t^KYy;`Q<*x zJ|Rbe5TTA|%n2@!d@RN1>`LFEj`!vHx?S$xRK?Vz3TULe`ksp=wn&-_?;Bo%* z=_z+y&7T#2=H#9}|1mr~eCq3%|Ns8&6We$0e%t$n2J_#Wyk>pT!gZcIgL@|91%nII z;*ZR3>8-bAh|m!`_9XT}DBBB(9dCc-e%Skq^=81sV3+6_4_q0|kFLLcI6wM-6!Qrs zPoXV)JMxSssoWI%+WYA{Lqd7^^!eKLo6m0I@%6r7W}|pyS3u~CYwMf)A6Gnek-7 zAGDu$|F(a>CO8TQ3b5E5oE0eb<5=5e!3_^Z6pZ~Ob-&L3l>KtOkK@t2=_i*pB&oLO zoR)fj`a_Mzsby@18EKKvG^X{OTDf%Xzik%|NPpb^a{V5bqvBjkrv!RM3b6RhXxj4e zYjxM5qjHO8wVADoFIQRdYWvaGFV@dcn0MXYV5Oa_`OM|s>oOm>edS&__3)ODp%uBG zQ#o_PSZ7b#E|DO0i*4Hjb3X0Ql^Ru3%LFf(*H_Ody1smFwE6t@rT<=Uh>^cNqe40+ g_S5Mi&&TpJr#)QuvtG!Gfq{X+)78&qol`;+0MKNUuK)l5 literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Characters/Player/tengu-Sheet.png.import b/Assets/Sprites/Characters/Player/tengu-Sheet.png.import new file mode 100644 index 0000000..4f9ff31 --- /dev/null +++ b/Assets/Sprites/Characters/Player/tengu-Sheet.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://codbtra5i6ara" +path="res://.godot/imported/tengu-Sheet.png-bd1922231358608f458a7e383bdb6938.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Characters/Player/tengu-Sheet.png" +dest_files=["res://.godot/imported/tengu-Sheet.png-bd1922231358608f458a7e383bdb6938.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Environments/environment.png b/Assets/Sprites/Environments/environment.png index 47b0eaa843ad4629a7a2575f5df7b93661f434e4..3651d23bb54475d5562a3be1e956eddd5542c359 100644 GIT binary patch literal 10897 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 XccWwjr>p}50|SGntDnm{r-UW|MaoO* literal 4678 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 diff --git a/Assets/Sprites/Environments/sakura.png b/Assets/Sprites/Environments/sakura.png new file mode 100644 index 0000000000000000000000000000000000000000..bb9a67802f8d68884c54c97c2861b6971c34364c GIT binary patch literal 2876 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 literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Environments/sakura.png.import b/Assets/Sprites/Environments/sakura.png.import new file mode 100644 index 0000000..9b8b17c --- /dev/null +++ b/Assets/Sprites/Environments/sakura.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bnq8qxou2sgvw" +path="res://.godot/imported/sakura.png-b12ae8679555da89906a9bb60ba56118.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Environments/sakura.png" +dest_files=["res://.godot/imported/sakura.png-b12ae8679555da89906a9bb60ba56118.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Assets/Sprites/Projectiles/blueflame.png b/Assets/Sprites/Projectiles/blueflame.png new file mode 100644 index 0000000000000000000000000000000000000000..01dd6a67062af41999d70b482855a4c69ded16be GIT binary patch literal 737 zcmeAS@N?(olHy`uVBq!ia0y~yU~phyU{K&-V_;xdG`FsWfq{XsILO_JVcj{ImkbO{ zvproLLoynlM(9quZ6H#Y$0C#Us%N)2M`3_tM806cgUDHjr&KZVRCRA^a5X&1I?Kn$ z+5CXD)(xBRY4cM&@9hZvoiN9L{+GS+oCgkVI^25uPyCj%-%?u7a-aL$Wc_*Or+OpS z{B7#zR^6C6C)HT{%sWetyyKrWF8cmpXLWd*!>=%T`fAq)P5Gy`U!1u7@pZ0-cK+#{ zQ&zifsOFo)_b}`J{#rf;h6qvTvK=4#JJ@bcVe0v6vrbS?INj!s>kirT{EyXH1-RK( zC(XF^c^hkSPiC+}jM{@$`&O^ydmq)%-Xp?L%>Pcw=cyo1q*l)CEp;5}?hG5>cPTX_ zM&xZ%-xQE2Xnc3d>%`a}TQwVY_RC31b6VL{?f1-nKJDe9`+^V3Y?w`JO*4JlmiC%H zo&C)^tol^6&TPijj}Dr~{Fu3?^X#`PeG4plHvaPaoSkUzGJ8vJV) z?=;+)|09e+Yx}i}F`Qvfr*Y2P6@BBu=ceMFYj=JsS852-ukTW*@2c7#oYu9R@5AyR zQ%w`)~QuDeyx0ye{?%@ z;}4d9PhW3kKa}Ms4$pd zej;V9Y>N1W2Pd5_n#JC5RI9ZK{O=_wn{Z>E{m_%g)$i+fE8)#fSfk;lFW)Ia~a~`PUNfwH9uRo_U(h;Cc1Ka?P7( zm`fwPN+Y~Nmo~6@JkFYI{cP%0`}jF}e-;}xPx{i5!oG${KRx5}u4`^SdkpRB?^|w+ zN`K*hRqKPm(L;aO7;Mtdot~-X^M2W%Fa|#Fm0Oasdh%RmS1y?JCB*X>?~;RD6W8WM z)}}>oXnJ<3czyVFx}IP0Ip)yIz0a{O{OOnrJ`N{U`p&A)|1W&_&+s89^yk7_u_p`+ O3=E#GelF{r5}E)5Qn7LX literal 0 HcmV?d00001 diff --git a/Assets/Sprites/Projectiles/flame_attack.png.import b/Assets/Sprites/Projectiles/flame_attack.png.import new file mode 100644 index 0000000..e995ada --- /dev/null +++ b/Assets/Sprites/Projectiles/flame_attack.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://m77l7ej5ojn0" +path="res://.godot/imported/flame_attack.png-5976c405e743e9ca07cffcd6eb29b216.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/Sprites/Projectiles/flame_attack.png" +dest_files=["res://.godot/imported/flame_attack.png-5976c405e743e9ca07cffcd6eb29b216.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +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/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +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/Prefabs/Enemies/liquid.tscn b/Prefabs/Enemies/liquid.tscn new file mode 100644 index 0000000..58f919f --- /dev/null +++ b/Prefabs/Enemies/liquid.tscn @@ -0,0 +1,75 @@ +[gd_scene load_steps=11 format=3 uid="uid://c37hbbbx8wje"] + +[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_rmkli"] +[ext_resource type="Texture2D" uid="uid://dab3cq4y0d2pm" path="res://Assets/Sprites/Characters/Enemies/water-Sheet.png" id="2_rmkli"] +[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_t8by4"] +[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_cyy2q"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_frtie"] +atlas = ExtResource("2_rmkli") +region = Rect2(0, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_t8by4"] +atlas = ExtResource("2_rmkli") +region = Rect2(32, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_cyy2q"] +atlas = ExtResource("2_rmkli") +region = Rect2(64, 0, 32, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1jpca"] +atlas = ExtResource("2_rmkli") +region = Rect2(96, 0, 32, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_frtie") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_t8by4") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_cyy2q") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1jpca") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"] +radius = 12.0 + +[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")] +rotates = false +loop = false +script = ExtResource("1_rmkli") +Health = NodePath("Scripts/Health") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_ewbju") +offset = Vector2(0, -16) + +[node name="Scripts" type="Node" parent="."] + +[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")] +script = ExtResource("3_t8by4") +_pathFollow2D = NodePath("../..") +_speed = 25.0 + +[node name="Health" type="Node" parent="Scripts"] +script = ExtResource("4_cyy2q") +_baseMaxHp = 50.0 + +[node name="HitBox" type="Area2D" parent="."] +collision_layer = 4 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"] +position = Vector2(-1, -9) +shape = SubResource("CircleShape2D_7puah") diff --git a/Prefabs/Enemies/rock_boi.tscn b/Prefabs/Enemies/stone.tscn similarity index 51% rename from Prefabs/Enemies/rock_boi.tscn rename to Prefabs/Enemies/stone.tscn index 7765d79..f83dde9 100644 --- a/Prefabs/Enemies/rock_boi.tscn +++ b/Prefabs/Enemies/stone.tscn @@ -1,34 +1,37 @@ -[gd_scene load_steps=12 format=3 uid="uid://y54cvugsx75b"] +[gd_scene load_steps=15 format=3 uid="uid://y54cvugsx75b"] -[ext_resource type="Texture2D" uid="uid://cm8gnfvfysyyl" path="res://Assets/Sprites/Characters/Enemies/stone-Sheet.png" id="1_7puah"] -[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="2_wtb2n"] +[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_qqq3s"] +[ext_resource type="Texture2D" uid="uid://cm8gnfvfysyyl" path="res://Assets/Sprites/Characters/Enemies/stone-Sheet.png" id="2_ymaxx"] +[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_pbvk1"] +[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_njiku"] +[ext_resource type="Script" uid="uid://c247m8m3qmlk0" path="res://Scripts/Enemies/EnemyArea.cs" id="5_ymaxx"] [sub_resource type="AtlasTexture" id="AtlasTexture_ldgsr"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(0, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_o5yvi"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(32, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_rku1e"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(64, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_rfjv2"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(96, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_1phco"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(128, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_nb51f"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(160, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_nnt18"] -atlas = ExtResource("1_7puah") +atlas = ExtResource("2_ymaxx") region = Rect2(192, 0, 32, 32) [sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"] @@ -60,30 +63,38 @@ animations = [{ "speed": 5.0 }] -[sub_resource type="CircleShape2D" id="CircleShape2D_i6g32"] -radius = 7.0 +[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"] +radius = 12.0 -[node name="RockBoi" type="CharacterBody2D"] -motion_mode = 1 - -[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] -path_desired_distance = 1.0 -simplify_path = true -simplify_epsilon = 0.25 +[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")] +rotates = false +loop = false +script = ExtResource("1_qqq3s") +Health = NodePath("Scripts/Health") [node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) texture_filter = 1 sprite_frames = SubResource("SpriteFrames_ewbju") offset = Vector2(0, -16) [node name="Scripts" type="Node" parent="."] -[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_agent2D", "_body2D")] -script = ExtResource("2_wtb2n") -_agent2D = NodePath("../../NavigationAgent2D") -_body2D = NodePath("../..") -_speed = 44.59 +[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")] +script = ExtResource("3_pbvk1") +_pathFollow2D = NodePath("../..") +_speed = 25.0 -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(0, -7) -shape = SubResource("CircleShape2D_i6g32") +[node name="Health" type="Node" parent="Scripts"] +script = ExtResource("4_njiku") +_baseMaxHp = 50.0 + +[node name="HitBox" type="Area2D" parent="." node_paths=PackedStringArray("Enemy")] +collision_layer = 4 +collision_mask = 0 +script = ExtResource("5_ymaxx") +Enemy = NodePath("..") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"] +position = Vector2(0, -14) +shape = SubResource("CircleShape2D_7puah") diff --git a/Prefabs/Enemies/stump.tscn b/Prefabs/Enemies/stump.tscn new file mode 100644 index 0000000..229fd1a --- /dev/null +++ b/Prefabs/Enemies/stump.tscn @@ -0,0 +1,106 @@ +[gd_scene load_steps=15 format=3 uid="uid://bawoevqlooah0"] + +[ext_resource type="Script" uid="uid://bj52mq7uip7di" path="res://Scripts/Enemies/Enemy.cs" id="1_0paat"] +[ext_resource type="Texture2D" uid="uid://blkxqlgahm4al" path="res://Assets/Sprites/Characters/Enemies/stump-Sheet.png" id="2_0paat"] +[ext_resource type="Script" uid="uid://cu37tswrk107q" path="res://Scripts/Enemies/EnemyMovement.cs" id="3_8v58s"] +[ext_resource type="Script" uid="uid://dvkd1keu854so" path="res://Scripts/Components/Health.cs" id="4_04dlg"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_pitds"] +atlas = ExtResource("2_0paat") +region = Rect2(0, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_8v58s"] +atlas = ExtResource("2_0paat") +region = Rect2(64, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_04dlg"] +atlas = ExtResource("2_0paat") +region = Rect2(128, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_m1mv1"] +atlas = ExtResource("2_0paat") +region = Rect2(192, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6jaqh"] +atlas = ExtResource("2_0paat") +region = Rect2(256, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_pgfmy"] +atlas = ExtResource("2_0paat") +region = Rect2(320, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_mu3a6"] +atlas = ExtResource("2_0paat") +region = Rect2(384, 0, 64, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_byqr4"] +atlas = ExtResource("2_0paat") +region = Rect2(448, 0, 64, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ewbju"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_pitds") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_8v58s") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_04dlg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_m1mv1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_6jaqh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_pgfmy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_mu3a6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_byqr4") +}], +"loop": true, +"name": &"default", +"speed": 8.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_7puah"] +radius = 12.0 + +[node name="enemy" type="PathFollow2D" node_paths=PackedStringArray("Health")] +rotates = false +loop = false +script = ExtResource("1_0paat") +Type = 1 +Health = NodePath("Scripts/Health") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +texture_filter = 1 +sprite_frames = SubResource("SpriteFrames_ewbju") +frame = 1 +frame_progress = 0.31093782 +offset = Vector2(0, -16) + +[node name="Scripts" type="Node" parent="."] + +[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_pathFollow2D")] +script = ExtResource("3_8v58s") +_pathFollow2D = NodePath("../..") +_speed = 25.0 + +[node name="Health" type="Node" parent="Scripts"] +script = ExtResource("4_04dlg") +_baseMaxHp = 50.0 + +[node name="HitBox" type="Area2D" parent="."] +collision_layer = 4 +collision_mask = 0 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="HitBox"] +position = Vector2(0, -14) +shape = SubResource("CircleShape2D_7puah") diff --git a/Prefabs/Projectiles/Fireball.tscn b/Prefabs/Projectiles/Fireball.tscn new file mode 100644 index 0000000..e640034 --- /dev/null +++ b/Prefabs/Projectiles/Fireball.tscn @@ -0,0 +1,64 @@ +[gd_scene load_steps=9 format=3 uid="uid://cr6shokga0dy6"] + +[ext_resource type="Script" uid="uid://ln2lt16fi47q" path="res://Scripts/Projectiles/Projectile.cs" id="1_llqe1"] +[ext_resource type="Texture2D" uid="uid://m77l7ej5ojn0" path="res://Assets/Sprites/Projectiles/flame_attack.png" id="2_xuxqo"] + +[sub_resource type="CircleShape2D" id="CircleShape2D_llqe1"] +radius = 8.062258 + +[sub_resource type="AtlasTexture" id="AtlasTexture_r2qu7"] +atlas = ExtResource("2_xuxqo") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fgux0"] +atlas = ExtResource("2_xuxqo") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fb7vg"] +atlas = ExtResource("2_xuxqo") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y5q4i"] +atlas = ExtResource("2_xuxqo") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_0qapt"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_r2qu7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fgux0") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fb7vg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y5q4i") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[node name="Fireball" type="Node2D" node_paths=PackedStringArray("_hurtBox")] +texture_filter = 1 +script = ExtResource("1_llqe1") +_superEffective = Array[int]([1]) +_baseDamage = 25.0 +_speed = 250.0 +_hurtBox = NodePath("Hurtbox") + +[node name="Hurtbox" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Hurtbox"] +shape = SubResource("CircleShape2D_llqe1") + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) +rotation = -1.5707964 +sprite_frames = SubResource("SpriteFrames_0qapt") +offset = Vector2(0, -8) diff --git a/Prefabs/Turrets/kitsune.tscn b/Prefabs/Turrets/kitsune.tscn new file mode 100644 index 0000000..cef8629 --- /dev/null +++ b/Prefabs/Turrets/kitsune.tscn @@ -0,0 +1,110 @@ +[gd_scene load_steps=15 format=3 uid="uid://cx7gr555b1gov"] + +[ext_resource type="Texture2D" uid="uid://be7hl01iuo5af" path="res://Assets/Sprites/Characters/Player/kitsune-Sheet.png" id="1_0bpay"] +[ext_resource type="Script" uid="uid://cxrhl65cjw4yr" path="res://Scripts/Turrets/Turret.cs" id="2_jjtgc"] +[ext_resource type="Script" uid="uid://cy00plvsi6vkn" path="res://Scripts/Projectiles/ProjectilePool.cs" id="3_d0rgn"] +[ext_resource type="PackedScene" uid="uid://cr6shokga0dy6" path="res://Prefabs/Projectiles/Fireball.tscn" id="4_jjtgc"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_3dryh"] +atlas = ExtResource("1_0bpay") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_wowpa"] +atlas = ExtResource("1_0bpay") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i6g32"] +atlas = ExtResource("1_0bpay") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"] +atlas = ExtResource("1_0bpay") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_v158k"] +atlas = ExtResource("1_0bpay") +region = Rect2(64, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_h4fw4"] +atlas = ExtResource("1_0bpay") +region = Rect2(80, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_3dryh") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_wowpa") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i6g32") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1l0tm") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_v158k") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_h4fw4") +}], +"loop": true, +"name": &"idle", +"speed": 8.0 +}] + +[sub_resource type="CircleShape2D" id="CircleShape2D_5wxv7"] +radius = 50.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_y5hcb"] +radius = 7.0 + +[sub_resource type="QuadMesh" id="QuadMesh_5wxv7"] +size = Vector2(100, 100) + +[node name="Turret" type="Node2D"] +y_sort_enabled = true +texture_filter = 1 + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +self_modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) +sprite_frames = SubResource("SpriteFrames_ebmjs") +animation = &"idle" +autoplay = "idle" +frame_progress = 0.8244228 +offset = Vector2(0, -16) + +[node name="Scripts" type="Node" parent="."] + +[node name="Turret" type="Node" parent="Scripts" node_paths=PackedStringArray("_Attackrange", "_parent", "_projectilePool")] +script = ExtResource("2_jjtgc") +_Attackrange = NodePath("../../ShootArea") +_fireRate = 1.0 +_parent = NodePath("../..") +_projectilePool = NodePath("../ProjectilePool") + +[node name="ProjectilePool" type="Node" parent="Scripts"] +script = ExtResource("3_d0rgn") +_scene = ExtResource("4_jjtgc") +_poolSize = 10 + +[node name="ShootArea" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 4 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="ShootArea"] +rotation = 1.5707964 +shape = SubResource("CircleShape2D_5wxv7") + +[node name="PlacementCollider" type="Area2D" parent="."] + +[node name="CollisionShape2D" type="CollisionShape2D" parent="PlacementCollider"] +position = Vector2(0, -5) +rotation = 1.5707964 +shape = SubResource("CircleShape2D_y5hcb") + +[node name="MeshInstance2D" type="MeshInstance2D" parent="."] +visible = false +mesh = SubResource("QuadMesh_5wxv7") diff --git a/Prefabs/player.tscn b/Prefabs/player.tscn deleted file mode 100644 index 33d0123..0000000 --- a/Prefabs/player.tscn +++ /dev/null @@ -1,83 +0,0 @@ -[gd_scene load_steps=11 format=3 uid="uid://cx7gr555b1gov"] - -[ext_resource type="Texture2D" uid="uid://be7hl01iuo5af" path="res://Assets/Sprites/Characters/Player/kitsune-Sheet.png" id="1_5wxv7"] -[ext_resource type="Script" uid="uid://8drbh4rcl410" path="res://Scripts/PlayerMovement.cs" id="2_y5hcb"] - -[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_wrm1d"] -radius = 2.0 -height = 10.0 - -[sub_resource type="AtlasTexture" id="AtlasTexture_3dryh"] -atlas = ExtResource("1_5wxv7") -region = Rect2(0, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_wowpa"] -atlas = ExtResource("1_5wxv7") -region = Rect2(16, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_i6g32"] -atlas = ExtResource("1_5wxv7") -region = Rect2(32, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"] -atlas = ExtResource("1_5wxv7") -region = Rect2(48, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_v158k"] -atlas = ExtResource("1_5wxv7") -region = Rect2(64, 0, 16, 32) - -[sub_resource type="AtlasTexture" id="AtlasTexture_h4fw4"] -atlas = ExtResource("1_5wxv7") -region = Rect2(80, 0, 16, 32) - -[sub_resource type="SpriteFrames" id="SpriteFrames_ebmjs"] -animations = [{ -"frames": [{ -"duration": 1.0, -"texture": SubResource("AtlasTexture_3dryh") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_wowpa") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_i6g32") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_1l0tm") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_v158k") -}, { -"duration": 1.0, -"texture": SubResource("AtlasTexture_h4fw4") -}], -"loop": true, -"name": &"idle", -"speed": 8.0 -}] - -[node name="Player" type="CharacterBody2D"] -y_sort_enabled = true -texture_filter = 1 -collision_layer = 2 -collision_mask = 5 -motion_mode = 1 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2(0, -2) -rotation = 1.5707964 -shape = SubResource("CapsuleShape2D_wrm1d") - -[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] -sprite_frames = SubResource("SpriteFrames_ebmjs") -animation = &"idle" -frame_progress = 0.8244228 -offset = Vector2(0, -16) - -[node name="Scripts" type="Node" parent="."] - -[node name="Movement" type="Node" parent="Scripts" node_paths=PackedStringArray("_body2D")] -script = ExtResource("2_y5hcb") -_body2D = NodePath("../..") -_speed = 4000.0 diff --git a/Resources/environment.tres b/Resources/environment.tres deleted file mode 100644 index 2e19eec..0000000 --- a/Resources/environment.tres +++ /dev/null @@ -1,86 +0,0 @@ -[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://b15j7vhkfu415"] - -[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="1_weel8"] - -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_12wsl"] -texture = ExtResource("1_weel8") -0:0/0 = 0 -0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 0, 0, 8, 0, 8, -8, -8, -8, -8, 8) -2:2/0 = 0 -2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, -8, 8, -8, 8, 8, -8, 8) -1:2/0 = 0 -1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -0:2/0 = 0 -0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 0, 8, 0, 8, 8, -8, 8) -0:1/0 = 0 -0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 0, -8, 0, 8, -8, 8) -1:0/0 = 0 -1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 0, -8, 0) -1:1/0 = 0 -2:1/0 = 0 -2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, 8, 8, 8, -8) -2:0/0 = 0 -2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, 8, 8, 8, 8, -8, -8, -8) -3:0/0 = 0 -3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 0, 0, 8, 0, 8, -8, -8, -8, -8, 8) -3:1/0 = 0 -3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, -8, 8, -8, -8) -3:2/0 = 0 -3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 0, 8, 0, 8, 8, -8, 8, -8, -8) -4:2/0 = 0 -4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -4:1/0 = 0 -4:0/0 = 0 -4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, -8, -8, -8) -5:0/0 = 0 -5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, 8, 8, 8, 8, -8, -8, -8) -5:1/0 = 0 -5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, 8, 8, 8, -8) -5:2/0 = 0 -5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, 0, 0, -8, 8, -8, 8, 8, -8, 8) -7:1/0 = 0 -8:1/0 = 0 -9:1/0 = 0 -7:2/0 = 0 -8:2/0 = 0 -9:2/0 = 0 -8:4/size_in_atlas = Vector2i(1, 2) -8:4/0 = 0 -8:4/0/texture_origin = Vector2i(0, 8) -8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -9:4/size_in_atlas = Vector2i(1, 2) -9:4/0 = 0 -9:4/0/texture_origin = Vector2i(0, 8) -9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 6, 0, 6, 8, -8, 8) -0:4/size_in_atlas = Vector2i(4, 5) -0:4/0 = 0 -0:4/0/texture_origin = Vector2i(0, 32) -0:4/0/y_sort_origin = -4 -0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 12, 4, -12, 4) -7:4/size_in_atlas = Vector2i(1, 2) -7:4/0 = 0 -7:4/0/texture_origin = Vector2i(0, 8) -7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 0, 8, 0, 8, 8, -6, 8) -4:7/size_in_atlas = Vector2i(2, 2) -4:7/0 = 0 -4:7/0/texture_origin = Vector2i(0, 8) -4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 16, 0, 12, 8, -12, 8) -5:6/0 = 0 -5:6/0/y_sort_origin = 4 -5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 6, -6, 8, 6, 8, 8, 6, 8, 4, -8, 4) -7:7/size_in_atlas = Vector2i(1, 2) -7:7/0 = 0 -7:7/0/texture_origin = Vector2i(0, 8) -7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0.9892235, 0, 8, 0, 8, 8, -8, 8) -8:7/size_in_atlas = Vector2i(1, 2) -8:7/0 = 0 -8:7/0/texture_origin = Vector2i(0, 8) -8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) -9:7/size_in_atlas = Vector2i(1, 2) -9:7/0 = 0 -9:7/0/texture_origin = Vector2i(0, 8) -9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) - -[resource] -physics_layer_0/collision_layer = 1 -sources/0 = SubResource("TileSetAtlasSource_12wsl") diff --git a/Resources/environmentSettings.tres b/Resources/environmentSettings.tres new file mode 100644 index 0000000..40ce194 --- /dev/null +++ b/Resources/environmentSettings.tres @@ -0,0 +1,8 @@ +[gd_resource type="Environment" format=3 uid="uid://cg7bginhcdl5w"] + +[resource] +background_mode = 3 +background_color = Color(0.1254902, 0.1254902, 0.1254902, 1) +ambient_light_color = Color(0.1254902, 0.1254902, 0.1254902, 1) +glow_enabled = true +glow_blend_mode = 1 diff --git a/Resources/environmentTileMap.tres b/Resources/environmentTileMap.tres new file mode 100644 index 0000000..674387a --- /dev/null +++ b/Resources/environmentTileMap.tres @@ -0,0 +1,383 @@ +[gd_resource type="TileSet" load_steps=3 format=3 uid="uid://b15j7vhkfu415"] + +[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="1_7wjyg"] + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_12wsl"] +texture = ExtResource("1_7wjyg") +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 4, 4, 8, 0, 8, -4, 4, -4, 0, 0, -4, 4, -4, 8) +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0, -8, 4, -8, 4, -4, 0, 0, -4, 4, -8, 4) +2:2/0/terrains_peering_bit/top_left_corner = 0 +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 4, -8, 4) +1:2/0/terrains_peering_bit/top_left_corner = 0 +1:2/0/terrains_peering_bit/top_side = 0 +1:2/0/terrains_peering_bit/top_right_corner = 0 +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, 0, -8, 4, -4, 8, 0, 8, 4, 4, 4, 0, 0, -4, -4) +0:2/0/terrains_peering_bit/top_right_corner = 0 +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, 0, -8, 0, 8, -4, 8) +0:1/0/terrains_peering_bit/right_side = 0 +0:1/0/terrains_peering_bit/bottom_right_corner = 0 +0:1/0/terrains_peering_bit/top_right_corner = 0 +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 8, 0, -8, 0) +1:0/0/terrains_peering_bit/bottom_right_corner = 0 +1:0/0/terrains_peering_bit/bottom_side = 0 +1:0/0/terrains_peering_bit/bottom_left_corner = 0 +1:1/0 = 0 +1:1/0/terrain_set = 0 +1:1/0/terrain = 0 +1:1/0/terrains_peering_bit/right_side = 0 +1:1/0/terrains_peering_bit/bottom_right_corner = 0 +1:1/0/terrains_peering_bit/bottom_side = 0 +1:1/0/terrains_peering_bit/bottom_left_corner = 0 +1:1/0/terrains_peering_bit/left_side = 0 +1:1/0/terrains_peering_bit/top_left_corner = 0 +1:1/0/terrains_peering_bit/top_side = 0 +1:1/0/terrains_peering_bit/top_right_corner = 0 +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 0, 8, 4, 8, 4, -8) +2:1/0/terrains_peering_bit/bottom_left_corner = 0 +2:1/0/terrains_peering_bit/left_side = 0 +2:1/0/terrains_peering_bit/top_left_corner = 0 +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, -4, 4, 0, 8, 4, 8, 4, 4, 0, 0, -4, -4, -8, -4) +2:0/0/terrains_peering_bit/bottom_left_corner = 0 +3:0/0 = 0 +3:0/0/terrain_set = 0 +3:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, 8, 4, 8, 6, 6, 8, 4, 8, 0, 4, 4) +3:0/0/terrains_peering_bit/bottom_left_corner = 0 +3:0/0/terrains_peering_bit/left_side = 0 +3:0/0/terrains_peering_bit/top_left_corner = 0 +3:0/0/terrains_peering_bit/top_side = 0 +3:0/0/terrains_peering_bit/top_right_corner = 0 +3:1/0 = 0 +3:1/0/terrain_set = 0 +3:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, 4, -8, 4, 8, 0, 8) +3:1/0/terrains_peering_bit/bottom_left_corner = 0 +3:1/0/terrains_peering_bit/left_side = 0 +3:1/0/terrains_peering_bit/top_left_corner = 0 +3:2/0 = 0 +3:2/0/terrain_set = 0 +3:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, 8, -4, 6, -6, 4, -8, 0, -8, 4, -4) +3:2/0/terrains_peering_bit/bottom_right_corner = 0 +3:2/0/terrains_peering_bit/bottom_side = 0 +3:2/0/terrains_peering_bit/bottom_left_corner = 0 +3:2/0/terrains_peering_bit/left_side = 0 +3:2/0/terrains_peering_bit/top_left_corner = 0 +4:2/0 = 0 +4:2/0/terrain_set = 0 +4:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, 8, -4, -8, -4, -8, 0) +4:2/0/terrains_peering_bit/bottom_right_corner = 0 +4:2/0/terrains_peering_bit/bottom_side = 0 +4:2/0/terrains_peering_bit/bottom_left_corner = 0 +4:1/0 = 0 +4:0/0 = 0 +4:0/0/terrain_set = 0 +4:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, -8, 4, 8, 4, 8, 0) +4:0/0/terrains_peering_bit/top_left_corner = 0 +4:0/0/terrains_peering_bit/top_side = 0 +4:0/0/terrains_peering_bit/top_right_corner = 0 +5:0/0 = 0 +5:0/0/terrain_set = 0 +5:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, -8, 4, -6, 6, -4, 8, 0, 8, -4, 4) +5:0/0/terrains_peering_bit/right_side = 0 +5:0/0/terrains_peering_bit/bottom_right_corner = 0 +5:0/0/terrains_peering_bit/top_left_corner = 0 +5:0/0/terrains_peering_bit/top_side = 0 +5:0/0/terrains_peering_bit/top_right_corner = 0 +5:1/0 = 0 +5:1/0/terrain_set = 0 +5:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, -4, -8, -4, 8, 0, 8) +5:1/0/terrains_peering_bit/right_side = 0 +5:1/0/terrains_peering_bit/bottom_right_corner = 0 +5:1/0/terrains_peering_bit/top_right_corner = 0 +5:2/0 = 0 +5:2/0/terrain_set = 0 +5:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(0, -8, -4, -8, -6, -6, -8, -4, -8, 0, -4, -4) +5:2/0/terrains_peering_bit/right_side = 0 +5:2/0/terrains_peering_bit/bottom_right_corner = 0 +5:2/0/terrains_peering_bit/bottom_side = 0 +5:2/0/terrains_peering_bit/bottom_left_corner = 0 +5:2/0/terrains_peering_bit/top_right_corner = 0 +8:4/size_in_atlas = Vector2i(1, 2) +8:4/next_alternative_id = 4 +8:4/0 = 0 +8:4/0/texture_origin = Vector2i(0, 8) +8:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +9:4/size_in_atlas = Vector2i(1, 2) +9:4/0 = 0 +9:4/0/texture_origin = Vector2i(0, 8) +9:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 6, 0, 6, 8, -8, 8) +0:4/size_in_atlas = Vector2i(4, 5) +0:4/0 = 0 +0:4/0/texture_origin = Vector2i(0, 32) +0:4/0/y_sort_origin = -4 +0:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -4, 8, -4, 12, 4, -12, 4) +7:4/size_in_atlas = Vector2i(1, 2) +7:4/0 = 0 +7:4/0/texture_origin = Vector2i(0, 8) +7:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 0, 8, 0, 8, 8, -6, 8) +4:7/size_in_atlas = Vector2i(2, 2) +4:7/0 = 0 +4:7/0/texture_origin = Vector2i(0, 8) +4:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 0, 16, 0, 12, 8, -12, 8) +5:6/0 = 0 +5:6/0/y_sort_origin = 4 +5:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 6, -6, 8, 6, 8, 8, 6, 8, 4, -8, 4) +7:7/size_in_atlas = Vector2i(1, 2) +7:7/0 = 0 +7:7/0/texture_origin = Vector2i(0, 8) +7:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 0.9892235, 0, 8, 0, 8, 8, -8, 8) +8:7/size_in_atlas = Vector2i(1, 2) +8:7/0 = 0 +8:7/0/texture_origin = Vector2i(0, 8) +8:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +9:7/size_in_atlas = Vector2i(1, 2) +9:7/0 = 0 +9:7/0/texture_origin = Vector2i(0, 8) +9:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +13:0/0 = 0 +13:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-7, 0, 8, 0, 8, 8, -7, 8) +14:0/0 = 0 +14:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -8, 0, -8, 8, 8, 8) +15:0/0 = 0 +15:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(7, 0, -8, 0, -8, 8, 7, 8) +13:1/0 = 0 +13:1/0/y_sort_origin = -8 +13:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -7, -8, -7, 8, -6, 8, -6, 16, -4, 16) +15:1/0 = 0 +15:1/0/y_sort_origin = -8 +15:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 7, -8, 7, 8, 6, 8, 6, 16, 4, 16) +13:2/0 = 0 +13:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 0, 8, 0, 8, 8, -6, 8) +15:2/0 = 0 +15:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, 0, -8, 0, -8, 8, 6, 8) +16:0/0 = 0 +16:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, 0, 8, 0, 8, 8, 4, 8) +16:1/next_alternative_id = 2 +16:1/0 = 0 +16:1/0/y_sort_origin = -8 +16:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 7, -8, 7, 8, 4, 8) +16:2/0 = 0 +16:2/0/y_sort_origin = 7 +16:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -8, 7, -8, 7, 8, 4, 8) +17:0/0 = 0 +17:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +18:0/0 = 0 +18:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +19:0/0 = 0 +19:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, 0, -8, 0, -8, 8, -4, 8) +19:1/next_alternative_id = 2 +19:1/0 = 0 +19:1/0/y_sort_origin = -8 +19:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -7, -8, -7, 8, -4, 8) +19:2/0 = 0 +19:2/0/y_sort_origin = 7 +19:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -8, -7, -8, -7, 8, -4, 8) +14:6/size_in_atlas = Vector2i(1, 2) +14:6/0 = 0 +14:6/0/texture_origin = Vector2i(0, 8) +14:6/0/y_sort_origin = 7 +14:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, -24, -7, -24, -7, 8, -4, 8) +14:4/size_in_atlas = Vector2i(1, 2) +14:4/0 = 0 +14:4/0/texture_origin = Vector2i(0, 8) +14:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -7, 0, -7, 8, 8, 8) +15:4/size_in_atlas = Vector2i(1, 2) +15:4/0 = 0 +15:4/0/texture_origin = Vector2i(0, 8) +15:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -8, 0, -8, 8, 8, 8) +16:4/size_in_atlas = Vector2i(1, 2) +16:4/0 = 0 +16:4/0/texture_origin = Vector2i(0, 8) +16:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-4, 0, -8, 0, -8, 8, -6, 8, -6, 32, -4, 32) +16:6/size_in_atlas = Vector2i(1, 2) +16:6/0 = 0 +16:6/0/texture_origin = Vector2i(0, 8) +16:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, -6, 0, -6, 8, 8, 8) +17:6/size_in_atlas = Vector2i(1, 2) +17:6/0 = 0 +17:6/0/texture_origin = Vector2i(0, 8) +17:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 6, 0, 6, 8, -8, 8) +17:4/size_in_atlas = Vector2i(1, 2) +17:4/0 = 0 +17:4/0/texture_origin = Vector2i(0, 8) +17:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, 0, 8, 0, 8, 8, 6, 8, 6, 32, 4, 32) +18:4/size_in_atlas = Vector2i(1, 2) +18:4/0 = 0 +18:4/0/texture_origin = Vector2i(0, 8) +18:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 8, 0, 8, 8, -8, 8) +19:4/size_in_atlas = Vector2i(1, 2) +19:4/0 = 0 +19:4/0/texture_origin = Vector2i(0, 8) +19:4/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 0, 7, 0, 7, 8, -8, 8) +19:6/size_in_atlas = Vector2i(1, 2) +19:6/0 = 0 +19:6/0/texture_origin = Vector2i(0, 8) +19:6/0/y_sort_origin = 7 +19:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(4, -24, 7, -24, 7, 8, 4, 8) +9:2/0 = 0 +8:2/0 = 0 +7:2/0 = 0 +9:1/0 = 0 +8:1/0 = 0 +7:1/0 = 0 +11:6/size_in_atlas = Vector2i(2, 3) +11:6/0 = 0 +11:6/0/texture_origin = Vector2i(0, 16) +11:6/0/y_sort_origin = 5 +11:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 8, -16, 5, 16, 5, 16, 8) +20:1/0 = 0 +20:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(6, 0, 8, 0, 8, 8, 6, 8) +23:1/0 = 0 +23:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 8, -8, 8, -8, 0, -6, 0) +20:3/size_in_atlas = Vector2i(1, 2) +20:3/next_alternative_id = 2 +20:3/0 = 0 +20:3/0/texture_origin = Vector2i(0, 8) +20:3/0/y_sort_origin = 7 +20:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(8, 0, 6, 0, 6, 8, 8, 8) +20:3/1 = 1 +20:3/1/texture_origin = Vector2i(0, 8) +20:3/1/y_sort_origin = -24 +20:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(6, 8, 8, 8, 8, -24, 4, -24, 4, -20, 6, -20) +23:3/size_in_atlas = Vector2i(1, 2) +23:3/next_alternative_id = 2 +23:3/0 = 0 +23:3/0/texture_origin = Vector2i(0, 8) +23:3/0/y_sort_origin = 7 +23:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, 8, -6, 8, -6, 0, -8, 0) +23:3/1 = 1 +23:3/1/texture_origin = Vector2i(0, 8) +23:3/1/y_sort_origin = -24 +23:3/1/physics_layer_0/polygon_0/points = PackedVector2Array(-6, 8, -8, 8, -8, -24, -4, -24, -4, -20, -6, -20) +7:0/0 = 0 +8:0/0 = 0 +9:0/0 = 0 +21:6/0 = 0 +21:6/0/terrain_set = 1 +21:6/0/terrain = 0 +21:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:6/0/terrains_peering_bit/right_side = 0 +21:6/0/terrains_peering_bit/bottom_side = 0 +21:7/0 = 0 +21:7/0/terrain_set = 1 +21:7/0/terrain = 0 +21:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:7/0/terrains_peering_bit/bottom_side = 0 +21:7/0/terrains_peering_bit/top_side = 0 +21:8/0 = 0 +21:8/0/terrain_set = 1 +21:8/0/terrain = 0 +21:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +21:8/0/terrains_peering_bit/right_side = 0 +21:8/0/terrains_peering_bit/top_side = 0 +22:8/0 = 0 +22:8/0/terrain_set = 1 +22:8/0/terrain = 0 +22:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +22:8/0/terrains_peering_bit/right_side = 0 +22:8/0/terrains_peering_bit/left_side = 0 +23:8/0 = 0 +23:8/0/terrain_set = 1 +23:8/0/terrain = 0 +23:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +23:8/0/terrains_peering_bit/left_side = 0 +23:8/0/terrains_peering_bit/top_side = 0 +23:7/0 = 0 +23:7/0/terrain_set = 1 +23:7/0/terrain = 0 +23:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +23:7/0/terrains_peering_bit/bottom_side = 0 +23:7/0/terrains_peering_bit/top_side = 0 +23:6/0 = 0 +23:6/0/terrain_set = 1 +23:6/0/terrain = 0 +23:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +23:6/0/terrains_peering_bit/bottom_side = 0 +23:6/0/terrains_peering_bit/left_side = 0 +22:6/0 = 0 +22:6/0/terrain_set = 1 +22:6/0/terrain = 0 +22:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +22:6/0/terrains_peering_bit/right_side = 0 +22:6/0/terrains_peering_bit/left_side = 0 +24:8/0 = 0 +24:8/0/terrain_set = 1 +24:8/0/terrain = 0 +24:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +24:8/0/terrains_peering_bit/top_side = 0 +24:7/0 = 0 +24:7/0/terrain_set = 1 +24:7/0/terrain = 0 +24:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +24:7/0/terrains_peering_bit/bottom_side = 0 +24:6/0 = 0 +24:6/0/terrain_set = 1 +24:6/0/terrain = 0 +24:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +24:6/0/terrains_peering_bit/right_side = 0 +24:6/0/terrains_peering_bit/bottom_side = 0 +24:6/0/terrains_peering_bit/left_side = 0 +24:6/0/terrains_peering_bit/top_side = 0 +25:6/0 = 0 +25:6/0/terrain_set = 1 +25:6/0/terrain = 0 +25:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +25:6/0/terrains_peering_bit/right_side = 0 +25:6/0/terrains_peering_bit/bottom_side = 0 +25:6/0/terrains_peering_bit/left_side = 0 +25:7/0 = 0 +25:7/0/terrain_set = 1 +25:7/0/terrain = 0 +25:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +25:7/0/terrains_peering_bit/right_side = 0 +25:7/0/terrains_peering_bit/bottom_side = 0 +25:7/0/terrains_peering_bit/top_side = 0 +26:7/0 = 0 +26:7/0/terrain_set = 1 +26:7/0/terrain = 0 +26:7/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:7/0/terrains_peering_bit/right_side = 0 +26:7/0/terrains_peering_bit/left_side = 0 +26:7/0/terrains_peering_bit/top_side = 0 +26:6/0 = 0 +26:6/0/terrain_set = 1 +26:6/0/terrain = 0 +26:6/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:6/0/terrains_peering_bit/bottom_side = 0 +26:6/0/terrains_peering_bit/left_side = 0 +26:6/0/terrains_peering_bit/top_side = 0 +25:8/0 = 0 +25:8/0/terrain_set = 1 +25:8/0/terrain = 0 +25:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +25:8/0/terrains_peering_bit/right_side = 0 +26:8/0 = 0 +26:8/0/terrain_set = 1 +26:8/0/terrain = 0 +26:8/0/physics_layer_0/polygon_0/points = PackedVector2Array(-8, -8, 8, -8, 8, 8, -8, 8) +26:8/0/terrains_peering_bit/left_side = 0 + +[resource] +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Terrain 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +terrain_set_1/mode = 0 +terrain_set_1/terrain_0/name = "Terrain 0" +terrain_set_1/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +sources/0 = SubResource("TileSetAtlasSource_12wsl") diff --git a/Scenes/game.tscn b/Scenes/game.tscn index b6cad98..31c4884 100644 --- a/Scenes/game.tscn +++ b/Scenes/game.tscn @@ -1,46 +1,273 @@ -[gd_scene load_steps=6 format=4 uid="uid://csyk43kt3xbyx"] +[gd_scene load_steps=23 format=4 uid="uid://csyk43kt3xbyx"] -[ext_resource type="TileSet" uid="uid://b15j7vhkfu415" path="res://Resources/environment.tres" id="1_ebmjs"] +[ext_resource type="TileSet" uid="uid://b15j7vhkfu415" path="res://Resources/environmentTileMap.tres" id="1_ebmjs"] [ext_resource type="Script" uid="uid://djp8dmixf6sq2" path="res://Scripts/Common/GameController.cs" id="1_i6g32"] -[ext_resource type="PackedScene" uid="uid://cx7gr555b1gov" path="res://Prefabs/player.tscn" id="3_3dryh"] -[ext_resource type="PackedScene" uid="uid://y54cvugsx75b" path="res://Prefabs/Enemies/rock_boi.tscn" id="5_wowpa"] +[ext_resource type="Script" uid="uid://bhxyvnirfeipr" path="res://Scripts/Enemies/EnemyPool.cs" id="2_i6g32"] +[ext_resource type="Script" uid="uid://cds2rrl4yjexf" path="res://Scripts/Enemies/EnemySpawner.cs" id="3_1l0tm"] +[ext_resource type="Texture2D" uid="uid://bnq8qxou2sgvw" path="res://Assets/Sprites/Environments/sakura.png" id="5_i6g32"] +[ext_resource type="PackedScene" uid="uid://y54cvugsx75b" path="res://Prefabs/Enemies/stone.tscn" id="5_wowpa"] +[ext_resource type="Texture2D" uid="uid://cs7vjtoap8v26" path="res://Assets/Sprites/Environments/environment.png" id="6_i6g32"] +[ext_resource type="Texture2D" uid="uid://dxon2g2sn48jq" path="res://Assets/Sprites/Projectiles/blueflame.png" id="8_ldgsr"] +[ext_resource type="Script" uid="uid://dxx6nyrs12mr6" path="res://Scripts/Common/ProjectileParent.cs" id="8_v158k"] +[ext_resource type="Script" uid="uid://df0osorq00h7v" path="res://Scripts/CameraController.cs" id="10_ldgsr"] -[sub_resource type="NavigationPolygon" id="NavigationPolygon_wrm1d"] -vertices = PackedVector2Array(-114.07031, 51, -115, 51, -115, 50.070313, -43, -27, -43, -34.820313, -39.09375, -27, -85, 51, -93.92969, 51, -91, 48.070313, -85, 43, 80.07031, -11, 85, -15.9296875, 92.90625, -17, 83.90625, 1, 51, 19, 194.35156, -122.36719, 204, -61.59375, 204, 8.03125, 149, -27, 149, -53, 170.78125, -142.3125, -91, 39, -75, 21, 51, 37, 75, 27, 75, 53, 59, 75, 16.070313, -59, 21, -63.929688, 43, -75, 43, -61.179688, 35.90625, -47, 11, -25, 149, 21, 149, -21, 204.99219, 82.72656, 85, -25, 91, -27, 27, -75, 21, -73, 123, -53, 123, -45, 117, -45, 117, -69, 91, -69, 91, -61, 85, -61, 85, -85, 69, -85, 69, -101, 105.5, -154.00781, 53, -101, 53, -117, 11, -117, 11, -99, 5, -99, 5, -117, 7.96875, -156.99219, -37, -91, -29, -91, -29, -85, -69, -85, -69, -59, -61, -59, -61, -53, -101, -53, -101, -11, -93, -11, -93, -5, -133, -5, -115, 21, -115, 13, -101, 13, -101, 21, -75, 5, -63.929688, 5, -59, 43, -59, -9, -75, -9, -75, -21, -69, -27, -83, -21, -83, -35, -69, -35, -43, -45, -43, -67, -37, -67, -37, -59, 0.09375, -45, -11, -59, -11, -99, -5, -73, 27, -99, -5, -63.929688, 59, -47, 59, -43, 37, -25, 91, -43, 59, -25, 131, -21, 131, -5, 121.09375, -5, 115.09375, -17, 59, -15.9296875, 37, -15.9296875, -0.0703125, -59, 107, 1, 107, 11, 91, 11, 91, 27, 83, 53, 83, 75, 59, 95, 44.90625, 95, -3, 37, 35.90625, 113, 67, 113, 67, 131, 27, 131, 21, 112.07031, 21, 103, 16.070313, 117, 21, 131, 27, 149, 21, 149, -19, 131, -0.0703125, 117, -19, 101, -5, 112.07031, -11, 101, -5, 103, -60.09375, 81, -37, 81, -37, 83, -67, 83, -67, 69, -59, 69, -51.09375, 63, -115, 39, -115, 27, -133, 69, -85, 69, -85, 101, -148.60156, 175.10156, -173.40625, 162.70313, -183.03125, 94.39844, -37, 101, -37, 149, -76.6875, 182, 168.10938, 173.17188, 90.77344, 181, 85, 149, 85, 101, 101, 101, 196.29688, 152.25, 101, 53, 117, 53, 117, 37, 133, 37, 133, 21, -8.90625, -27, 11, -15.9296875, -3, 19, -72.63281, -155, -37, -117, -157.07813, -144.32031, -178.24219, -112.11719, -188, -52.5625, -189.99219, 9.921875, -133, 21, 63.929688, -11, -11, 75, -22.90625, 75, -28.90625, 63, 7.9296875, 182.99219, -59, 0.0703125, 32.070313, -11, 15.9296875, -11, -133, 27) -polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2), PackedInt32Array(3, 4, 5), PackedInt32Array(6, 7, 8, 9), PackedInt32Array(10, 11, 12, 13, 14), PackedInt32Array(15, 16, 17, 18, 19, 20), PackedInt32Array(9, 8, 21, 22), PackedInt32Array(23, 14, 24, 25, 26), PackedInt32Array(27, 28, 29, 30, 31, 32), PackedInt32Array(33, 34, 17, 35), PackedInt32Array(18, 17, 34), PackedInt32Array(12, 11, 36, 37), PackedInt32Array(38, 29, 28, 39), PackedInt32Array(40, 41, 42, 43), PackedInt32Array(44, 45, 46, 47), PackedInt32Array(47, 48, 49, 50), PackedInt32Array(49, 51, 52, 50), PackedInt32Array(53, 54, 55, 56, 57), PackedInt32Array(58, 59, 60, 61), PackedInt32Array(62, 63, 64, 65), PackedInt32Array(66, 67, 68, 69), PackedInt32Array(70, 71, 72, 73), PackedInt32Array(22, 74, 75, 76), PackedInt32Array(77, 78, 79, 80, 3), PackedInt32Array(79, 81, 82, 83, 80), PackedInt32Array(84, 85, 86, 87), PackedInt32Array(88, 84, 87, 89), PackedInt32Array(89, 90, 55, 91), PackedInt32Array(54, 92, 38, 39, 91), PackedInt32Array(55, 54, 91), PackedInt32Array(89, 91, 93), PackedInt32Array(31, 94, 95, 96, 32), PackedInt32Array(95, 97, 37, 36, 98), PackedInt32Array(37, 18, 34, 99), PackedInt32Array(99, 100, 101, 102), PackedInt32Array(37, 99, 102, 12), PackedInt32Array(98, 103, 14, 104, 96), PackedInt32Array(95, 98, 96), PackedInt32Array(105, 27, 32, 88), PackedInt32Array(13, 106, 107, 108), PackedInt32Array(13, 108, 109, 24, 14), PackedInt32Array(25, 110, 111, 26), PackedInt32Array(26, 112, 113, 114, 23), PackedInt32Array(115, 116, 117, 118), PackedInt32Array(115, 118, 119, 120), PackedInt32Array(121, 119, 118, 122), PackedInt32Array(118, 123, 124, 122), PackedInt32Array(121, 122, 125, 126), PackedInt32Array(126, 125, 127, 128), PackedInt32Array(128, 127, 129, 130), PackedInt32Array(131, 132, 133, 134), PackedInt32Array(131, 134, 135, 136), PackedInt32Array(137, 131, 136), PackedInt32Array(137, 136, 76), PackedInt32Array(21, 138, 139, 73, 22), PackedInt32Array(140, 141, 142, 143, 144, 145), PackedInt32Array(142, 146, 147, 148, 143), PackedInt32Array(149, 150, 151, 152, 153, 154), PackedInt32Array(153, 155, 156, 35, 154), PackedInt32Array(156, 157, 158, 35), PackedInt32Array(158, 159, 33, 35), PackedInt32Array(88, 89, 93, 105), PackedInt32Array(160, 88, 32, 161, 162), PackedInt32Array(113, 115, 120, 114), PackedInt32Array(50, 20, 19, 40, 43), PackedInt32Array(50, 43, 44, 47), PackedInt32Array(57, 50, 52, 53), PackedInt32Array(163, 57, 56, 164), PackedInt32Array(165, 163, 164, 58, 61, 166), PackedInt32Array(167, 166, 61, 62, 65), PackedInt32Array(167, 65, 66, 69), PackedInt32Array(168, 167, 69, 169, 145), PackedInt32Array(170, 10, 14), PackedInt32Array(114, 120, 130, 129, 171), PackedInt32Array(114, 171, 172, 173), PackedInt32Array(151, 150, 174, 123), PackedInt32Array(124, 123, 174), PackedInt32Array(147, 124, 174, 148), PackedInt32Array(3, 5, 162, 114, 173, 137, 76, 175), PackedInt32Array(103, 170, 14), PackedInt32Array(176, 104, 14), PackedInt32Array(176, 14, 162, 177), PackedInt32Array(161, 177, 162), PackedInt32Array(5, 160, 162), PackedInt32Array(178, 140, 145), PackedInt32Array(178, 145, 169), PackedInt32Array(178, 169, 70, 139), PackedInt32Array(139, 70, 73), PackedInt32Array(76, 9, 22), PackedInt32Array(76, 75, 175), PackedInt32Array(3, 175, 77)]) -outlines = Array[PackedVector2Array]([PackedVector2Array(-160, -149, -73, -160, 8, -162, 106, -159, 173, -147, 199, -125, 209, -62, 209, 8, 210, 83, 201, 155, 170, 178, 91, 186, 8, 188, -77, 187, -150, 180, -178, 166, -188, 95, -195, 10, -193, -53, -183, -114)]) -parsed_geometry_type = 1 -agent_radius = 5.0 +[sub_resource type="RectangleShape2D" id="RectangleShape2D_1l0tm"] +size = Vector2(19, 11) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1l0tm"] +atlas = ExtResource("6_i6g32") +region = Rect2(176, 107, 32, 37) + +[sub_resource type="AtlasTexture" id="AtlasTexture_o5yvi"] +atlas = ExtResource("8_ldgsr") +region = Rect2(0, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rku1e"] +atlas = ExtResource("8_ldgsr") +region = Rect2(16, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_rfjv2"] +atlas = ExtResource("8_ldgsr") +region = Rect2(32, 0, 16, 32) + +[sub_resource type="AtlasTexture" id="AtlasTexture_1phco"] +atlas = ExtResource("8_ldgsr") +region = Rect2(48, 0, 16, 32) + +[sub_resource type="SpriteFrames" id="SpriteFrames_nb51f"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_o5yvi") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rku1e") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_rfjv2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_1phco") +}], +"loop": true, +"name": &"default", +"speed": 5.0 +}] + +[sub_resource type="Curve2D" id="Curve2D_wowpa"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, -376, 8, 0, 0, 0, 0, -232, 8, 0, 0, 0, 0, -232, 24, 0, 0, 0, 0, -216, 24, 0, 0, 0, 0, -216, 40, 0, 0, 0, 0, -184, 40, 0, 0, 0, 0, -184, 136, 0, 0, 0, 0, -200, 136, 0, 0, 0, 0, -200, 168, 0, 0, 0, 0, -184, 168, 0, 0, 0, 0, -184, 200, 0, 0, 0, 0, -136, 200, 0, 0, 0, 0, -136, 216, 0, 0, 0, 0, -24, 216, 0, 0, 0, 0, -24, 232, 0, 0, 0, 0, 24, 232, 0, 0, 0, 0, 24, 136, 0, 0, 0, 0, 40, 136, 0, 0, 0, 0, 40, 120, 0, 0, 0, 0, 72, 120, 0, 0, 0, 0, 72, 88, 0, 0, 0, 0, 104, 88, 0, 0, 0, 0, 104, 8, 0, 0, 0, 0, 8, 8) +} +point_count = 24 + +[sub_resource type="Curve2D" id="Curve2D_i6g32"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 24, -344, 0, 0, 0, 0, 24, -264, 0, 0, 0, 0, 8, -264, 0, 0, 0, 0, 8, -232, 0, 0, 0, 0, -8, -232, 0, 0, 0, 0, -8, -216, 0, 0, 0, 0, -24, -216, 0, 0, 0, 0, -24, -184, 0, 0, 0, 0, -40, -184, 0, 0, 0, 0, -40, -168, 0, 0, 0, 0, -136, -168, 0, 0, 0, 0, -136, -152, 0, 0, 0, 0, -168, -152, 0, 0, 0, 0, -168, -120, 0, 0, 0, 0, -184, -120, 0, 0, 0, 0, -184, 8, 0, 0, 0, 0, -168, 8, 0, 0, 0, 0, -168, 24, 0, 0, 0, 0, -120, 24, 0, 0, 0, 0, -120, 40, 0, 0, 0, 0, -104, 40, 0, 0, 0, 0, -104, 72, 0, 0, 0, 0, -88, 72, 0, 0, 0, 0, -88, 88, 0, 0, 0, 0, -56, 88, 0, 0, 0, 0, -56, 104, 0, 0, 0, 0, 8, 104, 0, 0, 0, 0, 8, 8) +} +point_count = 28 + +[sub_resource type="Curve2D" id="Curve2D_1l0tm"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 408, 8, 0, 0, 0, 0, 232, 8, 0, 0, 0, 0, 232, -24, 0, 0, 0, 0, 200, -24, 0, 0, 0, 0, 200, -56, 0, 0, 0, 0, 216, -56, 0, 0, 0, 0, 216, -136, 0, 0, 0, 0, 184, -136, 0, 0, 0, 0, 184, -152, 0, 0, 0, 0, 168, -152, 0, 0, 0, 0, 168, -168, 0, 0, 0, 0, 152, -168, 0, 0, 0, 0, 152, -184, 0, 0, 0, 0, 104, -184, 0, 0, 0, 0, 104, -168, 0, 0, 0, 0, 40, -168, 0, 0, 0, 0, 40, -152, 0, 0, 0, 0, -8, -152, 0, 0, 0, 0, -8, -120, 0, 0, 0, 0, -24, -120, 0, 0, 0, 0, -24, -104, 0, 0, 0, 0, -56, -104, 0, 0, 0, 0, -56, -72, 0, 0, 0, 0, -88, -72, 0, 0, 0, 0, -88, -56, 0, 0, 0, 0, -104, -56, 0, 0, 0, 0, -104, -8, 0, 0, 0, 0, -56, -8, 0, 0, 0, 0, -56, 8, 0, 0, 0, 0, 8, 8) +} +point_count = 30 + +[sub_resource type="Curve2D" id="Curve2D_v158k"] +_data = { +"points": PackedVector2Array(0, 0, 0, 0, 8, 400, 0, 0, 0, 0, 8, 280, 0, 0, 0, 0, 56, 280, 0, 0, 0, 0, 56, 264, 0, 0, 0, 0, 72, 264, 0, 0, 0, 0, 72, 200, 0, 0, 0, 0, 152, 200, 0, 0, 0, 0, 152, 216, 0, 0, 0, 0, 184, 216, 0, 0, 0, 0, 184, 168, 0, 0, 0, 0, 216, 168, 0, 0, 0, 0, 216, 72, 0, 0, 0, 0, 200, 72, 0, 0, 0, 0, 200, 24, 0, 0, 0, 0, 152, 24, 0, 0, 0, 0, 152, 8, 0, 0, 0, 0, 136, 8, 0, 0, 0, 0, 136, -40, 0, 0, 0, 0, 120, -40, 0, 0, 0, 0, 120, -72, 0, 0, 0, 0, 88, -72, 0, 0, 0, 0, 88, -88, 0, 0, 0, 0, 56, -88, 0, 0, 0, 0, 56, -104, 0, 0, 0, 0, 24, -104, 0, 0, 0, 0, 24, -88, 0, 0, 0, 0, 8, -88, 0, 0, 0, 0, 8, 8) +} +point_count = 28 + +[sub_resource type="Environment" id="Environment_h4fw4"] +background_mode = 3 +ssr_fade_in = 0.03498875 +glow_enabled = true +glow_intensity = 1.0 +glow_strength = 0.7 +glow_blend_mode = 0 +glow_hdr_scale = 0.0 +fog_light_energy = 4.7 +fog_sun_scatter = 5.5 +fog_sky_affect = 0.0 +fog_height = -898.42 +fog_height_density = 0.07 +adjustment_enabled = true +adjustment_brightness = 0.75 +adjustment_contrast = 1.1 [node name="Root" type="Node2D"] texture_filter = 1 -[node name="GameController" type="Node" parent="." node_paths=PackedStringArray("Player")] +[node name="TurretController" type="Node" parent="."] + +[node name="GameController" type="Node" parent="."] script = ExtResource("1_i6g32") -Player = NodePath("../NavigationRegion2D/YSorted/Player") -[node name="Camera2D" type="Camera2D" parent="."] -zoom = Vector2(2, 2) +[node name="EnemyController" type="Node" parent="."] -[node name="NavigationRegion2D" type="NavigationRegion2D" parent="."] +[node name="EnemyPool" type="Node" parent="EnemyController"] +script = ExtResource("2_i6g32") +_scenes = Dictionary[int, PackedScene]({ +0: ExtResource("5_wowpa") +}) + +[node name="EnemySpawner" type="Node" parent="EnemyController" node_paths=PackedStringArray("_pathParent", "_pool")] +script = ExtResource("3_1l0tm") +_pathParent = NodePath("../../Level/YSorted/EnemyPaths") +_pool = NodePath("../EnemyPool") + +[node name="Level" type="Node2D" parent="."] position = Vector2(-8, -8) -navigation_polygon = SubResource("NavigationPolygon_wrm1d") -[node name="BaseLayer" type="TileMapLayer" parent="NavigationRegion2D"] -tile_map_data = PackedByteArray("AAAAAP//AAABAAEAAAD/////AAABAAEAAAD//wAAAAABAAEAAAAAAAAAAAABAAEAAAABAP7/AAABAAEAAAAAAP7/AAABAAEAAAD///7/AAABAAEAAAD+////AAABAAEAAAD+/wAAAAABAAEAAAD+//7/AAABAAEAAAD9////AAABAAEAAAD9/wAAAAABAAEAAAD9/wEAAAABAAEAAAD9/wIAAAABAAEAAAD+/wIAAAABAAEAAAD//wIAAAABAAEAAAAAAAIAAAABAAEAAAABAAEAAAABAAEAAAABAAAAAAABAAEAAAABAP//AAABAAEAAAD//wEAAAABAAEAAAAAAAEAAAABAAEAAAABAAIAAAABAAEAAAABAAMAAAABAAEAAAACAAMAAAABAAEAAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAADAAEAAAABAAEAAAACAAEAAAABAAEAAAACAAAAAAABAAEAAAACAP//AAABAAEAAAACAP7/AAABAAEAAAD+/wEAAAABAAEAAAAAAAMAAAABAAEAAAD//wMAAAABAAEAAAD+/wMAAAABAAEAAAD9/wMAAAABAAEAAAD8/wMAAAABAAEAAAD8/wIAAAABAAEAAAD8/wEAAAABAAEAAAD8/wAAAAABAAEAAAD8////AAABAAEAAAD8//7/AAABAAEAAAD9//7/AAABAAEAAAD9//3/AAABAAEAAAD+//3/AAABAAEAAAD///3/AAABAAEAAAAAAP3/AAABAAEAAAABAP3/AAABAAEAAAACAP3/AAABAAEAAAADAP7/AAABAAEAAAADAP//AAABAAEAAAADAAAAAAABAAEAAAADAAMAAAABAAEAAAADAP3/AAABAAEAAAD8//3/AAAFAAIAAAD8/wQAAAABAAEAAAD9/wQAAAABAAEAAAD+/wQAAAABAAEAAAD//wQAAAABAAEAAAAAAAQAAAABAAEAAAABAAQAAAABAAEAAAACAAQAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAACAAUAAAABAAEAAAABAAUAAAABAAEAAAAAAAUAAAABAAEAAAD//wUAAAABAAEAAAD+/wUAAAAFAAAAAAD9/wUAAAABAAIAAAD8/wUAAAABAAIAAAD8//z/AAAFAAEAAAD9//z/AAABAAEAAAD+//z/AAABAAEAAAD///z/AAABAAEAAAAAAPz/AAABAAEAAAABAPz/AAABAAEAAAACAPz/AAABAAEAAAADAPz/AAABAAEAAAAEAPz/AAADAAIAAAAEAP3/AAABAAEAAAAEAP7/AAABAAEAAAAEAP//AAABAAEAAAAEAAAAAAABAAEAAAAEAAEAAAABAAEAAAAEAAIAAAABAAEAAAAEAAMAAAABAAEAAAAEAAQAAAABAAEAAAAEAAUAAAADAAAAAAD7/wQAAAAAAAEAAAD7/wUAAAAAAAIAAAD7/wMAAAAFAAAAAAD7/wIAAAABAAEAAAD7/wEAAAABAAEAAAD7/wAAAAABAAEAAAD7////AAABAAEAAAD7//7/AAABAAEAAAD7//3/AAABAAAAAAAFAPz/AAAEAAIAAAAFAP3/AAABAAEAAAAFAP7/AAABAAEAAAAFAP//AAABAAEAAAAFAAAAAAABAAEAAAAFAAEAAAABAAEAAAAFAAIAAAADAAAAAAAFAAMAAAACAAEAAAAFAAQAAAACAAEAAAAFAAUAAAACAAIAAAD6/wUAAAAEAAEAAAD6/wQAAAAEAAEAAAD6/wMAAAABAAIAAAD6/wIAAAABAAEAAAD6/wEAAAABAAEAAAD6/wAAAAAFAAIAAAD6////AAAFAAEAAAD6//7/AAAAAAEAAAD6//3/AAAAAAAAAAD6//z/AAAEAAEAAAD6//v/AAAEAAEAAAD7//v/AAAEAAEAAAD8//v/AAAAAAAAAAD9//v/AAABAAAAAAD+//v/AAAFAAIAAAD///v/AAABAAEAAAAAAPv/AAABAAEAAAABAPv/AAABAAEAAAACAPv/AAABAAEAAAADAPv/AAADAAIAAAAEAPv/AAACAAAAAAAFAPv/AAAEAAEAAAAGAPv/AAAEAAEAAAAGAPz/AAACAAAAAAAGAP3/AAADAAIAAAAGAP7/AAABAAEAAAAGAP//AAABAAEAAAAGAAAAAAABAAEAAAAGAAEAAAADAAAAAAAGAAIAAAACAAIAAAAGAAMAAAAEAAEAAAAHAAMAAAAEAAEAAAAHAAQAAAAEAAEAAAAGAAQAAAAEAAEAAAAGAAUAAAAEAAEAAAAHAAUAAAAEAAEAAAAHAAIAAAAEAAEAAAAHAAEAAAACAAIAAAAHAAAAAAADAAAAAAAHAP//AAABAAEAAAAHAP7/AAABAAEAAAAHAP3/AAAEAAIAAAAHAPv/AAAEAAEAAAAHAPr/AAAEAAEAAAAGAPr/AAAEAAEAAAAHAPz/AAAEAAEAAAAFAPr/AAAEAAEAAAAEAPr/AAAEAAEAAAADAPr/AAACAAAAAAACAPr/AAADAAIAAAABAPr/AAABAAEAAAAAAPr/AAABAAEAAAD///r/AAABAAEAAAD+//r/AAAFAAEAAAD9//r/AAAEAAEAAAD8//r/AAAEAAEAAAD7//r/AAAEAAEAAAD6//r/AAAEAAEAAAD5//r/AAAEAAEAAAD4//r/AAAEAAEAAAD4//v/AAAEAAEAAAD5//v/AAAEAAEAAAD5//z/AAAEAAEAAAD5//3/AAAEAAEAAAD5//7/AAAEAAEAAAD5////AAAEAAEAAAD4////AAAEAAEAAAD4/wAAAAAAAAAAAAD4/wEAAAAEAAEAAAD4/wIAAAAAAAEAAAD4/wMAAAAAAAIAAAD4/wQAAAAEAAEAAAD4/wUAAAAEAAEAAAD5/wUAAAAEAAEAAAD5/wQAAAAEAAEAAAD5/wMAAAABAAIAAAD5/wIAAAABAAEAAAD5/wEAAAABAAEAAAD4//z/AAAEAAEAAAD4//3/AAAEAAEAAAD4//7/AAAEAAEAAAD5/wAAAAABAAAAAAD4/wYAAAAEAAEAAAD5/wcAAAAEAAEAAAD5/wgAAAAEAAEAAAD6/wkAAAAEAAEAAAD4/wcAAAAEAAEAAAD4/wgAAAAEAAEAAAD4/wkAAAAEAAEAAAD5/wkAAAAEAAEAAAD6/wgAAAAEAAEAAAD5/wYAAAAEAAEAAAD6/wYAAAAEAAEAAAD6/wcAAAAEAAEAAAD7/wYAAAAEAAEAAAD7/wcAAAAEAAEAAAD7/wgAAAAEAAEAAAD7/wkAAAAEAAEAAAD8/wYAAAAEAAEAAAD8/wcAAAAEAAEAAAD8/wgAAAAEAAEAAAD8/wkAAAAEAAEAAAD9/wYAAAAEAAEAAAD9/wcAAAAEAAEAAAD9/wgAAAAEAAEAAAD9/wkAAAAEAAEAAAD+/wYAAAAAAAEAAAD+/wcAAAAAAAEAAAD+/wgAAAAAAAIAAAD+/wkAAAAEAAEAAAD//wYAAAABAAEAAAD//wcAAAABAAEAAAD//wgAAAABAAIAAAD//wkAAAAEAAEAAAAAAAYAAAABAAEAAAAAAAcAAAABAAEAAAAAAAgAAAABAAIAAAAAAAkAAAAEAAEAAAABAAYAAAABAAEAAAABAAcAAAABAAEAAAABAAgAAAAEAAEAAAABAAkAAAAEAAEAAAACAAYAAAABAAEAAAACAAcAAAABAAEAAAACAAgAAAABAAIAAAACAAkAAAAEAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAIAAAADAAkAAAAEAAEAAAAEAAYAAAACAAEAAAAEAAcAAAACAAEAAAAEAAgAAAACAAIAAAAEAAkAAAAEAAEAAAAFAAYAAAAEAAEAAAAFAAcAAAAEAAEAAAAFAAgAAAAEAAEAAAAFAAkAAAAEAAEAAAAGAAYAAAAEAAEAAAAGAAcAAAAEAAEAAAAGAAgAAAAEAAEAAAAGAAkAAAAEAAEAAAAHAAYAAAAEAAEAAAAHAAcAAAAEAAEAAAAHAAgAAAAEAAEAAAAHAAkAAAAEAAEAAAAIAPr/AAAEAAEAAAAIAPv/AAAEAAEAAAAIAPz/AAAEAAEAAAAIAP3/AAACAAAAAAAIAP7/AAAEAAEAAAAIAP//AAACAAEAAAAIAAAAAAACAAIAAAAIAAEAAAAEAAEAAAAIAAIAAAAEAAEAAAAIAAMAAAAEAAEAAAAIAAQAAAAEAAEAAAAIAAUAAAAEAAEAAAAIAAYAAAAEAAEAAAAIAAcAAAAEAAEAAAAIAAgAAAAEAAEAAAAIAAkAAAAEAAEAAAAJAPr/AAAEAAEAAAAJAPv/AAAEAAEAAAAJAPz/AAAEAAEAAAAJAP3/AAAEAAEAAAAJAP7/AAAEAAEAAAAJAP//AAAEAAEAAAAJAAAAAAAEAAEAAAAJAAEAAAAEAAEAAAAJAAIAAAAEAAEAAAAJAAMAAAAEAAEAAAAJAAQAAAAEAAEAAAAJAAUAAAAEAAEAAAAJAAYAAAAEAAEAAAAJAAcAAAAEAAEAAAAJAAgAAAAEAAEAAAAJAAkAAAAEAAEAAAAKAPr/AAAEAAEAAAAKAPv/AAAEAAEAAAAKAPz/AAAEAAEAAAAKAP3/AAAEAAEAAAAKAP7/AAAEAAEAAAAKAP//AAAEAAEAAAAKAAAAAAAEAAEAAAAKAAEAAAAEAAEAAAAKAAIAAAAEAAEAAAAKAAMAAAAEAAEAAAAKAAQAAAAEAAEAAAAKAAUAAAAEAAEAAAAKAAYAAAAEAAEAAAAKAAcAAAAEAAEAAAAKAAgAAAAEAAEAAAAKAAkAAAAEAAEAAAALAPr/AAAEAAEAAAALAPv/AAAEAAEAAAALAPz/AAAEAAEAAAALAP3/AAAEAAEAAAALAP7/AAAEAAEAAAALAP//AAAEAAEAAAALAAAAAAAEAAEAAAALAAEAAAAEAAEAAAALAAIAAAAEAAEAAAALAAMAAAAEAAEAAAALAAQAAAAEAAEAAAALAAUAAAAEAAEAAAALAAYAAAAEAAEAAAALAAcAAAAEAAEAAAALAAgAAAAEAAEAAAALAAkAAAAEAAEAAAAMAPr/AAAEAAEAAAAMAPv/AAAEAAEAAAAMAPz/AAAEAAEAAAAMAP3/AAAEAAEAAAAMAP7/AAAEAAEAAAAMAP//AAAEAAEAAAAMAAAAAAAEAAEAAAAMAAEAAAAEAAEAAAAMAAIAAAAEAAEAAAAMAAMAAAAEAAEAAAAMAAQAAAAEAAEAAAAMAAUAAAAEAAEAAAAMAAYAAAAEAAEAAAAMAAcAAAAEAAEAAAAMAAgAAAAEAAEAAAAMAAkAAAAEAAEAAAD4//b/AAAEAAEAAAD4//f/AAAEAAEAAAD4//j/AAAEAAEAAAD4//n/AAAEAAEAAAD5//b/AAAEAAEAAAD5//f/AAAEAAEAAAD5//j/AAAEAAEAAAD5//n/AAAEAAEAAAD6//b/AAAEAAEAAAD6//f/AAAEAAEAAAD6//j/AAAEAAEAAAD6//n/AAAEAAEAAAD7//b/AAAEAAEAAAD7//f/AAAEAAEAAAD7//j/AAAEAAEAAAD7//n/AAAEAAEAAAD8//b/AAAEAAEAAAD8//f/AAAEAAEAAAD8//j/AAAEAAEAAAD8//n/AAAEAAEAAAD9//b/AAAEAAEAAAD9//f/AAAEAAEAAAD9//j/AAAEAAEAAAD9//n/AAAEAAEAAAD+//b/AAAEAAEAAAD+//f/AAAEAAEAAAD+//j/AAAEAAEAAAD+//n/AAAAAAAAAAD///b/AAAEAAEAAAD///f/AAAEAAEAAAD///j/AAAEAAEAAAD///n/AAABAAAAAAAAAPb/AAAEAAEAAAAAAPf/AAAEAAEAAAAAAPj/AAAEAAEAAAAAAPn/AAAEAAEAAAABAPb/AAAEAAEAAAABAPf/AAAEAAEAAAABAPj/AAAEAAEAAAABAPn/AAABAAAAAAACAPb/AAAEAAEAAAACAPf/AAAEAAEAAAACAPj/AAAEAAEAAAACAPn/AAACAAAAAAADAPb/AAAEAAEAAAADAPf/AAAEAAEAAAADAPj/AAAEAAEAAAADAPn/AAAEAAEAAAAEAPb/AAAEAAEAAAAEAPf/AAAEAAEAAAAEAPj/AAAEAAEAAAAEAPn/AAAEAAEAAAAFAPb/AAAEAAEAAAAFAPf/AAAEAAEAAAAFAPj/AAAEAAEAAAAFAPn/AAAEAAEAAAAGAPb/AAAEAAEAAAAGAPf/AAAEAAEAAAAGAPj/AAAEAAEAAAAGAPn/AAAEAAEAAAAHAPb/AAAEAAEAAAAHAPf/AAAEAAEAAAAHAPj/AAAEAAEAAAAHAPn/AAAEAAEAAAAIAPb/AAAEAAEAAAAIAPf/AAAEAAEAAAAIAPj/AAAEAAEAAAAIAPn/AAAEAAEAAAAJAPb/AAAEAAEAAAAJAPf/AAAEAAEAAAAJAPj/AAAEAAEAAAAJAPn/AAAEAAEAAAAKAPb/AAAEAAEAAAAKAPf/AAAEAAEAAAAKAPj/AAAEAAEAAAAKAPn/AAAEAAEAAAALAPb/AAAEAAEAAAALAPf/AAAEAAEAAAALAPj/AAAEAAEAAAALAPn/AAAEAAEAAAAMAPb/AAAEAAEAAAAMAPf/AAAEAAEAAAAMAPj/AAAEAAEAAAAMAPn/AAAEAAEAAAD0//b/AAAEAAEAAAD0//f/AAAEAAEAAAD0//j/AAAEAAEAAAD0//n/AAAEAAEAAAD0//r/AAAEAAEAAAD0//v/AAAEAAEAAAD0//z/AAAEAAEAAAD0//3/AAAEAAEAAAD0//7/AAAEAAEAAAD0////AAAEAAEAAAD0/wAAAAAEAAEAAAD0/wEAAAAEAAEAAAD0/wIAAAAEAAEAAAD0/wMAAAAEAAEAAAD0/wQAAAAEAAEAAAD0/wUAAAAEAAEAAAD0/wYAAAAEAAEAAAD0/wcAAAAEAAEAAAD0/wgAAAAEAAEAAAD0/wkAAAAEAAEAAAD1//b/AAAEAAEAAAD1//f/AAAEAAEAAAD1//j/AAAEAAEAAAD1//n/AAAEAAEAAAD1//r/AAAEAAEAAAD1//v/AAAEAAEAAAD1//z/AAAEAAEAAAD1//3/AAAEAAEAAAD1//7/AAAEAAEAAAD1////AAAEAAEAAAD1/wAAAAAEAAEAAAD1/wEAAAAEAAEAAAD1/wIAAAAEAAEAAAD1/wMAAAAEAAEAAAD1/wQAAAAEAAEAAAD1/wUAAAAEAAEAAAD1/wYAAAAEAAEAAAD1/wcAAAAEAAEAAAD1/wgAAAAEAAEAAAD1/wkAAAAEAAEAAAD2//b/AAAEAAEAAAD2//f/AAAEAAEAAAD2//j/AAAEAAEAAAD2//n/AAAEAAEAAAD2//r/AAAEAAEAAAD2//v/AAAEAAEAAAD2//z/AAAEAAEAAAD2//3/AAAEAAEAAAD2//7/AAAEAAEAAAD2////AAAEAAEAAAD2/wAAAAAEAAEAAAD2/wEAAAAEAAEAAAD2/wIAAAAEAAEAAAD2/wMAAAAEAAEAAAD2/wQAAAAEAAEAAAD2/wUAAAAEAAEAAAD2/wYAAAAEAAEAAAD2/wcAAAAEAAEAAAD2/wgAAAAEAAEAAAD2/wkAAAAEAAEAAAD3//b/AAAEAAEAAAD3//f/AAAEAAEAAAD3//j/AAAEAAEAAAD3//n/AAAEAAEAAAD3//r/AAAEAAEAAAD3//v/AAAEAAEAAAD3//z/AAAEAAEAAAD3//3/AAAEAAEAAAD3//7/AAAEAAEAAAD3////AAAEAAEAAAD3/wAAAAAEAAEAAAD3/wEAAAAEAAEAAAD3/wIAAAAEAAEAAAD3/wMAAAAEAAEAAAD3/wQAAAAEAAEAAAD3/wUAAAAEAAEAAAD3/wYAAAAEAAEAAAD3/wcAAAAEAAEAAAD3/wgAAAAEAAEAAAD3/wkAAAAEAAEAAAD0/woAAAAEAAEAAAD0/wsAAAAEAAEAAAD0/wwAAAAEAAEAAAD0/w0AAAAEAAEAAAD0/w4AAAAEAAEAAAD1/woAAAAEAAEAAAD1/wsAAAAEAAEAAAD1/wwAAAAEAAEAAAD1/w0AAAAEAAEAAAD1/w4AAAAEAAEAAAD2/woAAAAEAAEAAAD2/wsAAAAEAAEAAAD2/wwAAAAEAAEAAAD2/w0AAAAEAAEAAAD2/w4AAAAEAAEAAAD3/woAAAAEAAEAAAD3/wsAAAAEAAEAAAD3/wwAAAAEAAEAAAD3/w0AAAAEAAEAAAD3/w4AAAAEAAEAAAD4/woAAAAEAAEAAAD4/wsAAAAEAAEAAAD4/wwAAAAEAAEAAAD4/w0AAAAEAAEAAAD4/w4AAAAEAAEAAAD5/woAAAAEAAEAAAD5/wsAAAAEAAEAAAD5/wwAAAAEAAEAAAD5/w0AAAAEAAEAAAD5/w4AAAAEAAEAAAD6/woAAAAEAAEAAAD6/wsAAAAEAAEAAAD6/wwAAAAEAAEAAAD6/w0AAAAEAAEAAAD6/w4AAAAEAAEAAAD7/woAAAAEAAEAAAD7/wsAAAAEAAEAAAD7/wwAAAAEAAEAAAD7/w0AAAAEAAEAAAD7/w4AAAAEAAEAAAD8/woAAAAEAAEAAAD8/wsAAAAEAAEAAAD8/wwAAAAEAAEAAAD8/w0AAAAEAAEAAAD8/w4AAAAEAAEAAAD9/woAAAAEAAEAAAD9/wsAAAAEAAEAAAD9/wwAAAAEAAEAAAD9/w0AAAAEAAEAAAD9/w4AAAAEAAEAAAD+/woAAAAEAAEAAAD+/wsAAAAEAAEAAAD+/wwAAAAEAAEAAAD+/w0AAAAEAAEAAAD+/w4AAAAEAAEAAAD//woAAAAEAAEAAAD//wsAAAAEAAEAAAD//wwAAAAEAAEAAAD//w0AAAAEAAEAAAD//w4AAAAEAAEAAAAAAAoAAAAEAAEAAAAAAAsAAAAEAAEAAAAAAAwAAAAEAAEAAAAAAA0AAAAEAAEAAAAAAA4AAAAEAAEAAAABAAoAAAAEAAEAAAABAAsAAAAEAAEAAAABAAwAAAAEAAEAAAABAA0AAAAEAAEAAAABAA4AAAAEAAEAAAACAAoAAAAEAAEAAAACAAsAAAAEAAEAAAACAAwAAAAEAAEAAAACAA0AAAAEAAEAAAACAA4AAAAEAAEAAAADAAoAAAAEAAEAAAADAAsAAAAEAAEAAAADAAwAAAAEAAEAAAADAA0AAAAEAAEAAAADAA4AAAAEAAEAAAAEAAoAAAAEAAEAAAAEAAsAAAAEAAEAAAAEAAwAAAAEAAEAAAAEAA0AAAAEAAEAAAAEAA4AAAAEAAEAAAAFAAoAAAAEAAEAAAAFAAsAAAAEAAEAAAAFAAwAAAAEAAEAAAAFAA0AAAAEAAEAAAAFAA4AAAAEAAEAAAAGAAoAAAAEAAEAAAAGAAsAAAAEAAEAAAAGAAwAAAAEAAEAAAAGAA0AAAAEAAEAAAAGAA4AAAAEAAEAAAAHAAoAAAAEAAEAAAAHAAsAAAAEAAEAAAAHAAwAAAAEAAEAAAAHAA0AAAAEAAEAAAAHAA4AAAAEAAEAAAAIAAoAAAAEAAEAAAAIAAsAAAAEAAEAAAAIAAwAAAAEAAEAAAAIAA0AAAAEAAEAAAAIAA4AAAAEAAEAAAAJAAoAAAAEAAEAAAAJAAsAAAAEAAEAAAAJAAwAAAAEAAEAAAAJAA0AAAAEAAEAAAAJAA4AAAAEAAEAAAAKAAoAAAAEAAEAAAAKAAsAAAAEAAEAAAAKAAwAAAAEAAEAAAAKAA0AAAAEAAEAAAAKAA4AAAAEAAEAAAALAAoAAAAEAAEAAAALAAsAAAAEAAEAAAALAAwAAAAEAAEAAAALAA0AAAAEAAEAAAALAA4AAAAEAAEAAAAMAAoAAAAEAAEAAAAMAAsAAAAEAAEAAAAMAAwAAAAEAAEAAAAMAA0AAAAEAAEAAAAMAA4AAAAEAAEAAAD7//z/AAAEAAEAAAA=") +[node name="Upper" type="TileMapLayer" parent="Level"] +tile_map_data = PackedByteArray("AAAAAP//AAABAAEAAAD/////AAABAAEAAAD//wAAAAAIAAAAAAAAAAAAAAABAAEAAAABAP7/AAABAAEAAAAAAP7/AAABAAEAAAD///7/AAAIAAAAABD+/wAAAAABAAEAAAD+//7/AAABAAEAAAD9////AAABAAEAAAD9/wAAAAABAAEAAAD9/wEAAAABAAEAAAD9/wIAAAABAAEAAAD+/wIAAAABAAEAAAD//wIAAAABAAEAAAAAAAIAAAABAAEAAAABAAEAAAAJAAAAAAABAAAAAAABAAEAAAABAP//AAABAAEAAAD//wEAAAABAAEAAAAAAAEAAAABAAEAAAABAAIAAAABAAEAAAABAAMAAAABAAEAAAACAAMAAAABAAEAAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAADAAEAAAABAAEAAAACAAEAAAABAAEAAAACAAAAAAABAAEAAAACAP//AAAJAAAAABACAP7/AAABAAEAAAD+/wEAAAABAAEAAAAAAAMAAAABAAEAAAD//wMAAAABAAEAAAD+/wMAAAABAAEAAAD9/wMAAAABAAEAAAD8/wMAAAABAAEAAAD8/wIAAAABAAEAAAD8/wEAAAABAAEAAAD8/wAAAAABAAEAAAD8////AAABAAEAAAD8//7/AAABAAEAAAD9//7/AAABAAEAAAD9//3/AAABAAEAAAD+//3/AAABAAEAAAD///3/AAABAAEAAAAAAP3/AAABAAEAAAABAP3/AAABAAEAAAACAP3/AAABAAEAAAADAP7/AAAJAAAAAAADAAAAAAAHAAAAABADAAMAAAABAAEAAAADAP3/AAABAAEAAAD8//3/AAABAAEAAAD8/wQAAAABAAEAAAD9/wQAAAABAAEAAAD+/wQAAAABAAEAAAD//wQAAAABAAEAAAAAAAQAAAABAAEAAAABAAQAAAABAAEAAAACAAQAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAACAAUAAAABAAEAAAABAAUAAAABAAEAAAAAAAUAAAABAAEAAAD//wUAAAABAAEAAAD+/wUAAAABAAEAAAD9/wUAAAABAAEAAAD8/wUAAAABAAEAAAD8//z/AAABAAEAAAD9//z/AAABAAEAAAD+//z/AAABAAEAAAD///z/AAABAAEAAAAAAPz/AAABAAEAAAABAPz/AAABAAEAAAACAPz/AAABAAEAAAADAPz/AAABAAEAAAAEAPz/AAABAAEAAAAEAP3/AAABAAEAAAAEAP7/AAABAAEAAAAEAP//AAABAAEAAAAEAAAAAAABAAEAAAAEAAEAAAABAAEAAAAEAAIAAAABAAEAAAAEAAMAAAABAAEAAAAEAAQAAAABAAEAAAAEAAUAAAABAAEAAAD7/wQAAAABAAEAAAD7/wUAAAABAAEAAAD7/wMAAAABAAEAAAD7/wIAAAABAAEAAAD7/wEAAAABAAEAAAD7/wAAAAABAAEAAAD7////AAABAAEAAAD7//7/AAABAAEAAAD7//3/AAABAAEAAAAFAP3/AAABAAEAAAAFAP7/AAABAAEAAAAFAP//AAABAAEAAAAFAAAAAAABAAEAAAAFAAEAAAABAAEAAAAFAAIAAAABAAEAAAAFAAMAAAABAAEAAAAFAAQAAAABAAEAAAAFAAUAAAABAAEAAAD6/wUAAAABAAEAAAD6/wQAAAABAAEAAAD6/wMAAAABAAEAAAD6/wIAAAABAAEAAAD6/wEAAAABAAEAAAD6/wAAAAABAAEAAAD6////AAABAAEAAAD6//7/AAABAAEAAAD6//3/AAABAAEAAAD6//z/AAABAAEAAAD6//v/AAABAAEAAAD7//v/AAABAAEAAAD8//v/AAABAAEAAAD9//v/AAABAAEAAAD+//v/AAABAAEAAAD///v/AAABAAEAAAAAAPv/AAABAAEAAAABAPv/AAABAAEAAAACAPv/AAABAAEAAAADAPv/AAABAAEAAAAGAPv/AAABAAEAAAAGAP3/AAABAAEAAAAGAP7/AAABAAEAAAAGAP//AAABAAEAAAAGAAAAAAABAAEAAAAGAAEAAAABAAEAAAAGAAIAAAABAAEAAAAGAAMAAAABAAEAAAAHAAMAAAABAAEAAAAHAAQAAAABAAEAAAAGAAQAAAABAAEAAAAGAAUAAAABAAEAAAAHAAUAAAABAAEAAAAHAAIAAAABAAEAAAAHAAEAAAABAAEAAAAHAAAAAAABAAEAAAAHAP//AAABAAEAAAAHAP7/AAABAAEAAAAHAPv/AAABAAEAAAAHAPr/AAABAAEAAAAGAPr/AAABAAEAAAACAPr/AAABAAEAAAABAPr/AAABAAEAAAAAAPr/AAABAAEAAAD///r/AAABAAEAAAD+//r/AAABAAEAAAD9//r/AAABAAEAAAD8//r/AAABAAEAAAD7//r/AAABAAEAAAD6//r/AAABAAEAAAD5//r/AAABAAEAAAD4//r/AAABAAEAAAD4//v/AAABAAEAAAD5//v/AAABAAEAAAD5//z/AAABAAEAAAD5//3/AAABAAEAAAD5//7/AAABAAEAAAD5////AAABAAEAAAD4////AAABAAEAAAD4/wAAAAABAAEAAAD4/wEAAAABAAEAAAD4/wIAAAABAAEAAAD4/wMAAAABAAEAAAD4/wQAAAABAAEAAAD4/wUAAAABAAEAAAD5/wUAAAABAAEAAAD5/wQAAAABAAEAAAD5/wMAAAABAAEAAAD5/wIAAAABAAEAAAD5/wEAAAABAAEAAAD4//z/AAABAAEAAAD4//3/AAABAAEAAAD4//7/AAABAAEAAAD5/wAAAAABAAEAAAD4/wYAAAABAAEAAAD5/wcAAAABAAEAAAD5/wgAAAABAAEAAAD6/wkAAAABAAEAAAD4/wcAAAABAAEAAAD4/wgAAAABAAEAAAD4/wkAAAAFAAAAAAD5/wkAAAABAAEAAAD6/wgAAAABAAEAAAD5/wYAAAABAAEAAAD6/wYAAAABAAEAAAD6/wcAAAABAAEAAAD7/wYAAAABAAEAAAD7/wcAAAABAAEAAAD7/wgAAAABAAEAAAD7/wkAAAABAAEAAAD8/wYAAAABAAEAAAD8/wcAAAABAAEAAAD8/wgAAAABAAEAAAD8/wkAAAABAAEAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAABAAEAAAD9/wkAAAABAAEAAAD+/wYAAAABAAEAAAD+/wcAAAABAAEAAAD+/wgAAAABAAEAAAD+/wkAAAABAAEAAAD//wYAAAABAAEAAAD//wcAAAABAAEAAAD//wgAAAABAAEAAAD//wkAAAABAAEAAAAAAAYAAAABAAEAAAAAAAcAAAABAAEAAAAAAAgAAAABAAEAAAAAAAkAAAABAAEAAAABAAYAAAABAAEAAAABAAcAAAABAAEAAAABAAgAAAABAAEAAAABAAkAAAABAAEAAAACAAYAAAABAAEAAAACAAcAAAABAAEAAAACAAgAAAABAAEAAAACAAkAAAABAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAEAAAADAAkAAAABAAEAAAAEAAYAAAABAAEAAAAEAAcAAAABAAEAAAAEAAgAAAABAAEAAAAEAAkAAAABAAEAAAAFAAYAAAABAAEAAAAFAAcAAAABAAEAAAAGAAYAAAABAAEAAAAGAAcAAAABAAEAAAAHAAYAAAABAAEAAAAIAPr/AAABAAEAAAAIAPv/AAABAAEAAAAIAP7/AAABAAEAAAAIAP//AAABAAEAAAAIAAAAAAABAAEAAAAIAAEAAAABAAEAAAAIAAIAAAABAAEAAAAIAAMAAAABAAEAAAAIAAQAAAABAAEAAAAIAAUAAAABAAEAAAAIAAYAAAABAAEAAAAIAAkAAAABAAIAAAAJAPr/AAABAAEAAAAJAPv/AAABAAEAAAAJAP7/AAACAAEAAAAJAP//AAADAAIAAAAJAAAAAAABAAEAAAAJAAEAAAABAAEAAAAJAAIAAAABAAEAAAAJAAMAAAADAAAAAAAJAAQAAAADAAEAAAAJAAUAAAADAAEAAAAJAAYAAAACAAEAAAAJAAgAAAADAAEAAAAJAAkAAAACAAIAAAAKAPr/AAADAAEAAAAKAPv/AAADAAEAAAD4//b/AAAAAAAAAAD4//f/AAAAAAEAAAD4//j/AAAFAAIAAAD4//n/AAABAAEAAAD5//b/AAABAAAAAAD5//f/AAABAAEAAAD5//j/AAABAAEAAAD5//n/AAABAAEAAAD6//b/AAABAAAAAAD6//f/AAABAAEAAAD6//j/AAABAAEAAAD6//n/AAABAAEAAAD7//b/AAAEAAIAAAD7//f/AAABAAEAAAD7//j/AAABAAEAAAD7//n/AAABAAEAAAD8//b/AAABAAAAAAD8//f/AAABAAEAAAD8//j/AAABAAEAAAD8//n/AAABAAEAAAD9//b/AAABAAAAAAD9//f/AAABAAEAAAD9//j/AAABAAEAAAD9//n/AAABAAEAAAD+//b/AAACAAAAAAD+//f/AAADAAIAAAD+//j/AAABAAEAAAD+//n/AAABAAEAAAD///j/AAABAAEAAAD///n/AAABAAEAAAAAAPj/AAABAAEAAAAAAPn/AAABAAEAAAABAPf/AAACAAAAAAABAPj/AAADAAIAAAABAPn/AAABAAEAAAACAPj/AAABAAAAAAACAPn/AAABAAEAAAADAPf/AAAAAAAAAAAEAPb/AAAAAAAAAAAEAPf/AAAFAAIAAAAEAPj/AAABAAEAAAAFAPb/AAAEAAIAAAAFAPf/AAABAAEAAAAFAPj/AAABAAEAAAAGAPb/AAABAAAAAAAGAPf/AAABAAEAAAAGAPj/AAABAAEAAAAGAPn/AAABAAEAAAAHAPb/AAABAAAAAAAHAPf/AAABAAEAAAAHAPj/AAABAAEAAAAHAPn/AAABAAEAAAAIAPb/AAACAAAAAAAIAPf/AAADAAIAAAAIAPj/AAABAAEAAAAIAPn/AAABAAEAAAAJAPf/AAACAAAAAAAJAPj/AAADAAEAAAAJAPn/AAADAAIAAAAKAPn/AAACAAAAAAD1//z/AAAAAAAAAAD1//3/AAAAAAEAAAD1//7/AAAFAAEAAAD1////AAAAAAIAAAD2//v/AAAAAAAAAAD2//z/AAAFAAIAAAD2//3/AAABAAEAAAD2//7/AAABAAEAAAD2////AAAFAAAAAAD2/wAAAAAFAAEAAAD2/wMAAAAAAAEAAAD2/wQAAAAAAAEAAAD2/wUAAAAFAAEAAAD2/wYAAAAFAAEAAAD2/wcAAAAFAAEAAAD2/wgAAAAAAAIAAAD3//j/AAAAAAAAAAD3//n/AAAAAAEAAAD3//r/AAAAAAEAAAD3//v/AAAFAAIAAAD3//z/AAABAAEAAAD3//3/AAABAAEAAAD3//7/AAABAAEAAAD3////AAABAAEAAAD3/wAAAAABAAEAAAD3/wEAAAABAAEAAAD3/wIAAAABAAEAAAD3/wMAAAABAAEAAAD3/wQAAAABAAEAAAD3/wUAAAABAAEAAAD3/wYAAAABAAEAAAD3/wcAAAABAAEAAAD3/wgAAAAFAAAAAAD3/wkAAAAAAAIAAAD4/woAAAAAAAIAAAD5/woAAAAEAAAAAAD6/woAAAAFAAAAAAD6/wsAAAAAAAIAAAD7/woAAAABAAEAAAD7/wsAAAAEAAAAAAD8/woAAAABAAEAAAD8/wsAAAAEAAAAAAD9/woAAAABAAEAAAD9/wsAAAABAAIAAAD+/woAAAABAAEAAAD+/wsAAAABAAIAAAD//woAAAADAAAAAAD//wsAAAACAAIAAAACAAoAAAAEAAAAAAADAAoAAAABAAIAAAAEAAoAAAABAAIAAAAGAAoAAAAEAAAAAAAHAAoAAAACAAIAAAD7//z/AAABAAEAAAAFAAoAAAABAAIAAAAFAAkAAAABAAEAAAAFAAgAAAABAAEAAAAGAAgAAAABAAEAAAAHAAgAAAABAAEAAAAHAAkAAAADAAAAAAAGAAkAAAABAAEAAAAIAAgAAAABAAEAAAAHAAcAAAABAAEAAAAIAAcAAAABAAEAAAAJAAcAAAADAAEAAAAKAP//AAACAAAAAAAKAAIAAAACAAEAAAAKAAMAAAACAAIAAAAHAP3/AAABAAEAAAAIAP3/AAABAAEAAAAJAP3/AAADAAAAAAAGAPz/AAABAAEAAAADAPj/AAAFAAIAAAADAPn/AAABAAEAAAAEAPn/AAABAAEAAAAFAPn/AAABAAEAAAAEAPr/AAABAAEAAAAFAPr/AAABAAEAAAAFAPv/AAABAAEAAAAHAPz/AAABAAEAAAAIAPz/AAABAAEAAAAKAP3/AAACAAIAAAAKAPz/AAACAAEAAAAJAPz/AAABAAEAAAAFAPz/AAABAAEAAAAEAPv/AAABAAEAAAADAPr/AAABAAEAAAD+////AAAJAAAAABA=") tile_set = ExtResource("1_ebmjs") -[node name="YSorted" type="Node2D" parent="NavigationRegion2D"] +[node name="Lower" type="TileMapLayer" parent="Level"] +z_index = -1 +tile_map_data = PackedByteArray("AAD1/wcAAAABAAEAAAD2/wcAAAABAAEAAAD2/wgAAAABAAEAAAD1/wgAAAABAAEAAAD0/wgAAAABAAEAAAD0/wcAAAABAAEAAAD0/wYAAAABAAEAAAD1/wYAAAABAAEAAAD2/wkAAAABAAEAAAD1/wkAAAABAAEAAAD0/wkAAAABAAEAAAD3/wgAAAABAAEAAAD3/wkAAAABAAEAAAD3/wcAAAABAAEAAAD3/woAAAABAAEAAAD2/woAAAABAAEAAAD1/woAAAABAAEAAAD4/woAAAABAAEAAAD4/wsAAAABAAEAAAD3/wsAAAABAAEAAAD2/wsAAAABAAEAAAD4/wkAAAABAAEAAAD5/woAAAABAAEAAAD5/wsAAAABAAEAAAD5/wkAAAABAAEAAAD5/wwAAAABAAEAAAD4/wwAAAABAAEAAAD3/wwAAAABAAEAAAD6/wsAAAABAAEAAAD6/wwAAAABAAEAAAD6/woAAAABAAEAAAD7/wsAAAABAAEAAAD7/wwAAAABAAEAAAD7/woAAAABAAEAAAD8/wwAAAABAAEAAAD8/w0AAAABAAEAAAD7/w0AAAABAAEAAAD6/w0AAAABAAEAAAD8/wsAAAABAAEAAAD9/wwAAAABAAEAAAD9/w0AAAABAAEAAAD9/wsAAAABAAEAAAD+/wwAAAABAAEAAAD+/w0AAAABAAEAAAD+/wsAAAABAAEAAAD//wwAAAABAAEAAAD//w0AAAABAAEAAAD//wsAAAABAAEAAAD9/woAAAABAAEAAAD+/woAAAABAAEAAAD//woAAAABAAEAAAAAAAsAAAABAAEAAAAAAAwAAAABAAEAAAAAAAoAAAABAAEAAAABAAsAAAABAAEAAAABAAwAAAABAAEAAAABAAoAAAABAAEAAAD//wkAAAABAAEAAAAAAAkAAAABAAEAAAABAAkAAAABAAEAAAACAAoAAAABAAEAAAACAAsAAAABAAEAAAACAAkAAAABAAEAAAADAAoAAAABAAEAAAADAAsAAAABAAEAAAADAAkAAAABAAEAAAAEAAoAAAABAAEAAAAEAAsAAAABAAEAAAAEAAkAAAABAAEAAAAEAAwAAAABAAEAAAADAAwAAAABAAEAAAACAAwAAAABAAEAAAAFAAsAAAABAAEAAAAFAAwAAAABAAEAAAAFAAoAAAABAAEAAAAGAAsAAAABAAEAAAAGAAwAAAABAAEAAAAGAAoAAAABAAEAAAAHAAsAAAABAAEAAAAHAAwAAAABAAEAAAAHAAoAAAABAAEAAAAIAAsAAAABAAEAAAAIAAwAAAABAAEAAAAIAAoAAAABAAEAAAAGAAkAAAABAAEAAAAHAAkAAAABAAEAAAAIAAkAAAABAAEAAAAJAAoAAAABAAEAAAAJAAsAAAABAAEAAAAJAAkAAAABAAEAAAAKAAoAAAABAAEAAAAKAAsAAAABAAEAAAAKAAkAAAABAAEAAAAIAAgAAAABAAEAAAAJAAgAAAABAAEAAAAKAAgAAAABAAEAAAAIAAcAAAABAAEAAAAJAAcAAAABAAEAAAAKAAcAAAABAAEAAAALAAcAAAABAAEAAAALAAgAAAABAAEAAAAJAAYAAAABAAEAAAAKAAYAAAABAAEAAAALAAYAAAABAAEAAAAJAAUAAAABAAEAAAAKAAUAAAABAAEAAAALAAUAAAABAAEAAAAJAAQAAAABAAEAAAAKAAQAAAABAAEAAAALAAQAAAABAAEAAAAJAAMAAAABAAEAAAAKAAMAAAABAAEAAAALAAMAAAABAAEAAAAJAAIAAAABAAEAAAAKAAIAAAABAAEAAAALAAIAAAABAAEAAAAMAAMAAAABAAEAAAAMAAQAAAABAAEAAAAMAAIAAAABAAEAAAAKAAEAAAABAAEAAAALAAEAAAABAAEAAAAMAAEAAAABAAEAAAAJAAEAAAABAAEAAAAJAAAAAAABAAEAAAAKAAAAAAABAAEAAAALAAAAAAABAAEAAAAMAAAAAAABAAEAAAAKAP//AAABAAEAAAALAP//AAABAAEAAAAMAP//AAABAAEAAAAKAP7/AAABAAEAAAALAP7/AAABAAEAAAAMAP7/AAABAAEAAAAKAP3/AAABAAEAAAALAP3/AAABAAEAAAAMAP3/AAABAAEAAAAJAP//AAABAAEAAAAJAP7/AAABAAEAAAAJAP3/AAABAAEAAAAJAPz/AAABAAEAAAAKAPz/AAABAAEAAAALAPz/AAABAAEAAAANAP7/AAABAAEAAAANAP//AAABAAEAAAANAP3/AAABAAEAAAAMAPz/AAABAAEAAAANAPz/AAABAAEAAAALAPv/AAABAAEAAAAMAPv/AAABAAEAAAANAPv/AAABAAEAAAAKAPv/AAABAAEAAAAKAPr/AAABAAEAAAALAPr/AAABAAEAAAAMAPr/AAABAAEAAAAJAPv/AAABAAEAAAAJAPr/AAABAAEAAAAJAPn/AAABAAEAAAAKAPn/AAABAAEAAAALAPn/AAABAAEAAAAJAPj/AAABAAEAAAAKAPj/AAABAAEAAAALAPj/AAABAAEAAAAMAPn/AAABAAEAAAAMAPj/AAABAAEAAAAKAPf/AAABAAEAAAALAPf/AAABAAEAAAAMAPf/AAABAAEAAAAJAPf/AAABAAEAAAAJAPb/AAABAAEAAAAKAPb/AAABAAEAAAALAPb/AAABAAEAAAAIAPj/AAABAAEAAAAIAPf/AAABAAEAAAAIAPb/AAABAAEAAAAIAPX/AAABAAEAAAAJAPX/AAABAAEAAAAKAPX/AAABAAEAAAAHAPf/AAABAAEAAAAHAPb/AAABAAEAAAAHAPX/AAABAAEAAAAGAPf/AAABAAEAAAAGAPb/AAABAAEAAAAGAPX/AAABAAEAAAAFAPf/AAABAAEAAAAFAPb/AAABAAEAAAAFAPX/AAABAAEAAAAHAPj/AAABAAEAAAAGAPj/AAABAAEAAAAGAPT/AAABAAEAAAAHAPT/AAABAAEAAAAIAPT/AAABAAEAAAAFAPT/AAABAAEAAAAEAPb/AAABAAEAAAAEAPX/AAABAAEAAAAEAPT/AAABAAEAAAAEAPf/AAABAAEAAAADAPf/AAABAAEAAAADAPb/AAABAAEAAAADAPX/AAABAAEAAAAFAPj/AAABAAEAAAAEAPj/AAABAAEAAAADAPj/AAABAAEAAAACAPj/AAABAAEAAAACAPf/AAABAAEAAAACAPb/AAABAAEAAAABAPj/AAABAAEAAAABAPf/AAABAAEAAAABAPb/AAABAAEAAAAAAPj/AAABAAEAAAAAAPf/AAABAAEAAAAAAPb/AAABAAEAAAD///j/AAABAAEAAAD///f/AAABAAEAAAD///b/AAABAAEAAAD+//j/AAABAAEAAAD+//f/AAABAAEAAAD+//b/AAABAAEAAAD9//j/AAABAAEAAAD9//f/AAABAAEAAAD9//b/AAABAAEAAAD9//X/AAABAAEAAAD+//X/AAABAAEAAAD///X/AAABAAEAAAD8//f/AAABAAEAAAD8//b/AAABAAEAAAD8//X/AAABAAEAAAAAAPX/AAABAAEAAAABAPX/AAABAAEAAAACAPX/AAABAAEAAAD7//f/AAABAAEAAAD7//b/AAABAAEAAAD7//X/AAABAAEAAAD7//T/AAABAAEAAAD8//T/AAABAAEAAAD9//T/AAABAAEAAAD6//f/AAABAAEAAAD6//b/AAABAAEAAAD6//X/AAABAAEAAAD5//f/AAABAAEAAAD5//b/AAABAAEAAAD5//X/AAABAAEAAAD4//f/AAABAAEAAAD4//b/AAABAAEAAAD4//X/AAABAAEAAAD3//f/AAABAAEAAAD3//b/AAABAAEAAAD3//X/AAABAAEAAAD2//f/AAABAAEAAAD2//b/AAABAAEAAAD2//X/AAABAAEAAAD3//j/AAABAAEAAAD2//j/AAABAAEAAAD3//T/AAABAAEAAAD4//T/AAABAAEAAAD5//T/AAABAAEAAAD6//T/AAABAAEAAAD5//j/AAABAAEAAAD3//n/AAABAAEAAAD2//n/AAABAAEAAAD3//r/AAABAAEAAAD2//r/AAABAAEAAAD1//r/AAABAAEAAAD1//n/AAABAAEAAAD1//j/AAABAAEAAAD3//v/AAABAAEAAAD2//v/AAABAAEAAAD1//v/AAABAAEAAAD0//v/AAABAAEAAAD0//r/AAABAAEAAAD0//n/AAABAAEAAAD2//z/AAABAAEAAAD1//z/AAABAAEAAAD0//z/AAABAAEAAAD0//3/AAABAAEAAADz//3/AAABAAEAAADz//z/AAABAAEAAADz//v/AAABAAEAAAD1//7/AAABAAEAAAD0//7/AAABAAEAAADz//7/AAABAAEAAAD1////AAABAAEAAAD0////AAABAAEAAADz////AAABAAEAAAD2/wAAAAABAAEAAAD1/wAAAAABAAEAAAD0/wAAAAABAAEAAAD2/wEAAAABAAEAAAD1/wEAAAABAAEAAAD0/wEAAAABAAEAAAD2/wIAAAABAAEAAAD1/wIAAAABAAEAAAD2/wMAAAABAAEAAAD1/wMAAAABAAEAAAD1/wQAAAABAAEAAAD0/wQAAAABAAEAAAD0/wMAAAABAAEAAAD0/wIAAAABAAEAAAD1/wUAAAABAAEAAAD0/wUAAAABAAEAAADz/wYAAAABAAEAAADz/wUAAAABAAEAAADz/wQAAAABAAEAAADz/wMAAAABAAEAAADz/wIAAAABAAEAAADz/wEAAAABAAEAAADz/wAAAAABAAEAAAD3/wYAAAABAAEAAADz/wkAAAABAAEAAADz/wgAAAABAAEAAADz/wcAAAABAAEAAADy/wQAAAABAAEAAADy/wMAAAABAAEAAADy/wIAAAABAAEAAADy/wUAAAABAAEAAADy/wYAAAABAAEAAADy/wcAAAABAAEAAADy/wgAAAABAAEAAAD0/woAAAABAAEAAADz/woAAAABAAEAAAD1/wsAAAABAAEAAAD0/wsAAAABAAEAAAD6/wkAAAABAAEAAAD8/woAAAABAAEAAAD//w4AAAABAAEAAAD+/w4AAAABAAEAAAD9/w4AAAABAAEAAAAAAA0AAAABAAEAAAAAAA4AAAABAAEAAAABAA0AAAABAAEAAAABAA4AAAABAAEAAAACAA0AAAABAAEAAAACAA4AAAABAAEAAAADAA0AAAABAAEAAAAEAA0AAAABAAEAAAAEAA4AAAABAAEAAAADAA4AAAABAAEAAAAFAA0AAAABAAEAAAAGAA0AAAABAAEAAAAHAA0AAAABAAEAAAAIAA0AAAABAAEAAAAJAAwAAAABAAEAAAAJAA0AAAABAAEAAAAKAAwAAAABAAEAAAAKAA0AAAABAAEAAAALAAsAAAABAAEAAAALAAwAAAABAAEAAAALAAoAAAABAAEAAAALAAkAAAABAAEAAAAMAAkAAAABAAEAAAAMAAoAAAABAAEAAAAMAAgAAAABAAEAAAAMAAcAAAABAAEAAAAMAAYAAAABAAEAAAANAAcAAAABAAEAAAANAAgAAAABAAEAAAANAAYAAAABAAEAAAAMAAUAAAABAAEAAAANAAUAAAABAAEAAAAHAAgAAAABAAEAAAANAAQAAAABAAEAAAAOAAUAAAABAAEAAAAOAAYAAAABAAEAAAAOAAQAAAABAAEAAAANAAMAAAABAAEAAAAOAAMAAAABAAEAAAANAAIAAAABAAEAAAAOAAIAAAABAAEAAAANAAEAAAABAAEAAAAOAAEAAAABAAEAAAANAAAAAAABAAEAAAAOAP//AAABAAEAAAAOAAAAAAABAAEAAAAOAP7/AAABAAEAAAAOAP3/AAABAAEAAAAOAPz/AAABAAEAAAAOAPv/AAABAAEAAAAPAPz/AAABAAEAAAAPAP3/AAABAAEAAAAPAPv/AAABAAEAAAANAPr/AAABAAEAAAAOAPr/AAABAAEAAAAPAPr/AAABAAEAAAANAPn/AAABAAEAAAAOAPn/AAABAAEAAAANAPj/AAABAAEAAAAOAPj/AAABAAEAAAANAPf/AAABAAEAAAAOAPf/AAADAAIAAAAMAPb/AAABAAEAAAANAPb/AAABAAEAAAALAPX/AAABAAEAAAAMAPX/AAABAAEAAAANAPX/AAADAAIAAAAKAPT/AAABAAEAAAALAPT/AAABAAEAAAAMAPT/AAABAAEAAAAJAPT/AAABAAEAAAAJAPP/AAABAAEAAAAKAPP/AAABAAEAAAALAPP/AAADAAIAAAAIAPP/AAABAAEAAAAHAPP/AAABAAEAAAAHAPL/AAABAAEAAAAIAPL/AAABAAEAAAAJAPL/AAABAAEAAAAGAPP/AAABAAEAAAAGAPL/AAABAAEAAAAFAPP/AAABAAEAAAAFAPL/AAABAAEAAAAEAPP/AAABAAEAAAADAPT/AAABAAEAAAADAPP/AAABAAEAAAACAPT/AAABAAEAAAACAPP/AAABAAEAAAABAPT/AAABAAEAAAABAPP/AAABAAEAAAAAAPT/AAABAAEAAAAAAPP/AAABAAEAAAD///T/AAABAAEAAAD///P/AAABAAEAAAD+//T/AAABAAEAAAD+//P/AAABAAEAAAD9//P/AAABAAEAAAD8//P/AAABAAEAAAAAAPL/AAABAAEAAAABAPL/AAABAAEAAAACAPL/AAABAAEAAAD///L/AAABAAEAAAD+//L/AAABAAEAAAD9//L/AAABAAEAAAD8//L/AAABAAEAAAD7//P/AAABAAEAAAD7//L/AAABAAEAAAADAPL/AAABAAEAAAAEAPL/AAABAAEAAAD6//P/AAABAAEAAAD5//P/AAABAAEAAAD4//P/AAABAAEAAAD3//P/AAABAAEAAAD5//L/AAABAAEAAAD6//L/AAABAAEAAAD4//L/AAABAAEAAAD2//T/AAABAAEAAAD2//P/AAABAAEAAAD1//X/AAABAAEAAAD1//T/AAABAAEAAAD1//P/AAABAAEAAAD1//b/AAABAAEAAAD0//b/AAABAAEAAAD0//X/AAABAAEAAAD0//T/AAAFAAIAAAD1//f/AAABAAEAAAD0//f/AAABAAEAAADz//f/AAABAAEAAADz//b/AAABAAEAAADz//X/AAAFAAIAAAD0//j/AAABAAEAAADz//j/AAABAAEAAADy//j/AAABAAEAAADy//f/AAAFAAIAAADy//b/AAAFAAEAAADz//n/AAABAAEAAADy//n/AAABAAEAAADz//r/AAABAAEAAADy//r/AAABAAEAAADy//v/AAABAAEAAADy//z/AAABAAEAAADy//3/AAABAAEAAADx//3/AAABAAEAAADx//z/AAABAAEAAADx//v/AAABAAEAAADy//7/AAABAAEAAADx//7/AAABAAEAAADy////AAABAAEAAADx////AAABAAEAAADy/wAAAAABAAEAAADx/wAAAAABAAEAAADy/wEAAAABAAEAAADx/wEAAAABAAEAAADx/wIAAAABAAEAAADx/wMAAAABAAEAAADw/wMAAAABAAEAAADw/wIAAAABAAEAAADw/wEAAAABAAEAAADx/wQAAAABAAEAAADw/wQAAAABAAEAAADx/wUAAAABAAEAAADx/wYAAAABAAEAAADw/wYAAAABAAEAAADw/wUAAAABAAEAAADx/wcAAAABAAEAAADw/wcAAAABAAEAAADw/wAAAAABAAEAAADw////AAABAAEAAADw//7/AAABAAEAAADw//3/AAABAAEAAADw//z/AAABAAEAAADv/wQAAAABAAEAAADv/wMAAAABAAEAAADv/wIAAAABAAEAAADv/wEAAAABAAEAAADv/wAAAAABAAEAAADv////AAABAAEAAADv//7/AAABAAEAAADx/wgAAAABAAEAAADy/wkAAAABAAEAAADx/wkAAAABAAEAAADw/wgAAAABAAEAAADw/wkAAAABAAEAAADy/woAAAABAAEAAADz/wsAAAABAAEAAAD1/wwAAAABAAEAAAD0/wwAAAABAAEAAADz/wwAAAABAAEAAAD1/w0AAAABAAEAAAD0/w0AAAABAAEAAADz/w0AAAABAAEAAAD2/wwAAAABAAEAAAD2/w0AAAABAAEAAADy/wwAAAABAAEAAADy/wsAAAABAAEAAADx/wsAAAABAAEAAADx/woAAAABAAEAAAD3/w0AAAABAAEAAAD4/w0AAAABAAEAAAD5/w0AAAABAAEAAAD5/w4AAAABAAEAAAD4/w4AAAABAAEAAAD3/w4AAAABAAEAAAD7/w4AAAABAAEAAAD6/w4AAAABAAEAAAD8/w4AAAABAAEAAAD+/w8AAAABAAEAAAD9/w8AAAABAAEAAAD8/w8AAAABAAEAAAD//w8AAAABAAEAAAD//xAAAAABAAEAAAD+/xAAAAABAAEAAAD9/xAAAAABAAEAAAD7/w8AAAABAAEAAAD6/w8AAAABAAEAAAAAAA8AAAABAAEAAAAAABAAAAABAAEAAAABAA8AAAABAAEAAAACAA8AAAABAAEAAAACABAAAAABAAEAAAABABAAAAABAAEAAAADAA8AAAABAAEAAAADABAAAAABAAEAAAAEAA8AAAABAAEAAAAFAA4AAAABAAEAAAAFAA8AAAABAAEAAAAGAA4AAAABAAEAAAAGAA8AAAABAAEAAAAHAA4AAAABAAEAAAAHAA8AAAABAAEAAAAIAA4AAAABAAEAAAAIAA8AAAABAAEAAAAJAA4AAAABAAEAAAAKAA4AAAABAAEAAAALAA0AAAABAAEAAAAMAAsAAAABAAEAAAAMAAwAAAABAAEAAAANAAkAAAABAAEAAAAOAAcAAAABAAEAAAAOAAgAAAABAAEAAAAPAAYAAAABAAEAAAAPAAcAAAABAAEAAAAPAAUAAAABAAEAAAAOAAkAAAABAAEAAAAOAAoAAAABAAEAAAANAAoAAAABAAEAAAANAAsAAAABAAEAAAANAAwAAAABAAEAAAAOAAsAAAADAAAAAAAPAAQAAAABAAEAAAAPAAMAAAABAAEAAAAPAAIAAAABAAEAAAAPAAEAAAABAAEAAAAPAAAAAAABAAEAAAAPAP//AAABAAEAAAAPAP7/AAABAAEAAAAQAP7/AAABAAEAAAAQAP//AAABAAEAAAAQAAAAAAABAAEAAAARAP//AAABAAEAAAARAAAAAAABAAEAAAARAP7/AAABAAEAAAARAAEAAAABAAEAAAAQAAEAAAABAAEAAAAQAAIAAAABAAEAAAAQAP3/AAABAAEAAAAQAPz/AAABAAEAAAAQAAMAAAABAAEAAAAQAAQAAAABAAEAAAARAAUAAAABAAEAAAAQAAUAAAABAAEAAAAQAAYAAAABAAEAAAASAAAAAAABAAEAAAASAP//AAABAAEAAAASAP7/AAADAAIAAAARAP3/AAADAAIAAAASAP3/AAACAAAAAAARAPz/AAADAAEAAAAQAPv/AAADAAIAAAARAPv/AAACAAAAAAAQAPr/AAADAAEAAAAPAPn/AAADAAIAAAAQAPn/AAACAAAAAAAPAPj/AAADAAEAAAAPAPf/AAACAAAAAAAOAPb/AAADAAEAAAAOAPX/AAACAAAAAAANAPT/AAACAAEAAAAMAPP/AAAEAAIAAAANAPP/AAACAAAAAAAKAPL/AAADAAIAAAALAPL/AAACAAAAAAAHAPH/AAADAAIAAAAIAPH/AAABAAAAAAAJAPH/AAABAAAAAAAGAPH/AAABAAEAAAAFAPH/AAABAAEAAAAEAPH/AAABAAEAAAADAPH/AAABAAEAAAACAPH/AAABAAEAAAABAPH/AAABAAEAAAAAAPH/AAABAAEAAAD///H/AAABAAEAAAD5//H/AAABAAEAAAD6//H/AAABAAEAAAD7//H/AAABAAEAAAD8//H/AAABAAEAAAD9//H/AAABAAEAAAD+//H/AAABAAEAAAD4//H/AAABAAEAAAD3//L/AAABAAEAAAD3//H/AAAFAAIAAAD2//L/AAAFAAIAAAD2//H/AAAAAAAAAAD1//L/AAAEAAIAAAD0//P/AAAFAAEAAAD0//L/AAAAAAAAAADz//T/AAAAAAAAAADy//X/AAAAAAAAAADx//n/AAABAAEAAADx//j/AAAFAAIAAADx//f/AAAAAAAAAADx//r/AAABAAEAAADw//r/AAAFAAIAAADw//n/AAAFAAEAAADw//j/AAAAAAAAAADw//v/AAABAAEAAADv//z/AAABAAEAAADv//v/AAAFAAIAAADv//r/AAAAAAAAAADv//3/AAABAAEAAADu/wAAAAABAAEAAADu////AAABAAEAAADu//7/AAABAAEAAADu/wEAAAABAAEAAADv/wUAAAABAAEAAADv/wYAAAABAAEAAADv/wcAAAABAAEAAADv/wgAAAABAAEAAADw/woAAAABAAEAAAABABEAAAABAAEAAAAAABEAAAABAAEAAAD//xEAAAABAAEAAAACABEAAAABAAEAAAD2/w4AAAABAAEAAAD1/w4AAAABAAEAAAD5/w8AAAABAAEAAAD4/w8AAAABAAEAAAD3/w8AAAABAAEAAAD5/xAAAAABAAEAAAD4/xAAAAABAAEAAAD6/xAAAAABAAEAAAD7/xAAAAABAAEAAAD8/xAAAAABAAEAAAD8/xEAAAABAAEAAAD7/xEAAAABAAEAAAD6/xEAAAABAAEAAAD9/xEAAAABAAEAAAD+/xEAAAABAAEAAAADABEAAAABAAEAAAAEABAAAAABAAEAAAAEABEAAAABAAEAAAAFABAAAAABAAEAAAAFABEAAAABAAEAAAAGABAAAAABAAEAAAAGABEAAAADAAAAAAAHABAAAAABAAEAAAAIABAAAAABAAEAAAAJAA8AAAABAAEAAAAJABAAAAABAAEAAAAKAA8AAAABAAEAAAALAA4AAAABAAEAAAALAA8AAAADAAAAAAAMAA0AAAABAAEAAAAMAA4AAAADAAAAAAAMAA8AAAACAAIAAAANAA0AAAABAAEAAAANAA4AAAABAAIAAAAOAA0AAAADAAEAAAAOAA4AAAACAAIAAAAOAAwAAAADAAEAAAAPAAkAAAABAAEAAAAPAAoAAAABAAEAAAAPAAgAAAABAAEAAAAQAAcAAAABAAEAAAARAAYAAAABAAEAAAARAAcAAAABAAEAAAARAAgAAAABAAEAAAAQAAgAAAABAAEAAAAQAAkAAAABAAEAAAAQAAoAAAADAAAAAAAPAAsAAAABAAIAAAACAPD/AAABAAEAAAADAPD/AAABAAEAAAAEAPD/AAADAAIAAAABAPD/AAABAAEAAAAAAPD/AAABAAEAAAD///D/AAABAAEAAAD+//D/AAABAAEAAAD9//D/AAABAAEAAAD8//D/AAABAAEAAAD7//D/AAABAAEAAAD6//D/AAABAAEAAAD6/+//AAABAAEAAAD7/+//AAABAAEAAAD8/+//AAABAAEAAAD6/+7/AAABAAAAAAD7/+7/AAAEAAIAAAD8/+7/AAAEAAIAAAD5//D/AAAFAAIAAAD5/+//AAAFAAEAAAD5/+7/AAAAAAAAAAD9/+//AAABAAEAAAD9/+7/AAAEAAIAAAD+/+//AAABAAEAAAD+/+7/AAABAAAAAAD//+//AAABAAEAAAD//+7/AAABAAAAAAAAAO//AAABAAEAAAAAAO7/AAAEAAIAAAABAO//AAABAAEAAAABAO7/AAAEAAIAAAACAO//AAADAAIAAAACAO7/AAACAAAAAAADAO//AAAEAAIAAAAFAPD/AAAEAAIAAAAGAPD/AAABAAAAAAAEAO//AAACAAAAAAD4//D/AAAEAAIAAAD3//D/AAAAAAAAAAAHAPD/AAACAAAAAAAKAPH/AAACAAAAAADw/wsAAAAFAAAAAADv/wsAAAAAAAIAAADv/woAAAAFAAAAAADv/wkAAAABAAEAAADx/wwAAAAFAAAAAADw/wwAAAAAAAIAAADy/w0AAAABAAEAAADx/w0AAAAFAAEAAADy/w4AAAAFAAAAAADx/w4AAAAAAAIAAADz/w4AAAABAAEAAAD0/w4AAAABAAEAAAD0/w8AAAAFAAAAAADz/w8AAAAEAAAAAADy/w8AAAAAAAIAAAD1/w8AAAABAAEAAAD2/w8AAAABAAEAAAD2/xAAAAAFAAAAAAD1/xAAAAAEAAAAAAD0/xAAAAAAAAIAAAD3/xAAAAABAAEAAAD3/xEAAAAEAAAAAAD2/xEAAAAAAAIAAAD4/xEAAAAFAAAAAAD5/xEAAAABAAEAAAD5/xIAAAAFAAAAAAD4/xIAAAAAAAIAAAD6/xIAAAABAAEAAAD7/xIAAAABAAEAAAD8/xIAAAABAAEAAAD9/xIAAAABAAEAAAD+/xIAAAABAAEAAAD//xIAAAABAAEAAAAAABIAAAABAAEAAAABABIAAAABAAEAAAACABIAAAABAAEAAAADABIAAAABAAEAAAAEABIAAAADAAAAAADu/wkAAAABAAEAAADu/wgAAAABAAEAAADu/wcAAAAFAAIAAADu/woAAAAEAAAAAADt/woAAAAAAAIAAADt/wkAAAAAAAEAAADt/wgAAAAFAAEAAADt/wcAAAAAAAAAAADu/wYAAAAAAAEAAADu/wUAAAAFAAEAAADu/wQAAAAFAAEAAADu/wMAAAAFAAEAAADu/wIAAAAFAAAAAADt/wEAAAAFAAEAAADt/wAAAAAFAAAAAADt////AAABAAEAAADt//7/AAAFAAIAAADs/wAAAAAAAAIAAADs////AAAAAAEAAADs//7/AAAAAAAAAADt/wIAAAAAAAIAAADu//3/AAABAAEAAADu//z/AAAFAAIAAADu//v/AAAAAAAAAADt//3/AAAAAAEAAADt//z/AAAAAAAAAAD7/xMAAAABAAEAAAD6/xMAAAAFAAAAAAD5/xMAAAAAAAIAAAD8/xMAAAABAAEAAAD8/xQAAAABAAIAAAD7/xQAAAAEAAAAAAD6/xQAAAAAAAIAAAD9/xMAAAABAAEAAAD9/xQAAAAFAAAAAAD+/xMAAAABAAEAAAD+/xQAAAABAAEAAAD//xMAAAABAAEAAAD//xQAAAABAAEAAAD//xUAAAAEAAAAAAD+/xUAAAABAAIAAAD9/xUAAAAAAAIAAAAAABQAAAABAAEAAAAAABUAAAAEAAAAAAAAABMAAAABAAEAAAABABQAAAABAAEAAAABABUAAAAEAAAAAAABABMAAAABAAEAAAACABQAAAADAAAAAAACABUAAAACAAIAAAACABMAAAABAAEAAAADABMAAAABAAEAAAADABQAAAAEAAAAAAAEABMAAAACAAEAAAAEABQAAAACAAIAAAAFABIAAAABAAIAAAAGABIAAAACAAIAAAAHABEAAAAEAAAAAAAIABEAAAAEAAAAAAAJABEAAAABAAIAAAAKABAAAAADAAAAAAAKABEAAAACAAIAAAALABAAAAACAAIAAAAQAAsAAAACAAIAAAARAAkAAAADAAAAAAARAAoAAAACAAIAAAASAAgAAAADAAAAAAASAAkAAAACAAIAAAASAAcAAAABAAEAAAATAAcAAAACAAEAAAATAAgAAAACAAIAAAASAAYAAAABAAEAAAATAAYAAAADAAEAAAASAAUAAAABAAEAAAATAAUAAAADAAEAAAATAP//AAADAAEAAAATAAAAAAADAAEAAAATAP7/AAACAAAAAAARAAIAAAABAAEAAAASAAIAAAADAAAAAAASAAMAAAACAAEAAAARAAMAAAABAAEAAAASAAEAAAABAAEAAAASAAQAAAADAAIAAAARAAQAAAABAAEAAAATAAQAAAACAAAAAAATAAEAAAACAAEAAAATAAIAAAACAAIAAAD4//j/AAABAAEAAAAIAPn/AAABAAEAAAD3//3/AAABAAEAAAD3//7/AAABAAEAAAD2//7/AAABAAEAAAD2////AAABAAEAAAD2//3/AAABAAEAAAD1//3/AAABAAEAAAD3////AAABAAEAAAD3//z/AAABAAEAAAD4//z/AAABAAEAAAD4//v/AAABAAEAAAD3/wAAAAABAAEAAAD3/wEAAAABAAEAAAD3/wIAAAABAAEAAAD3/wMAAAABAAEAAAD3/wQAAAABAAEAAAD3/wUAAAABAAEAAAD4//n/AAABAAEAAAD4//r/AAABAAEAAAD4//3/AAABAAEAAAD4//7/AAABAAEAAAD4////AAABAAEAAAD4/wAAAAABAAEAAAD4/wEAAAABAAEAAAD4/wIAAAABAAEAAAD4/wMAAAABAAEAAAD4/wQAAAABAAEAAAD4/wUAAAABAAEAAAD4/wYAAAABAAEAAAD4/wcAAAABAAEAAAD4/wgAAAABAAEAAAD5//n/AAABAAEAAAD5//r/AAABAAEAAAD5//v/AAABAAEAAAD5//z/AAABAAEAAAD5//3/AAABAAEAAAD5//7/AAABAAEAAAD5////AAABAAEAAAD5/wAAAAABAAEAAAD5/wEAAAABAAEAAAD5/wIAAAABAAEAAAD5/wMAAAABAAEAAAD5/wQAAAABAAEAAAD5/wUAAAABAAEAAAD5/wYAAAABAAEAAAD5/wcAAAABAAEAAAD5/wgAAAABAAEAAAD6//j/AAABAAEAAAD6//n/AAABAAEAAAD6//r/AAABAAEAAAD6//v/AAABAAEAAAD6//z/AAABAAEAAAD6//3/AAABAAEAAAD6//7/AAABAAEAAAD6////AAABAAEAAAD6/wAAAAABAAEAAAD6/wEAAAABAAEAAAD6/wIAAAABAAEAAAD6/wMAAAABAAEAAAD6/wQAAAABAAEAAAD6/wUAAAABAAEAAAD6/wYAAAABAAEAAAD6/wcAAAABAAEAAAD6/wgAAAABAAEAAAD7//j/AAABAAEAAAD7//n/AAABAAEAAAD7//r/AAABAAEAAAD7//v/AAABAAEAAAD7//z/AAABAAEAAAD7//3/AAABAAEAAAD7//7/AAABAAEAAAD7////AAABAAEAAAD7/wAAAAABAAEAAAD7/wEAAAABAAEAAAD7/wIAAAABAAEAAAD7/wMAAAABAAEAAAD7/wQAAAABAAEAAAD7/wUAAAABAAEAAAD7/wYAAAABAAEAAAD7/wcAAAABAAEAAAD7/wgAAAABAAEAAAD7/wkAAAABAAEAAAD8//j/AAABAAEAAAD8//n/AAABAAEAAAD8//r/AAABAAEAAAD8//v/AAABAAEAAAD8//z/AAABAAEAAAD8//3/AAABAAEAAAD8//7/AAABAAEAAAD8////AAABAAEAAAD8/wAAAAABAAEAAAD8/wEAAAABAAEAAAD8/wIAAAABAAEAAAD8/wMAAAABAAEAAAD8/wQAAAABAAEAAAD8/wUAAAABAAEAAAD8/wYAAAABAAEAAAD8/wcAAAABAAEAAAD8/wgAAAABAAEAAAD8/wkAAAABAAEAAAD9//n/AAABAAEAAAD9//r/AAABAAEAAAD9//v/AAABAAEAAAD9//z/AAABAAEAAAD9//3/AAABAAEAAAD9//7/AAABAAEAAAD9////AAABAAEAAAD9/wAAAAABAAEAAAD9/wEAAAABAAEAAAD9/wIAAAABAAEAAAD9/wMAAAABAAEAAAD9/wQAAAABAAEAAAD9/wUAAAABAAEAAAD9/wYAAAABAAEAAAD9/wcAAAABAAEAAAD9/wgAAAABAAEAAAD9/wkAAAABAAEAAAD+//n/AAABAAEAAAD+//r/AAABAAEAAAD+//v/AAABAAEAAAD+//z/AAABAAEAAAD+//3/AAABAAEAAAD+//7/AAABAAEAAAD+////AAABAAEAAAD+/wAAAAABAAEAAAD+/wEAAAABAAEAAAD+/wIAAAABAAEAAAD+/wMAAAABAAEAAAD+/wQAAAABAAEAAAD+/wUAAAABAAEAAAD+/wYAAAABAAEAAAD+/wcAAAABAAEAAAD+/wgAAAABAAEAAAD+/wkAAAABAAEAAAD///n/AAABAAEAAAD///r/AAABAAEAAAD///v/AAABAAEAAAD///z/AAABAAEAAAD///3/AAABAAEAAAD///7/AAABAAEAAAD/////AAABAAEAAAD//wAAAAABAAEAAAD//wEAAAABAAEAAAD//wIAAAABAAEAAAD//wMAAAABAAEAAAD//wQAAAABAAEAAAD//wUAAAABAAEAAAD//wYAAAABAAEAAAD//wcAAAABAAEAAAD//wgAAAABAAEAAAAAAPn/AAABAAEAAAAAAPr/AAABAAEAAAAAAPv/AAABAAEAAAAAAPz/AAABAAEAAAAAAP3/AAABAAEAAAAAAP7/AAABAAEAAAAAAP//AAABAAEAAAAAAAAAAAABAAEAAAAAAAEAAAABAAEAAAAAAAIAAAABAAEAAAAAAAMAAAABAAEAAAAAAAQAAAABAAEAAAAAAAUAAAABAAEAAAAAAAYAAAABAAEAAAAAAAcAAAABAAEAAAAAAAgAAAABAAEAAAABAPn/AAABAAEAAAABAPr/AAABAAEAAAABAPv/AAABAAEAAAABAPz/AAABAAEAAAABAP3/AAABAAEAAAABAP7/AAABAAEAAAABAP//AAABAAEAAAABAAAAAAABAAEAAAABAAEAAAABAAEAAAABAAIAAAABAAEAAAABAAMAAAABAAEAAAABAAQAAAABAAEAAAABAAUAAAABAAEAAAABAAYAAAABAAEAAAABAAcAAAABAAEAAAABAAgAAAABAAEAAAACAPn/AAABAAEAAAACAPr/AAABAAEAAAACAPv/AAABAAEAAAACAPz/AAABAAEAAAACAP3/AAABAAEAAAACAP7/AAABAAEAAAACAP//AAABAAEAAAACAAAAAAABAAEAAAACAAEAAAABAAEAAAACAAIAAAABAAEAAAACAAMAAAABAAEAAAACAAQAAAABAAEAAAACAAUAAAABAAEAAAACAAYAAAABAAEAAAACAAcAAAABAAEAAAACAAgAAAABAAEAAAADAPn/AAABAAEAAAADAPr/AAABAAEAAAADAPv/AAABAAEAAAADAPz/AAABAAEAAAADAP3/AAABAAEAAAADAP7/AAABAAEAAAADAP//AAABAAEAAAADAAAAAAABAAEAAAADAAEAAAABAAEAAAADAAIAAAABAAEAAAADAAMAAAABAAEAAAADAAQAAAABAAEAAAADAAUAAAABAAEAAAADAAYAAAABAAEAAAADAAcAAAABAAEAAAADAAgAAAABAAEAAAAEAPn/AAABAAEAAAAEAPr/AAABAAEAAAAEAPv/AAABAAEAAAAEAPz/AAABAAEAAAAEAP3/AAABAAEAAAAEAP7/AAABAAEAAAAEAP//AAABAAEAAAAEAAAAAAABAAEAAAAEAAEAAAABAAEAAAAEAAIAAAABAAEAAAAEAAMAAAABAAEAAAAEAAQAAAABAAEAAAAEAAUAAAABAAEAAAAEAAYAAAABAAEAAAAEAAcAAAABAAEAAAAEAAgAAAABAAEAAAAFAPn/AAABAAEAAAAFAPr/AAABAAEAAAAFAPv/AAABAAEAAAAFAPz/AAABAAEAAAAFAP3/AAABAAEAAAAFAP7/AAABAAEAAAAFAP//AAABAAEAAAAFAAAAAAABAAEAAAAFAAEAAAABAAEAAAAFAAIAAAABAAEAAAAFAAMAAAABAAEAAAAFAAQAAAABAAEAAAAFAAUAAAABAAEAAAAFAAYAAAABAAEAAAAFAAcAAAABAAEAAAAFAAgAAAABAAEAAAAFAAkAAAABAAEAAAAGAPn/AAABAAEAAAAGAPr/AAABAAEAAAAGAPv/AAABAAEAAAAGAPz/AAABAAEAAAAGAP3/AAABAAEAAAAGAP7/AAABAAEAAAAGAP//AAABAAEAAAAGAAAAAAABAAEAAAAGAAEAAAABAAEAAAAGAAIAAAABAAEAAAAGAAMAAAABAAEAAAAGAAQAAAABAAEAAAAGAAUAAAABAAEAAAAGAAYAAAABAAEAAAAGAAcAAAABAAEAAAAGAAgAAAABAAEAAAAHAPn/AAABAAEAAAAHAPr/AAABAAEAAAAHAPv/AAABAAEAAAAHAPz/AAABAAEAAAAHAP3/AAABAAEAAAAHAP7/AAABAAEAAAAHAP//AAABAAEAAAAHAAAAAAABAAEAAAAHAAEAAAABAAEAAAAHAAIAAAABAAEAAAAHAAMAAAABAAEAAAAHAAQAAAABAAEAAAAHAAUAAAABAAEAAAAHAAYAAAABAAEAAAAHAAcAAAABAAEAAAAIAPr/AAABAAEAAAAIAPv/AAABAAEAAAAIAPz/AAABAAEAAAAIAP3/AAABAAEAAAAIAP7/AAABAAEAAAAIAP//AAABAAEAAAAIAAAAAAABAAEAAAAIAAEAAAABAAEAAAAIAAIAAAABAAEAAAAIAAMAAAABAAEAAAAIAAQAAAABAAEAAAAIAAUAAAABAAEAAAAIAAYAAAABAAEAAAD2/wQAAAABAAEAAAD2/wUAAAABAAEAAAD2/wYAAAABAAEAAAA=") +tile_set = ExtResource("1_ebmjs") + +[node name="Roads" type="TileMapLayer" parent="Level"] +tile_map_data = PackedByteArray("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") +tile_set = ExtResource("1_ebmjs") + +[node name="YSorted" type="Node2D" parent="Level"] y_sort_enabled = true texture_filter = 1 -[node name="Player" parent="NavigationRegion2D/YSorted" instance=ExtResource("3_3dryh")] -position = Vector2(8, 64) - -[node name="TileMapLayer" type="TileMapLayer" parent="NavigationRegion2D/YSorted"] +[node name="TileMapLayer" type="TileMapLayer" parent="Level/YSorted"] y_sort_enabled = true -tile_map_data = PackedByteArray("AAAGAP//AAAAAAQAAAD9/wQAAAAAAAQAAAADAPz/AAAAAAQAABABAAEAAAAIAAQAAAAAAAEAAAAHAAQAAAACAAEAAAAJAAQAAAADAAYAAAAAAAQAABAAAAYAAAAFAAYAAAAEAP7/AAAFAAYAABD7////AAAFAAYAABAAAPv/AAAFAAYAAAABAP7/AAAFAAYAAAD5/wIAAAAFAAYAABD+//3/AAAEAAcAAAA=") +tile_map_data = PackedByteArray("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") tile_set = ExtResource("1_ebmjs") +navigation_enabled = false -[node name="RockBoi" parent="NavigationRegion2D/YSorted" instance=ExtResource("5_wowpa")] -position = Vector2(-161, 33) +[node name="StaticBody2D" type="StaticBody2D" parent="Level/YSorted"] + +[node name="Sakura" type="Sprite2D" parent="Level/YSorted/StaticBody2D"] +self_modulate = Color(1.7670674, 1.7670674, 1.7670674, 1) +position = Vector2(17, -5) +texture = ExtResource("5_i6g32") +offset = Vector2(8, -54) +flip_h = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Level/YSorted/StaticBody2D"] +position = Vector2(33.5, -8.5) +shape = SubResource("RectangleShape2D_1l0tm") + +[node name="Shrine" type="Sprite2D" parent="Level/YSorted"] +position = Vector2(0, 44) +texture = SubResource("AtlasTexture_1l0tm") +offset = Vector2(8, -54) +flip_h = true + +[node name="FairyLights" type="Node2D" parent="Level/YSorted"] +modulate = Color(1.8247963, 1.8247963, 1.8247963, 1) + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-118, 79) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.41686898 + +[node name="AnimatedSprite2D2" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-129, -28) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D3" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(104, 139) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D5" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(278, 54) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D6" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-91, 247) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D7" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(-250, 92) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D8" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(40, -200) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="AnimatedSprite2D4" type="AnimatedSprite2D" parent="Level/YSorted/FairyLights"] +position = Vector2(140, -98) +scale = Vector2(0.5, 0.5) +sprite_frames = SubResource("SpriteFrames_nb51f") +autoplay = "default" +frame_progress = 0.7475089 + +[node name="Enemies" type="Node2D" parent="Level/YSorted"] +y_sort_enabled = true + +[node name="Turrets" type="Node2D" parent="Level/YSorted"] + +[node name="Projectiles" type="Node2D" parent="Level/YSorted"] +y_sort_enabled = true +script = ExtResource("8_v158k") + +[node name="EnemyPaths" type="Node2D" parent="Level/YSorted"] +y_sort_enabled = true +position = Vector2(8, 8) + +[node name="Path_0" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_wowpa") +metadata/_edit_group_ = true + +[node name="Path_1" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_i6g32") + +[node name="Path_2" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_1l0tm") + +[node name="Path_3" type="Path2D" parent="Level/YSorted/EnemyPaths"] +y_sort_enabled = true +position = Vector2(-8, -8) +curve = SubResource("Curve2D_v158k") + +[node name="Camera2D" type="Camera2D" parent="."] +zoom = Vector2(2, 2) +limit_left = -300 +limit_top = -280 +limit_right = 300 +limit_bottom = 320 +script = ExtResource("10_ldgsr") +ZoomStep = -0.25 +MinZoom = 2.0 +MaxZoom = 4.0 +minX = -300.0 +maxX = 300.0 +minY = -300.0 +maxY = 300.0 + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_h4fw4") diff --git a/Scripts/CameraController.cs b/Scripts/CameraController.cs new file mode 100644 index 0000000..5975ba4 --- /dev/null +++ b/Scripts/CameraController.cs @@ -0,0 +1,69 @@ +using System; +using Godot; + +public partial class CameraController : Camera2D +{ + [Export] public float ZoomStep = 0.1f; + [Export] public float MinZoom = 0.5f; + [Export] public float MaxZoom = 3.0f; + + [Export] private float minX = 0f; + [Export] private float maxX = 0f; + [Export] private float minY = 0f; + [Export] private float maxY = 0f; + + private bool _dragging; + private Vector2 _grabWorldPos; + + public override void _Input(InputEvent @event) + { + // Middle mouse drag + if (@event is InputEventMouseButton mb) + { + if (mb.ButtonIndex == MouseButton.Middle) + { + _dragging = mb.Pressed; + + if (_dragging) + _grabWorldPos = GetGlobalMousePosition(); + } + + // Scroll zoom + if (mb.Pressed && + (mb.ButtonIndex == MouseButton.WheelUp || + mb.ButtonIndex == MouseButton.WheelDown)) + { + Vector2 mouseBeforeZoom = GetGlobalMousePosition(); + + float zoomFactor = mb.ButtonIndex == MouseButton.WheelUp + ? -ZoomStep + : ZoomStep; + + float newZoom = Mathf.Clamp(Zoom.X + zoomFactor, MinZoom, MaxZoom); + Zoom = new Vector2(newZoom, newZoom); + + // keep cursor locked to same world point + Vector2 mouseAfterZoom = GetGlobalMousePosition(); + GlobalPosition += mouseBeforeZoom - mouseAfterZoom; + ClampPos(); + } + } + + if (_dragging && @event is InputEventMouseMotion) + { + Vector2 currentWorld = GetGlobalMousePosition(); + GlobalPosition += _grabWorldPos - currentWorld; + ClampPos(); + } + } + + private void ClampPos() + { + var t = GetCanvasTransform(); + var camrect = t.AffineInverse().BasisXform(GetViewportRect().Size); + GlobalPosition = new Vector2( + Mathf.Clamp(GlobalPosition.X, LimitLeft + camrect.X / 2, LimitRight - camrect.X / 2), + Mathf.Clamp(GlobalPosition.Y, LimitTop + camrect.Y / 2, LimitBottom - camrect.Y / 2) + ); + } +} \ No newline at end of file diff --git a/Scripts/CameraController.cs.uid b/Scripts/CameraController.cs.uid new file mode 100644 index 0000000..0de16a8 --- /dev/null +++ b/Scripts/CameraController.cs.uid @@ -0,0 +1 @@ +uid://df0osorq00h7v diff --git a/Scripts/Common/GameController.cs b/Scripts/Common/GameController.cs index dd9cd23..ba6fb4e 100644 --- a/Scripts/Common/GameController.cs +++ b/Scripts/Common/GameController.cs @@ -5,7 +5,11 @@ public partial class GameController : Node { public static GameController Instance; - [Export] public Node2D Player; + [Export] private float _ShrineStartHP; + + public int Wave { get; private set; } + public int Currency { get; private set; } + public float ShrineHealth { get; private set; } public override void _Ready() { diff --git a/Scripts/Common/ProjectileParent.cs b/Scripts/Common/ProjectileParent.cs new file mode 100644 index 0000000..9d54cc6 --- /dev/null +++ b/Scripts/Common/ProjectileParent.cs @@ -0,0 +1,13 @@ +using Godot; + +namespace fgj26.Scripts.Common; + +public partial class ProjectileParent : Node2D +{ + public static ProjectileParent Instance; + + public override void _Ready() + { + Instance = this; + } +} \ No newline at end of file diff --git a/Scripts/Common/ProjectileParent.cs.uid b/Scripts/Common/ProjectileParent.cs.uid new file mode 100644 index 0000000..7802b2c --- /dev/null +++ b/Scripts/Common/ProjectileParent.cs.uid @@ -0,0 +1 @@ +uid://dxx6nyrs12mr6 diff --git a/Scripts/Components/Health.cs b/Scripts/Components/Health.cs new file mode 100644 index 0000000..90a7c4e --- /dev/null +++ b/Scripts/Components/Health.cs @@ -0,0 +1,39 @@ +using Godot; +using System; + +public partial class Health : Node +{ + [Export] private Node2D _parent; + [Export] private float _baseMaxHp; + public float MaxHP { get; private set; } + public float CurHP { get; private set; } + + [Signal] + public delegate void DeathEventHandler(Node2D node); + + public override void _EnterTree() + { + CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f); + } + + public void Substract(float v) + { + v = Mathf.Abs(v); + CurHP -= v; + if (CurHP <= 0) + { + EmitSignalDeath(_parent); + } + } + + public void Add(float v) + { + v = Mathf.Abs(v); + CurHP = Math.Clamp(CurHP + v, 0f, MaxHP); + } + + public void Reset() + { + CurHP = MaxHP = _baseMaxHp * Mathf.Pow(GameController.Instance.Wave, 1.067f); + } +} diff --git a/Scripts/Components/Health.cs.uid b/Scripts/Components/Health.cs.uid new file mode 100644 index 0000000..2c29fee --- /dev/null +++ b/Scripts/Components/Health.cs.uid @@ -0,0 +1 @@ +uid://dvkd1keu854so diff --git a/Scripts/Enemies/Enemy.cs b/Scripts/Enemies/Enemy.cs new file mode 100644 index 0000000..4e9839f --- /dev/null +++ b/Scripts/Enemies/Enemy.cs @@ -0,0 +1,26 @@ +using System; +using Godot; + +public partial class Enemy : PathFollow2D +{ + [Export] public EnemyType Type; + [Export] public Health Health; + + public event Action Died; + + public override void _Ready() + { + Health.Death += _ => Died?.Invoke(this); + } + + public void ResetEnemy() + { + GlobalPosition = Vector2.Zero; + Rotation = 0f; + Visible = true; + ProcessMode = ProcessModeEnum.Inherit; + + Health.Reset(); + // reset velocity, animation, AI, etc here + } +} \ No newline at end of file diff --git a/Scripts/Enemies/Enemy.cs.uid b/Scripts/Enemies/Enemy.cs.uid new file mode 100644 index 0000000..dcf5ac7 --- /dev/null +++ b/Scripts/Enemies/Enemy.cs.uid @@ -0,0 +1 @@ +uid://bj52mq7uip7di diff --git a/Scripts/Enemies/EnemyArea.cs b/Scripts/Enemies/EnemyArea.cs new file mode 100644 index 0000000..f4dc3e8 --- /dev/null +++ b/Scripts/Enemies/EnemyArea.cs @@ -0,0 +1,6 @@ +using Godot; + +public partial class EnemyArea : Area2D +{ + [Export] public Enemy Enemy { get; set; } +} \ No newline at end of file diff --git a/Scripts/Enemies/EnemyArea.cs.uid b/Scripts/Enemies/EnemyArea.cs.uid new file mode 100644 index 0000000..f12c8f8 --- /dev/null +++ b/Scripts/Enemies/EnemyArea.cs.uid @@ -0,0 +1 @@ +uid://c247m8m3qmlk0 diff --git a/Scripts/Enemies/EnemyMovement.cs b/Scripts/Enemies/EnemyMovement.cs index b7f636f..1a5d610 100644 --- a/Scripts/Enemies/EnemyMovement.cs +++ b/Scripts/Enemies/EnemyMovement.cs @@ -3,24 +3,18 @@ using System; public partial class EnemyMovement : Node { - [Export] private NavigationAgent2D _agent2D; - [Export] private CharacterBody2D _body2D; + [Export] private PathFollow2D _pathFollow2D; [Export] private float _speed; private double _time = 0; - - public override void _PhysicsProcess(double delta) + + public override void _EnterTree() { - _time += delta; - if (_time > 0.2) - { - _time = 0; - _agent2D.SetTargetPosition(GameController.Instance.Player.GlobalPosition); - } - // _parent.Position = _agent2D.GetNextPathPosition(); - var gpos = _agent2D.GetNextPathPosition(); - var dir = (gpos - _body2D.GlobalPosition).Normalized(); - // _body2D.SetVelocity(dir * _speed * (float)delta); - _body2D.GlobalPosition += dir * _speed * (float)delta; + _pathFollow2D.ProgressRatio = 0; + } + + public override void _Process(double delta) + { + _pathFollow2D.ProgressRatio += (float)delta * (_speed / 1000f); } } diff --git a/Scripts/Enemies/EnemyPool.cs b/Scripts/Enemies/EnemyPool.cs new file mode 100644 index 0000000..bba4338 --- /dev/null +++ b/Scripts/Enemies/EnemyPool.cs @@ -0,0 +1,59 @@ +using Godot; +using System.Collections.Generic; + +public enum EnemyType +{ + Stone, + Stump, + Liquid +} + +public partial class EnemyPool : Node +{ + [Export] private Godot.Collections.Dictionary _scenes; + [Export] private int _poolSize = 10; + + private readonly Dictionary> _pool = new(); + + public override void _Ready() + { + foreach (var kvp in _scenes) + { + var q = new Queue(); + _pool[kvp.Key] = q; + + for (int i = 0; i < _poolSize; i++) + q.Enqueue(CreateEnemy(kvp.Key)); + } + } + + private Enemy CreateEnemy(EnemyType type) + { + var e = _scenes[type].Instantiate(); + e.Died += ReturnToPool; + return e; + } + + public Enemy Get(EnemyType type) + { + if (!_pool.TryGetValue(type, out var q)) + return null; + + var e = q.Count > 0 ? q.Dequeue() : CreateEnemy(type); + e.ResetEnemy(); + return e; + } + + private void ReturnToPool(Enemy e) + { + e.GetParent()?.RemoveChild(e); + e.ProcessMode = ProcessModeEnum.Disabled; + _pool[e.Type].Enqueue(e); + } + + public EnemyType GetRandomType() + { + var keys = new List(_pool.Keys); + return keys[GD.RandRange(0, keys.Count - 1)]; + } +} \ No newline at end of file diff --git a/Scripts/Enemies/EnemyPool.cs.uid b/Scripts/Enemies/EnemyPool.cs.uid new file mode 100644 index 0000000..289996e --- /dev/null +++ b/Scripts/Enemies/EnemyPool.cs.uid @@ -0,0 +1 @@ +uid://bhxyvnirfeipr diff --git a/Scripts/Enemies/EnemySpawner.cs b/Scripts/Enemies/EnemySpawner.cs new file mode 100644 index 0000000..1cffaf6 --- /dev/null +++ b/Scripts/Enemies/EnemySpawner.cs @@ -0,0 +1,39 @@ +using Godot; +using System.Collections.Generic; + +public partial class EnemySpawner : Node +{ + [Export] private Node _pathParent; + [Export] private EnemyPool _pool; + + private readonly List _paths = new(); + + public override void _Ready() + { + foreach (var c in _pathParent.GetChildren()) + if (c is Path2D p) + _paths.Add(p); + + for (int i = 0; i < 10; i++) + SpawnWithDelay(i * 0.33f); + } + + private async void SpawnWithDelay(float t) + { + await ToSignal(GetTree().CreateTimer(t), SceneTreeTimer.SignalName.Timeout); + Spawn(); + } + + private void Spawn() + { + if (_paths.Count == 0) return; + + var path = _paths[GD.RandRange(0, _paths.Count - 1)]; + var type = _pool.GetRandomType(); + var enemy = _pool.Get(type); + + if (enemy == null) return; + + path.AddChild(enemy); + } +} \ No newline at end of file diff --git a/Scripts/Enemies/EnemySpawner.cs.uid b/Scripts/Enemies/EnemySpawner.cs.uid new file mode 100644 index 0000000..03e3fde --- /dev/null +++ b/Scripts/Enemies/EnemySpawner.cs.uid @@ -0,0 +1 @@ +uid://cds2rrl4yjexf diff --git a/Scripts/Helpers/Helpers.cs b/Scripts/Helpers/Helpers.cs new file mode 100644 index 0000000..9d10429 --- /dev/null +++ b/Scripts/Helpers/Helpers.cs @@ -0,0 +1,26 @@ +using System; +using Godot; + +namespace fgj26.Scripts.Helpers; + +public static class Helpers +{ + public static Node2D GetClosest(Node2D from, Node2D[] targets) + { + ArgumentNullException.ThrowIfNull(from); + ArgumentNullException.ThrowIfNull(targets); + if (targets.Length == 0) throw new ArgumentNullException(nameof(targets)); + float dist = float.PositiveInfinity; + Node2D closest = null; + foreach (var t in targets) + { + var td = t.GlobalPosition.DistanceTo(from.GlobalPosition); + if (td < dist) + { + dist = td; + closest = t; + } + } + return closest; + } +} \ No newline at end of file diff --git a/Scripts/Helpers/Helpers.cs.uid b/Scripts/Helpers/Helpers.cs.uid new file mode 100644 index 0000000..40bc543 --- /dev/null +++ b/Scripts/Helpers/Helpers.cs.uid @@ -0,0 +1 @@ +uid://ef7d25f50nut diff --git a/Scripts/Helpers/RNG.cs b/Scripts/Helpers/RNG.cs new file mode 100644 index 0000000..fcf3021 --- /dev/null +++ b/Scripts/Helpers/RNG.cs @@ -0,0 +1,40 @@ +using System; + +public static class RandomHelper +{ + // Single Random instance for the whole app + private static readonly Random _rand = new Random(); + + // Random integer [min, max] inclusive + public static int Int(int min, int max) + { + return _rand.Next(min, max + 1); // max is inclusive + } + + // Random float [min, max) + public static float Float(float min, float max) + { + return (float)(_rand.NextDouble() * (max - min) + min); + } + + // Random double [min, max) + public static double Double(double min, double max) + { + return _rand.NextDouble() * (max - min) + min; + } + + // Random element from an array + public static T Choice(T[] array) + { + if (array == null || array.Length == 0) + throw new ArgumentException("Array cannot be null or empty."); + return array[_rand.Next(array.Length)]; + } + + // Random enum value + public static T ChoiceEnum() where T : Enum + { + Array values = Enum.GetValues(typeof(T)); // returns System.Array + return (T)values.GetValue(_rand.Next(values.Length)); // use GetValue + } +} \ No newline at end of file diff --git a/Scripts/Helpers/RNG.cs.uid b/Scripts/Helpers/RNG.cs.uid new file mode 100644 index 0000000..4719961 --- /dev/null +++ b/Scripts/Helpers/RNG.cs.uid @@ -0,0 +1 @@ +uid://dy2yccrqc1ho3 diff --git a/Scripts/Projectiles/Projectile.cs b/Scripts/Projectiles/Projectile.cs new file mode 100644 index 0000000..334f857 --- /dev/null +++ b/Scripts/Projectiles/Projectile.cs @@ -0,0 +1,52 @@ +using System; +using Godot; +using Godot.Collections; + +public partial class Projectile : Node2D +{ + [Export] private Array _superEffective; + [Export] private float _baseDamage; + [Export] private float _speed; + [Export] private Area2D _hurtBox; + + private float _ttl = 10f; + + public event Action OnDespawn; + public Vector2 Direction; + + public override void _Ready() + { + _hurtBox.AreaEntered += AreaEntered; + _hurtBox.BodyEntered += BodyEntered; + } + + public override void _PhysicsProcess(double delta) + { + GlobalPosition += Direction * _speed * (float)delta; + + _ttl -= (float)delta; + if (_ttl > 0f) return; + CallDeferred(nameof(Despawn)); + } + + private void AreaEntered(Area2D area) + { + if (area is EnemyArea earea) + { + float isSe = _superEffective.Contains(earea.Enemy.Type) ? 2f : 1f; + earea.Enemy.Health.Substract(_baseDamage * isSe); + } + + CallDeferred(nameof(Despawn)); + } + + private void BodyEntered(Node2D node) + { + CallDeferred(nameof(Despawn)); + } + + private void Despawn() + { + OnDespawn?.Invoke(this); + } +} \ No newline at end of file diff --git a/Scripts/Projectiles/Projectile.cs.uid b/Scripts/Projectiles/Projectile.cs.uid new file mode 100644 index 0000000..40abadb --- /dev/null +++ b/Scripts/Projectiles/Projectile.cs.uid @@ -0,0 +1 @@ +uid://ln2lt16fi47q diff --git a/Scripts/Projectiles/ProjectilePool.cs b/Scripts/Projectiles/ProjectilePool.cs new file mode 100644 index 0000000..fa4f1f4 --- /dev/null +++ b/Scripts/Projectiles/ProjectilePool.cs @@ -0,0 +1,39 @@ +using System.Collections.Generic; +using Godot; + + +public partial class ProjectilePool : Node +{ + [Export] private PackedScene _scene; + [Export] private int _poolSize; + + private readonly Queue _pool = new(); + + public override void _Ready() + { + for (int i = 0; i < _poolSize; i++) + { + _pool.Enqueue(CreateProjectile()); + } + } + + private Projectile CreateProjectile() + { + var p = _scene.Instantiate(); + p.OnDespawn += ReturnToPool; + return p; + } + + public Projectile Get() + { + var p = _pool.Count > 0 ? _pool.Dequeue() : CreateProjectile(); + return p; + } + + private void ReturnToPool(Projectile p) + { + p.GetParent()?.RemoveChild(p); + p.ProcessMode = ProcessModeEnum.Disabled; + _pool.Enqueue(p); + } +} \ No newline at end of file diff --git a/Scripts/Projectiles/ProjectilePool.cs.uid b/Scripts/Projectiles/ProjectilePool.cs.uid new file mode 100644 index 0000000..cf05626 --- /dev/null +++ b/Scripts/Projectiles/ProjectilePool.cs.uid @@ -0,0 +1 @@ +uid://cy00plvsi6vkn diff --git a/Scripts/Turrets/Turret.cs b/Scripts/Turrets/Turret.cs new file mode 100644 index 0000000..14ad467 --- /dev/null +++ b/Scripts/Turrets/Turret.cs @@ -0,0 +1,56 @@ +using Godot; +using System; +using System.Collections.Generic; +using System.Linq; +using fgj26.Scripts.Common; +using fgj26.Scripts.Helpers; + +public partial class Turret : Node +{ + [Export] private Area2D _Attackrange; + [Export] private float _fireRate; + [Export] private Node2D _parent; + [Export] private ProjectilePool _projectilePool; + private float _fireTimer = 0f; + + private HashSet _enemiesInRange = new HashSet(); + + public override void _EnterTree() + { + _Attackrange.AreaEntered += EnemyEntered; + _Attackrange.AreaExited += EnemyExited; + } + + private void EnemyEntered(Area2D enemyHitBox) + { + if (enemyHitBox is EnemyArea earea) + { + _enemiesInRange.Add(earea.Enemy); + GD.Print(earea.Name); + } + } + + private void EnemyExited(Area2D enemyHitBox) + { + if (enemyHitBox is EnemyArea earea) + { + _enemiesInRange.Remove(earea.Enemy); + GD.Print(earea.Name); + } + } + + public override void _Process(double delta) + { + if (_enemiesInRange.Count == 0) return; + _fireTimer += (float)delta; + if (!(_fireTimer >= 1f / _fireRate)) return; + _fireTimer = 0; + var t = Helpers.GetClosest(_parent,_enemiesInRange.ToArray()); + var dir = (t.GlobalPosition - _parent.GlobalPosition).Normalized(); + var proj = _projectilePool.Get(); + proj.Direction = dir; + proj.GlobalPosition = _parent.GlobalPosition; + proj.Rotation = dir.Angle(); + ProjectileParent.Instance.AddChild(proj); + } +} diff --git a/Scripts/Turrets/Turret.cs.uid b/Scripts/Turrets/Turret.cs.uid new file mode 100644 index 0000000..2de9041 --- /dev/null +++ b/Scripts/Turrets/Turret.cs.uid @@ -0,0 +1 @@ +uid://cxrhl65cjw4yr diff --git a/Scripts/Turrets/TurretController.cs b/Scripts/Turrets/TurretController.cs new file mode 100644 index 0000000..7ea1cf9 --- /dev/null +++ b/Scripts/Turrets/TurretController.cs @@ -0,0 +1,8 @@ +using Godot; + +namespace fgj26.Scripts.Turrets; + +public partial class TurretController : Node2D +{ + +} \ No newline at end of file diff --git a/Scripts/Turrets/TurretController.cs.uid b/Scripts/Turrets/TurretController.cs.uid new file mode 100644 index 0000000..42e7d3a --- /dev/null +++ b/Scripts/Turrets/TurretController.cs.uid @@ -0,0 +1 @@ +uid://b0uosq6r5dbqa diff --git a/project.godot b/project.godot index d03a47f..dac1776 100644 --- a/project.godot +++ b/project.godot @@ -61,3 +61,9 @@ attack={ [physics] 2d/default_gravity_vector=Vector2(0, 0) + +[rendering] + +viewport/hdr_2d=true +environment/defaults/default_clear_color=Color(0.1254902, 0.1254902, 0.1254902, 1) +environment/defaults/default_environment="uid://cg7bginhcdl5w"