From 84f75cb2a7e72c05ec9e9e6f68d0e9faf3307bcc Mon Sep 17 00:00:00 2001 From: vaporvee Date: Wed, 29 Oct 2025 01:47:45 +0100 Subject: [PATCH] fight system and whatnot --- aseprite/attack.aseprite | Bin 0 -> 764 bytes aseprite/heart.aseprite | Bin 490 -> 536 bytes aseprite/level_interior_tileset.aseprite | Bin 0 -> 827 bytes aseprite/skull.aseprite | Bin 0 -> 1536 bytes assets/textures/heart.png | Bin 341 -> 0 bytes assets/textures/spritesheets/attack.png | Bin 0 -> 390 bytes .../textures/spritesheets/attack.png.import | 40 +++++ .../spritesheets/dark_house_assets.png | Bin 0 -> 5272 bytes .../spritesheets/dark_house_assets.png.import | 40 +++++ assets/textures/spritesheets/explosion.png | Bin 0 -> 32451 bytes .../spritesheets/explosion.png.import | 40 +++++ assets/textures/spritesheets/heart.png | Bin 0 -> 380 bytes .../{ => spritesheets}/heart.png.import | 6 +- assets/textures/spritesheets/skull.png | Bin 0 -> 1270 bytes assets/textures/spritesheets/skull.png.import | 40 +++++ .../tilemaps/level_interior_tileset.png | Bin 0 -> 883 bytes .../level_interior_tileset.png.import | 40 +++++ project.godot | 4 + resources/explosion_animation.tres | 130 ++++++++++++++ scenes/enemies/skull.tscn | 111 ++++++++++++ scenes/fightable.tscn | 13 ++ scenes/houses/dark_house.tscn | 28 +++ scenes/houses/house_2.tscn | 27 +++ scenes/houses/house_3.tscn | 37 ++++ scenes/houses/house_4.tscn | 37 ++++ scenes/interactables/chair.tscn | 2 +- scenes/interactables/dark_house_door.tscn | 129 ++++++++++++++ scenes/levels/home.tscn | 24 +-- scenes/levels/hood.tscn | 165 +++++++++++++++++- scenes/levels/lvl_1.tscn | 155 ++++++++++++++++ scenes/menus/hud.tscn | 16 ++ scenes/menus/util/hearts.tscn | 95 ++++++++++ scenes/player.tscn | 111 +++++++++--- scripts/enemies/skull.gd | 86 +++++++++ scripts/enemies/skull.gd.uid | 1 + scripts/fightable.gd | 6 + scripts/fightable.gd.uid | 1 + scripts/interactables/interact_sceneswitch.gd | 3 +- scripts/menus/util/hearts.gd | 34 ++++ scripts/menus/util/hearts.gd.uid | 1 + scripts/player.gd | 68 +++++++- 41 files changed, 1433 insertions(+), 57 deletions(-) create mode 100644 aseprite/attack.aseprite create mode 100644 aseprite/level_interior_tileset.aseprite create mode 100644 aseprite/skull.aseprite delete mode 100644 assets/textures/heart.png create mode 100644 assets/textures/spritesheets/attack.png create mode 100644 assets/textures/spritesheets/attack.png.import create mode 100644 assets/textures/spritesheets/dark_house_assets.png create mode 100644 assets/textures/spritesheets/dark_house_assets.png.import create mode 100644 assets/textures/spritesheets/explosion.png create mode 100644 assets/textures/spritesheets/explosion.png.import create mode 100644 assets/textures/spritesheets/heart.png rename assets/textures/{ => spritesheets}/heart.png.import (76%) create mode 100644 assets/textures/spritesheets/skull.png create mode 100644 assets/textures/spritesheets/skull.png.import create mode 100644 assets/textures/tilemaps/level_interior_tileset.png create mode 100644 assets/textures/tilemaps/level_interior_tileset.png.import create mode 100644 resources/explosion_animation.tres create mode 100644 scenes/enemies/skull.tscn create mode 100644 scenes/fightable.tscn create mode 100644 scenes/houses/dark_house.tscn create mode 100644 scenes/houses/house_2.tscn create mode 100644 scenes/houses/house_3.tscn create mode 100644 scenes/houses/house_4.tscn create mode 100644 scenes/interactables/dark_house_door.tscn create mode 100644 scenes/levels/lvl_1.tscn create mode 100644 scenes/menus/hud.tscn create mode 100644 scenes/menus/util/hearts.tscn create mode 100644 scripts/enemies/skull.gd create mode 100644 scripts/enemies/skull.gd.uid create mode 100644 scripts/fightable.gd create mode 100644 scripts/fightable.gd.uid create mode 100644 scripts/menus/util/hearts.gd create mode 100644 scripts/menus/util/hearts.gd.uid diff --git a/aseprite/attack.aseprite b/aseprite/attack.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..83f44e00c5dbab0bf7d460694864633e7193368a GIT binary patch literal 764 zcmeyv#K7=iDI0?Vg8&dSGB7Zt05Jjp#Xy2USpkF~6Ut*BZ6rJ}ldG`PKvrkUn{`3F;|JiG|x74*~W@SZ&1(i8K-dRPB+ zudaLpd5}#C%s>(b{sS583_gjKsYMEgCO{6W0!WIJ;Xg3wAb^#DjiF*ra)JZv|3-$n z{W{;|ITw89WK1b$wEgJ3Hwmcd*GERM7eO8i0%C|6%t&TPGVp-SSRnI9ogpJpZRfMe zNqQ@vO-?q`EaOT0%z4vshwP0RJXnN zZL5E-Hx70E9bCQUcA{I^@|QdB&P(^7b$sm^pZA?V*WTt?ZmhP rrk|2JlT3PRPy3c2m;cproAw0?6$VTy6#cl}vfchxc>{ delta 195 zcmV;!06hPg1nL6`>Hz=%;H3coAdv}o0cw$ft^vD~FaZ^R9smshc$~G=u?c`c429vt z#sM5f&`MlHuyiMPu+-k(4IJh~C31wAydWN=(7T`SYz*OEOW8)6z?Qa$oGG$A((q<$ zhG)`N+e6NzW@@L+K2F!HRsY=me1AUEX!qj1WYSPa=aG?I-XpHZlw7a*my3R{$CO;J xN$y;CpIoUXw`{GoOwHC@t3}MW{>?>N)a1R#bW* diff --git a/aseprite/level_interior_tileset.aseprite b/aseprite/level_interior_tileset.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..7131da7bc048054cf87a4f0a0a21dc50d1769805 GIT binary patch literal 827 zcmcC!W?*=*l#wBUp@BhxfsuiMAq9vL04N3$1j;EO1gXf{&BVa)>mv);Ru-VSVnEEU z0JajzmMkEf1>`yfAVW#P#8ty4&C;+x%=&(z+RX)N?+(xU{mE?R(}1jf2If=pyfgKK zyj6^BEbZ+}3=*26^ByM8{vUt#$?4mF{{R0!d+qj?y7tVhtjMsSGN-OJMn*Toldo6r z>Ywh_m2V&qvPl6LC~)u}$YN*kNvupQQZVEJI+s-eBKIH2hJXZM@Kwxtd)wCUu!BI` zL+^lqix(WG@+orpP2f@tT=L-Ga)TWmEfY5HzIXRyo$+t6^%_impL%5fO#l2c+frB% z1pa>eSQcp)zi;KDt9|-zWDF;=f7u@ z`m+9Uz5ZYS{@ypazwY(lzT9ft^Q(HE<15>WPyH8s{>g2dKJ$<0^Tz$YJO74V{adg7 zKd8D}^6stwk@e>utWVniwL<0pwa03!lh=hz{1g3F=bY)87yHZEl<$cCt=|7Xa9P~n z@9VZNe*H1(>Yu%56&C$3Wz+rd?!LR~d;ZEJ_T@2M^}B0dS~6VwpZi~G{>0ytCjLqP z@h1H9_igXKMTk%NW4r$NR^x!L_P0(H?e^9cufJV+uIyjsmfAeIiGOXM{QNiH<7~m- z>&{*OCiXGz`FZ})x){GHp@&Dd4{ z)^?+oaYw=5rDgI#nQU_B|9{^#-{x!iG~-*p{`IzhK5yGUv*@(trTW)~ruE&`3#$M0 lUFDhbXYIcK#+U4`3;uHf0o&@@I&~!kSk(8Ip>_3~;{Z+)Uxxqy literal 0 HcmV?d00001 diff --git a/aseprite/skull.aseprite b/aseprite/skull.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..35a47b894c9927ef82f8da1a43e79f429b537051 GIT binary patch literal 1536 zcmZQzV_mv);Ru-TIVnEEU0Jajz zx-1}@1>`yfAVW#P#8ty4&C;+x%=&(z+RX)N?+(xU{mE?R(}1jf2If=pyfgKKyj6^B zEbZ+}3=*26^ByM8{vUt#$?4mF{{R0!d+qj?y7tVhtjMsSGN-OJMn*Toldo6r>Ywh_ zm2V&qvPpp%NW#E>AcLL3C$TcMNWt(9ki)9Lz`(?y#PFX9rbLE8j-g`C-Ya*x8Wecg zF32r!UsFf{dVm2nci$Ud0lqt9gF(j8~=~3dUmdJ z=SAzQDbteNwrAJ=oRVL*EP3IbRh>5J??Z&IE{d`j&JM9D=f7fFcIe|WrCGvqyQj~% zzSB8S?`ZV#N5-3t^o^Ha`?g*D_*~-^&)l~znR77b-@5x>uf3nS-P(WM^s~WPOI~XR zu08+8UOO*sW!h18PnE3cTKS}!(am;AG{~dBJ~D!%0u%x7 zff(dhMqsET{3^>J5Ay3&N4^#V9_Gp;^LBptZ~iWef2u%{%QCYnsWd6TbI7uhyq6y17X*^zVvy0bj%Z?q4Cdpy1V; zH+|BZ)1=M>|9xwbGc7CM?e^Qf$x7i@&z5yXdfq*^U3u%AUF8vd`%eev6@6ozeLQ70 z3ox>g!NFJACkOjv3)~S|!M-+Hmi#x7dKJ)jy#mZ$H|E0~2aAH#Zu+Myl zUf%rQznz_PBBhh}EoGkjd%KnWLf5$ub57kgFqaC65xk%2b@QD4vC?Xh-O`u+^hBy> zyMLAaxIJd6>($Q3evjjyd+I{!B5kFyf0by-B?;f?^O9w-!EnjDDbKI}0=9G8ooG*o|79Or)c*-;Px$4@pEpR7i>Klram!Fc5`btWc?fgWx7Ox{8aNTZjIK{9EY-g)q%g nbPUxv)m6ou@>DkSzX0G4b?3^2$MOOt00000NkvXXu0mjfF4T{6 diff --git a/assets/textures/spritesheets/attack.png b/assets/textures/spritesheets/attack.png new file mode 100644 index 0000000000000000000000000000000000000000..66031c02c7f1e8cb0cbaa1132a5e8816a63e9c69 GIT binary patch literal 390 zcmV;10eSw3P)Px$KuJVFRA_Hq&Sdzp>3Q_!L`>pf3fW_nK+L1sn-002)zL}X>& z78!mLhzLIfqQZ%Yw#aZIqCLG}W{wmA@5N=~X_eI4;6nmErK?q!Szx4JSW0`>7R+u` zO~X6k*2cEgK3LVFFP0v`J#GE8aCJE4o3J;$3>uYZkMKKiD}2Qfjd>uPuCG0!Opjo% z&R9OjbQWmV7PPDQi8%p*BT{O3Gi4rk`@ z`+;}N1DEbstAczXj%NToX-?j&!^`rXCSd)&q23R82LF@^3)bd=nc+Du0wW~p+X8oI zh_F3C-+i#;$kloQ006v$+C5WvD_%YmmJ(A1v~Zd^kZ9q@72qs^UlL)*a4C{k#B!rY k+(AVDX#xNM007{`2T!2)>KYqp;Q#;t07*qoM6N<$f{8|^m;e9( literal 0 HcmV?d00001 diff --git a/assets/textures/spritesheets/attack.png.import b/assets/textures/spritesheets/attack.png.import new file mode 100644 index 0000000..6494e74 --- /dev/null +++ b/assets/textures/spritesheets/attack.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1yunf5rn1ncd" +path="res://.godot/imported/attack.png-2cfcc8cfa42d648f76fae46c4823b97e.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/attack.png" +dest_files=["res://.godot/imported/attack.png-2cfcc8cfa42d648f76fae46c4823b97e.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/textures/spritesheets/dark_house_assets.png b/assets/textures/spritesheets/dark_house_assets.png new file mode 100644 index 0000000000000000000000000000000000000000..2032e47fa0ced0e35891adf29e7b1c361e49baff GIT binary patch literal 5272 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 literal 0 HcmV?d00001 diff --git a/assets/textures/spritesheets/dark_house_assets.png.import b/assets/textures/spritesheets/dark_house_assets.png.import new file mode 100644 index 0000000..4563e36 --- /dev/null +++ b/assets/textures/spritesheets/dark_house_assets.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dsapnb753puib" +path="res://.godot/imported/dark_house_assets.png-5b4f16c3b2bac7ea51c517c5ed69aad2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/dark_house_assets.png" +dest_files=["res://.godot/imported/dark_house_assets.png-5b4f16c3b2bac7ea51c517c5ed69aad2.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/textures/spritesheets/explosion.png b/assets/textures/spritesheets/explosion.png new file mode 100644 index 0000000000000000000000000000000000000000..60b74a6d8ec3abc37f2c8cd25e792c0afb5229f4 GIT binary patch literal 32451 zcmZ6ybzD@>`v;1Wf`rn&lpqKQqI7pli_`}Z5Gl!J>6C`0rI8K+0m+3$rB;xT&PCzS zv9jdC0(bFy@9&TMdcmC6nVs`YJntuGCic0WIyos5DIOjkxu%ASAs!w+8u!mff{&}Q zU=&csJwSFEhPrro{txi*LL>3;&T&c0kT{Pd7=UqQ- z15c$Iqe8Jw{xy>6PN|jm2A`C1CW# zt#61FfkNJ*$FLyu|M$Ml3LUjVE>R0_5#gp9&=@nT*$$5PPkcfuRjp`%%!@R1r2fn! zbh`X37>r4PFHi@8hojFfjtTrjZegP4C9g<9A%XdN2l*hGc9}B8IaoV=a_)s^+pV>dO1RO${HllpwbC6EIUV4p zD{khY*ax@KJ7kCuD)a#AyDYHKFuOS4@dWm|cM{7KK?9IIeH%=@T%!oed2{Bhp<)Jayxn?_-J8~@d?XQwB{m$15UVn#I1>@IB@G6 zB-=hiEE^19mpo8|tJi2O)*_fBV z9G@{Pc#FlodO17E^8(I_UR_~ZOXMkRTjFCe=>F*!MS2z-Gfzf}7`>PPTMz+ZSUS-z zCjFz`4hHvx!OLk%r*UoZT*IC!wGXME@1a=t+(aCPL=5G1>ovGDwXfFpA7zFGVg*q_ zn(d$7IqFc`57mf&Rf@*g7`kT+6PG(X*c#=376D)QGd}%#7~pcA*3p@j$g)|&eU}z( zL;Q3@KN35u1EB^kd)=RM-jiJ-TG8?&(J*l4r;uUZI&d#cyg$&+fo5|OeySu#J2~7P z9x20&>4_}Jy*p@|l4bw&4F%`>6yZ|d{odQ?8ZmYRJ|?5%r~skA+1{b%p;N1Sb^duu zQPBB4H_0ohYkM}0Izk=esA}Hr$$$ZmKhs}y^{t*5?8OWdeF#z6Rh!UVkxg&9Oe64h zTP`%xCbp4y0hl;ysaJ=Ti;ojuvGPj3o3qy$;S_22a`mWs(fe%jS&{%O{3W}IOiF=T&j7St`u8oHTkQR%W z321*T^R+W)?s`TADI@WnUQvz!tq_d=4xwTd{@Kj8RzFNJ<* zrxLLY>GosQTdGpy{kH$a#7Fg<6*k(>IuPaXVps1`a&%UPfBdB8YO?}952Ct&K2wk9&G8k0#A9i@ z?L^*LkBN^};9i;;vG<)@hL*%Wk|Tl?=yJ2|&=m~?Y;sw#fShh*;&ay}pCy5)wk7aH zH!u-fW?wczjpl&|eE(ALK83O;63a^jrI&CqC)@t|9x;PLBF?x+4lga%GYJc=2dIB_ zVN!WXqp48GF0a=h#dSKCTInJz57i%o{hMbXVGP#N4BtFO(__gx;^BCsqiR09+&f-P zvT5o+lUh3Ch{qAsJZg(6+9d^&qt|RbP_wc1y#YztAJSZ0UOz=PPQTv9@yiv*FR0ay@hVHp_GMCd}4DEB4(MU8eNAtK2yx`yNlUV6Zzl64sLRE8&^l(+7a z`cM*Lpn;X#jgOM#>5Dy(AfKqxu;=9x%hJ%jA)%x#Uh(ajcJt>uX0V0|c$@5>HASd+ zz}BW7T~D)rvE-F^#R6ZBmOsG&=G&$m^VF)?+r{Ej90ZHE!;0umpyI`-pqd$G{8^t}r2nIwVJ#3s zT^X^k3bWR4+@EVOS4ax$?E0DM{X&jjQ!)5miO&N7YezQ607P$d|`D9nUh{;Ib=j;wh}7baJej0kvIjEUuOg)AHqDv$~9ZHvg;kzO
m(&d>YbmSd^7({6lA2;&;1aEh)z8 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 K>U9sEh5aAz6^=~+ literal 0 HcmV?d00001 diff --git a/assets/textures/spritesheets/explosion.png.import b/assets/textures/spritesheets/explosion.png.import new file mode 100644 index 0000000..549522c --- /dev/null +++ b/assets/textures/spritesheets/explosion.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cj28uue3ibju4" +path="res://.godot/imported/explosion.png-a255340e5a22a052cb2de3e325a49006.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/explosion.png" +dest_files=["res://.godot/imported/explosion.png-a255340e5a22a052cb2de3e325a49006.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/textures/spritesheets/heart.png b/assets/textures/spritesheets/heart.png new file mode 100644 index 0000000000000000000000000000000000000000..67dc0108d518f522e7891b5f86b7b4b0bba1d658 GIT binary patch literal 380 zcmV-?0fYXDP)Px$Hc3Q5R7i>KRxt{~Fcf`h3yKPEZi1t`2XO1)9lV*RaB%kk?v6si!P$yJ+PIh) zf0OdtYEke_Nq=7QUXuQN;Kw2C&So}Oy1m$K*|92P%FquY!%uT5I5E@M%;sv;n;OFD zvNs~iVjMnKd>5hVUy&K1WwC<5;W7pQ99L_k*#Q7B>P?Z}uFu6fU9UmP=a`@ZZJ_|* zi>0{~k^OPFjB#A8pA&}@0C*Aa>ihUj;Sx>}ylZjF=k9(}1dK7Y&<`gsKlP_z3^YA@ z%5VJy&LV3x5#_gf0*l>N2$`@=(A}-dFU*%qp)(E#b{aJ&z!l-U8f}@d#e=@Yc;s{y zjWJNg6vnyNnlEHh`!)8ZPb%JNz!sq~P+_H?@)IUp;=Kky>KfFjZ8X1bCbDZEIBKIm az6E!PLDSL0000Px(ut`KgRCt{2olABiF$_gbpI!o)k^$NOiozgFn?2AY=Qu*2Cs_q1=#J>3s%)%h zS+?wSYei8MMNt&R%dvZO1qz$P{&?lCpD(9r`;`C|M>0M~L=Yu_Md1wp_3yK_*4q2q z$B)k%mMBU9i=p-SZgdGw3?+akV#fFsR1776g`fi9-25nneq9m=B7#5DwJtVcH0syC zPt^mwzkRUA=ANMZ+_0%h9#@9T^-(Wq9Mc@o;O$|rN z11wG--%+Dlfnlc)IVFIF@$}?IjE}|$H3U2fXn-dfU!pv~FF{%wwuXZ801mj7x{QpR z1QOtB?jE^b0x+<$afki!nkfP;h@(lM(U{U|p+yY=0*C$aDrMwo1NVD9sauLBB03Au z#(1gcb3!@nkJs`51k{M!n*8|utXCL&JH5_*_ADTc&(=~fK}*O)muOKjSbG2@datMV z()x1K#1g=OWc=prZPZvEZ-9z`GcFZ^RloD)v?~D&APE`Tz*f*U;vE*G`p`1HLqQ2Z zpf@-=o+5MZEN@`FJGxt_g2072UrxI&0?xHZh1x0|e2dikt>BCMEZx(byL>fhy`*|t zL1_s9K+DEiyLGsGGDJXQ0&f0~%t&eoPz>VD#!1h3H*}8BVPJfxw%G%XJ<0=sWN*{* zz!{HQ*=vlqI$usZE%1C=50JIuMj3;xsL{88{?5^BNppXsZI%}Rl8kASLKxkwh873h zO9-9u_a64gYjnB^3&3ii?4IZil(zH;9qDM6CX9P9^P9~Fy@tpz08*y4Mn1FZhP)rC zmo}x`avy;QwGvyUH@#(YQyz}YrPme^!5Eoa*}PQ*AkG4~#u%p@sXTTJ|Y#@WI7c?*>>&?c|dSt@Y_t}i!ydFR@z!p8w%BHOlVLzk6DLn84XGkR^#>Jmb>i38Fr1(8U_m1yff)vktIgE`9}EdjhQ;uNpI3#H4zl<$23}CBz1q zX?)5S8#E)Xy##Ozd@ew0e2(n2XvS8qGCoiG$smbY13cn{(kl@D^JN~gjIrf^p!ljx g{rNJ9GRX7rAImHpY0w(8wEzGB07*qoM6N<$g7;=cu>b%7 literal 0 HcmV?d00001 diff --git a/assets/textures/spritesheets/skull.png.import b/assets/textures/spritesheets/skull.png.import new file mode 100644 index 0000000..6981191 --- /dev/null +++ b/assets/textures/spritesheets/skull.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c886j66l82ncy" +path="res://.godot/imported/skull.png-98b27d26afd4c757dfebc837a7efd43f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/spritesheets/skull.png" +dest_files=["res://.godot/imported/skull.png-98b27d26afd4c757dfebc837a7efd43f.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/textures/tilemaps/level_interior_tileset.png b/assets/textures/tilemaps/level_interior_tileset.png new file mode 100644 index 0000000000000000000000000000000000000000..fc3cae7df3077721984bc34549455ca60aa177e2 GIT binary patch literal 883 zcmeAS@N?(olHy`uVBq!ia0vp^2|(Py!3HG1+{xJmq!^2X+?^QKos)UVz`(5Q>Eakt zG3V_a!%3G7M2;11e!MW^8(YZ~9%kO-3!a}6nbW|1A)rmfdS0tn_Xo92I<_yXyZ-N= zse6OvcxC)Notx+O{rdFs^?XjF@>jAJR!joQ42E!GW94hk_4m(QzPstCNz4Zm{mYNv ztNxU+a?sIkSZ+C2Delx-Nm+$yvJ9~k^8MGoVAvSTc!Blyw`(1I0=I#J1+kvFK*2=} zFPf%%WjnEVh_X9~{|OG}wsKgb#jtC^KDLsEh*AdkcTC;i{n$HZ#=NSUHT~u9{`|{- z{}g<+eExJw%^uU!*ZFT({eS2Db=#SBruWYCe^NSr?)1z3_0i(@yIvlR<3GyZ%Ktm* z@5$}go@P~_KNqpz@9gVs8b6|@Gwk8@-+Ar#?MJpHvsrt?{>0t!bFSX|{*_@Au2%y_-cO8@XF zxwFd_F5SFn@tL|NHO4DGp7~2R?DV=jlF$MsqhcCOE}N?_4dlVk}v zP|Ch#*2Ftnmy-{4Y?og(v$Uc8QU8tFW%v05JkR>s)EETa@o`SB-XAlu>Q3=T_4SMu z`m(CJ zR)4(atHsfcmMpn{|NegP`1X0R-^Nq!+*-0Dx!N3 literal 0 HcmV?d00001 diff --git a/assets/textures/tilemaps/level_interior_tileset.png.import b/assets/textures/tilemaps/level_interior_tileset.png.import new file mode 100644 index 0000000..631ce88 --- /dev/null +++ b/assets/textures/tilemaps/level_interior_tileset.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2aopgpvv473r" +path="res://.godot/imported/level_interior_tileset.png-75528c6b73d7db3296f599b394b4bd4f.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/tilemaps/level_interior_tileset.png" +dest_files=["res://.godot/imported/level_interior_tileset.png-75528c6b73d7db3296f599b394b4bd4f.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/project.godot b/project.godot index 8cadbae..c26eb16 100644 --- a/project.godot +++ b/project.godot @@ -43,6 +43,10 @@ window/size/mode.release=4 enabled=PackedStringArray("res://addons/TileMapDual/plugin.cfg", "res://addons/dialogue_manager/plugin.cfg") +[global_group] + +Enemy="All enemies with pathfinding" + [gui] theme/default_font_antialiasing=0 diff --git a/resources/explosion_animation.tres b/resources/explosion_animation.tres new file mode 100644 index 0000000..edd1d31 --- /dev/null +++ b/resources/explosion_animation.tres @@ -0,0 +1,130 @@ +[gd_resource type="SpriteFrames" load_steps=19 format=3 uid="uid://bl36fbm1g0x3"] + +[ext_resource type="Texture2D" uid="uid://cj28uue3ibju4" path="res://assets/textures/spritesheets/explosion.png" id="1_gjs8n"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_16r5y"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_x7j8h"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_j2yjp"] +atlas = ExtResource("1_gjs8n") +region = Rect2(404, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_fn6pb"] +atlas = ExtResource("1_gjs8n") +region = Rect2(606, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gnwjt"] +atlas = ExtResource("1_gjs8n") +region = Rect2(808, 0, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lhham"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_utqf1"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_2rpcc"] +atlas = ExtResource("1_gjs8n") +region = Rect2(404, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gtt86"] +atlas = ExtResource("1_gjs8n") +region = Rect2(606, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_w6lqy"] +atlas = ExtResource("1_gjs8n") +region = Rect2(808, 202, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_aarit"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_kug7w"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_vbd1p"] +atlas = ExtResource("1_gjs8n") +region = Rect2(404, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l16b2"] +atlas = ExtResource("1_gjs8n") +region = Rect2(606, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_k2ltt"] +atlas = ExtResource("1_gjs8n") +region = Rect2(808, 404, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yd17a"] +atlas = ExtResource("1_gjs8n") +region = Rect2(0, 606, 202, 202) + +[sub_resource type="AtlasTexture" id="AtlasTexture_et1j0"] +atlas = ExtResource("1_gjs8n") +region = Rect2(202, 606, 202, 202) + +[resource] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_16r5y") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_x7j8h") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_j2yjp") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_fn6pb") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gnwjt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lhham") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_utqf1") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_2rpcc") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_gtt86") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_w6lqy") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_aarit") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_kug7w") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_vbd1p") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l16b2") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_k2ltt") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_yd17a") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_et1j0") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] diff --git a/scenes/enemies/skull.tscn b/scenes/enemies/skull.tscn new file mode 100644 index 0000000..2e51cb6 --- /dev/null +++ b/scenes/enemies/skull.tscn @@ -0,0 +1,111 @@ +[gd_scene load_steps=12 format=3 uid="uid://sr8t2lu6apr4"] + +[ext_resource type="Texture2D" uid="uid://c886j66l82ncy" path="res://assets/textures/spritesheets/skull.png" id="1_04wrl"] +[ext_resource type="Script" uid="uid://cuc28u7op02gq" path="res://scripts/enemies/skull.gd" id="1_xx1px"] +[ext_resource type="PackedScene" uid="uid://de71apm4hg6i" path="res://scenes/fightable.tscn" id="3_3gsvf"] + +[sub_resource type="CapsuleShape2D" id="CapsuleShape2D_04wrl"] +radius = 9.0 + +[sub_resource type="CircleShape2D" id="CircleShape2D_04wrl"] +radius = 250.79872 + +[sub_resource type="CircleShape2D" id="CircleShape2D_xx1px"] +radius = 35.014282 + +[sub_resource type="AtlasTexture" id="AtlasTexture_3gsvf"] +atlas = ExtResource("1_04wrl") +region = Rect2(0, 0, 32, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_17hur"] +atlas = ExtResource("1_04wrl") +region = Rect2(32, 0, 32, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_lgdni"] +atlas = ExtResource("1_04wrl") +region = Rect2(64, 0, 32, 64) + +[sub_resource type="AtlasTexture" id="AtlasTexture_7f2rg"] +atlas = ExtResource("1_04wrl") +region = Rect2(96, 0, 32, 64) + +[sub_resource type="SpriteFrames" id="SpriteFrames_bidx4"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_3gsvf") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_17hur") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lgdni") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_7f2rg") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_lgdni") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_3gsvf") +}], +"loop": true, +"name": &"default", +"speed": 10.0 +}] + +[node name="Skull" type="CharacterBody2D"] +y_sort_enabled = true +collision_layer = 0 +collision_mask = 2 +script = ExtResource("1_xx1px") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(1, 11) +rotation = 1.5707964 +shape = SubResource("CapsuleShape2D_04wrl") + +[node name="NavigationAgent2D" type="NavigationAgent2D" parent="."] +target_desired_distance = 20.0 +avoidance_enabled = true +radius = 16.0 +neighbor_distance = 48.0 + +[node name="VisibleOnScreenEnabler2D" type="VisibleOnScreenEnabler2D" parent="."] + +[node name="Area2D" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="Area2D" groups=["Enemy"]] +shape = SubResource("CircleShape2D_04wrl") +debug_color = Color(0.4897036, 0.51211786, 0.7549306, 0.41960785) + +[node name="FollowUpdateTimer" type="Timer" parent="."] + +[node name="AttackTimer" type="Timer" parent="."] + +[node name="AttackArea" type="Area2D" parent="."] +collision_layer = 0 +collision_mask = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="AttackArea"] +position = Vector2(1, -8) +shape = SubResource("CircleShape2D_xx1px") +debug_color = Color(0.7831714, 0.38409948, 0.54320604, 0.41960785) + +[node name="AnimatedSprite2D" type="AnimatedSprite2D" parent="."] +position = Vector2(0, -15) +sprite_frames = SubResource("SpriteFrames_bidx4") + +[node name="Fightable" parent="." instance=ExtResource("3_3gsvf")] + +[connection signal="velocity_computed" from="NavigationAgent2D" to="." method="_on_navigation_agent_2d_velocity_computed"] +[connection signal="body_entered" from="Area2D" to="." method="_on_area_body_entered"] +[connection signal="body_exited" from="Area2D" to="." method="_on_area_body_exited"] +[connection signal="timeout" from="FollowUpdateTimer" to="." method="_on_follow_update_timer_timeout"] +[connection signal="timeout" from="AttackTimer" to="." method="_on_attack_timer_timeout"] +[connection signal="body_entered" from="AttackArea" to="." method="_on_attack_area_body_entered"] +[connection signal="body_exited" from="AttackArea" to="." method="_on_attack_area_body_exited"] +[connection signal="fought" from="Fightable" to="." method="_on_fightable_fought"] diff --git a/scenes/fightable.tscn b/scenes/fightable.tscn new file mode 100644 index 0000000..d5274cf --- /dev/null +++ b/scenes/fightable.tscn @@ -0,0 +1,13 @@ +[gd_scene load_steps=3 format=3 uid="uid://de71apm4hg6i"] + +[ext_resource type="Script" uid="uid://cvd86i6imfk24" path="res://scripts/fightable.gd" id="1_k4gqj"] + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ij5l6"] +size = Vector2(32, 32) + +[node name="Fightable" type="Area2D"] +collision_layer = 2 +script = ExtResource("1_k4gqj") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +shape = SubResource("RectangleShape2D_ij5l6") diff --git a/scenes/houses/dark_house.tscn b/scenes/houses/dark_house.tscn new file mode 100644 index 0000000..11d18e1 --- /dev/null +++ b/scenes/houses/dark_house.tscn @@ -0,0 +1,28 @@ +[gd_scene load_steps=5 format=3 uid="uid://56kyfhgeh23"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_bgi5t"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_8jyyi"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_bgi5t") +region = Rect2(1, 2, 158, 151) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(143.51248, 50.587547) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-2.2344398, 23.292198) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_8jyyi")] +position = Vector2(49, 32) +scene = "res://scenes/levels/lvl_1.tscn" diff --git a/scenes/houses/house_2.tscn b/scenes/houses/house_2.tscn new file mode 100644 index 0000000..5d53713 --- /dev/null +++ b/scenes/houses/house_2.tscn @@ -0,0 +1,27 @@ +[gd_scene load_steps=5 format=3 uid="uid://bf1tj6ldl520h"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_wi6m7"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_ey5b0"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_wi6m7") +region = Rect2(482, 11, 158, 133) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(152.00409, 48.003414) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-2.0000806, 15.002504) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_ey5b0")] +position = Vector2(52, 23) diff --git a/scenes/houses/house_3.tscn b/scenes/houses/house_3.tscn new file mode 100644 index 0000000..debb796 --- /dev/null +++ b/scenes/houses/house_3.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=6 format=3 uid="uid://cj4j8j3fbpkek"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_ucxgm"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_k43hx"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_ucxgm") +region = Rect2(2, 169, 158, 147) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(146.99966, 50.839867) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ucxgm"] +size = Vector2(78.98275, 7.0426574) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-2.554564, 13.423307) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-36.507423, 42.520287) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_ucxgm") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_k43hx")] +position = Vector2(-36, 30) diff --git a/scenes/houses/house_4.tscn b/scenes/houses/house_4.tscn new file mode 100644 index 0000000..6edee2b --- /dev/null +++ b/scenes/houses/house_4.tscn @@ -0,0 +1,37 @@ +[gd_scene load_steps=6 format=3 uid="uid://cevq6x1qnwwwo"] + +[ext_resource type="Texture2D" uid="uid://db4dctk13rgbm" path="res://assets/textures/spritesheets/houses.png" id="1_cm1ot"] +[ext_resource type="PackedScene" uid="uid://h77hilgbces" path="res://scenes/interactables/interact_sceneswitch.tscn" id="2_1wvia"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_fltv6"] +atlas = ExtResource("1_cm1ot") +region = Rect2(322, 16, 157, 128) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_0afuu"] +size = Vector2(149.02954, 46.397488) + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_ucxgm"] +size = Vector2(64.457184, 19.574635) + +[node name="Home" type="StaticBody2D"] + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(-2, -28) +texture = SubResource("AtlasTexture_fltv6") + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(1.5026193, -6.772405) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_0afuu") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] +y_sort_enabled = true +position = Vector2(-40.2494, 26.281471) +rotation = -0.0021335608 +shape = SubResource("RectangleShape2D_ucxgm") +debug_color = Color(0.8768643, 0.34231007, 0.046793222, 0.41960785) + +[node name="InteractSceneswitch" parent="." instance=ExtResource("2_1wvia")] +position = Vector2(-55, 20) diff --git a/scenes/interactables/chair.tscn b/scenes/interactables/chair.tscn index f91f707..71c9276 100644 --- a/scenes/interactables/chair.tscn +++ b/scenes/interactables/chair.tscn @@ -9,7 +9,7 @@ load_path = "res://.godot/imported/table_chair.png-e74f8b9bc13823f10c8b29c28e9a3 [sub_resource type="AtlasTexture" id="AtlasTexture_asrj3"] resource_local_to_scene = true atlas = SubResource("CompressedTexture2D_o804i") -region = Rect2(-3, 0, 32, 32) +region = Rect2(0, 0, 32, 32) [sub_resource type="RectangleShape2D" id="RectangleShape2D_w04lg"] size = Vector2(14, 18) diff --git a/scenes/interactables/dark_house_door.tscn b/scenes/interactables/dark_house_door.tscn new file mode 100644 index 0000000..82c19f6 --- /dev/null +++ b/scenes/interactables/dark_house_door.tscn @@ -0,0 +1,129 @@ +[gd_scene load_steps=9 format=3 uid="uid://cac5cla8jdogn"] + +[ext_resource type="Texture2D" uid="uid://dsapnb753puib" path="res://assets/textures/spritesheets/dark_house_assets.png" id="1_s5xo4"] +[ext_resource type="PackedScene" uid="uid://n24dhbpflcec" path="res://scenes/interactable.tscn" id="2_ljyl3"] + +[sub_resource type="GDScript" id="GDScript_enrye"] +script/source = "extends StaticBody2D + +@onready var animation_player: AnimationPlayer = $AnimationPlayer +@onready var anti_softlock_marker: Marker2D = $AntiSoftlockMarker + +var open: bool = false +var open1: bool = true + +func _on_interactable_interacted(_player: Player) -> void: + if !open: + animation_player.play(\"open\") + open = true + +func _on_interactable_body_exited(body: Node2D) -> void: + if open1 && body is Player: + animation_player.speed_scale = 4 + animation_player.play_backwards(\"open\") + open1 = false + await animation_player.animation_finished + body.global_position = anti_softlock_marker.global_position +" + +[sub_resource type="AtlasTexture" id="AtlasTexture_nmjqc"] +atlas = ExtResource("1_s5xo4") +region = Rect2(160, 64, 32, 64) + +[sub_resource type="Animation" id="Animation_ra1dx"] +resource_name = "open" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:texture:region") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Rect2(160, 64, 32, 64), Rect2(144, 64, 32, 64)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CollisionShape2D2:shape:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 1), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Vector2(48, 5), Vector2(16, 5)] +} + +[sub_resource type="Animation" id="Animation_xbx8n"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Sprite2D:texture:region") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Rect2(160, 64, 32, 64)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("CollisionShape2D2:shape:size") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector2(48, 5)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_clxe4"] +_data = { +&"RESET": SubResource("Animation_xbx8n"), +&"open": SubResource("Animation_ra1dx") +} + +[sub_resource type="RectangleShape2D" id="RectangleShape2D_xpwqa"] +size = Vector2(48, 5) + +[node name="DarkHouseDoor" type="StaticBody2D"] +script = SubResource("GDScript_enrye") + +[node name="Sprite2D" type="Sprite2D" parent="."] +position = Vector2(32, -16) +texture = SubResource("AtlasTexture_nmjqc") + +[node name="Sprite2D2" type="Sprite2D" parent="."] +position = Vector2(0, -16) +texture = SubResource("AtlasTexture_nmjqc") +flip_h = true + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +&"": SubResource("AnimationLibrary_clxe4") +} + +[node name="Interactable" parent="." instance=ExtResource("2_ljyl3")] +position = Vector2(16, 20) +auto_interact = true + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2(-8, 13.5) +shape = SubResource("RectangleShape2D_xpwqa") + +[node name="CollisionShape2D2" type="CollisionShape2D" parent="."] +position = Vector2(40, 14) +shape = SubResource("RectangleShape2D_xpwqa") + +[node name="AntiSoftlockMarker" type="Marker2D" parent="."] +position = Vector2(16, -26) + +[connection signal="body_exited" from="Interactable" to="." method="_on_interactable_body_exited"] +[connection signal="interacted" from="Interactable" to="." method="_on_interactable_interacted"] diff --git a/scenes/levels/home.tscn b/scenes/levels/home.tscn index 19a53c7..1625592 100644 --- a/scenes/levels/home.tscn +++ b/scenes/levels/home.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=12 format=4 uid="uid://ccfdsdgaon63m"] +[gd_scene load_steps=11 format=4 uid="uid://ccfdsdgaon63m"] [ext_resource type="Texture2D" uid="uid://ctr2whxnff2vn" path="res://assets/textures/tilemaps/main_house_interior_tileset.png" id="1_2vl8h"] [ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="1_ikf4c"] @@ -17,20 +17,6 @@ func _ready() -> void: RenderingServer.set_default_clear_color(\"#0d0805\") " -[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_yskkl"] -texture = ExtResource("1_snitx") -texture_region_size = Vector2i(32, 32) -0:0/0 = 0 -1:0/0 = 0 -0:1/0 = 0 -0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-12, -4, 16, -4, 16, 16, -12, 16) -1:1/0 = 0 -1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -4, 12, -4, 12, 16, -16, 16) -0:2/0 = 0 -0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-11.5, -16, 16, -16, 16, -7, -2, -7, -2, 7, -8, 7) -1:2/0 = 0 -1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 12, -16, 12, -7.5, 9, 7, 2, 7, 2, -7, -16, -7) - [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_5uvba"] texture = ExtResource("1_2vl8h") texture_region_size = Vector2i(32, 32) @@ -96,7 +82,6 @@ terrain_set_0/mode = 0 terrain_set_0/terrain_0/name = "Ground 0" terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) sources/1 = SubResource("TileSetAtlasSource_5uvba") -sources/0 = SubResource("TileSetAtlasSource_yskkl") [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_d1b6h"] texture = ExtResource("1_snitx") @@ -108,9 +93,9 @@ texture_region_size = Vector2i(32, 32) 1:1/0 = 0 1:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 5.5, 12, 5.5, 12, 16, -16, 16) 0:2/0 = 0 -0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-11.5, -16, 16, -16, 16, -7, -2, -7, -2, 7, -8, 7) +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-12, -16, 16, -16, 16, 11, -11.5, 11.5) 1:2/0 = 0 -1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 12, -16, 12, -7.5, 9, 7, 2, 7, 2, -7, -16, -7) +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 12, -16, 12, 11, -16, 11) [sub_resource type="TileSet" id="TileSet_cchwu"] tile_size = Vector2i(32, 32) @@ -157,6 +142,9 @@ y_sort_enabled = true position = Vector2(176, 235) tilemap = NodePath("../TileMapLayer") +[node name="AnimatedSprite2D" parent="Player" index="0"] +animation = &"up" + [node name="InteractSceneswitch" parent="." instance=ExtResource("4_snitx")] position = Vector2(176, 268) scene = "res://scenes/levels/hood.tscn" diff --git a/scenes/levels/hood.tscn b/scenes/levels/hood.tscn index 914edd5..a70b9f4 100644 --- a/scenes/levels/hood.tscn +++ b/scenes/levels/hood.tscn @@ -1,10 +1,16 @@ -[gd_scene load_steps=10 format=4 uid="uid://clnb1eshis30m"] +[gd_scene load_steps=22 format=4 uid="uid://clnb1eshis30m"] [ext_resource type="Texture2D" uid="uid://dve2b2glwitsw" path="res://assets/textures/tilemaps/grass_tilemap.png" id="1_74em3"] [ext_resource type="Material" uid="uid://cmbcfxlkxxnwq" path="res://addons/TileMapDual/ghost_material.tres" id="1_eywaq"] [ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="1_ge1l5"] [ext_resource type="PackedScene" uid="uid://cokphmh2g8wvs" path="res://scenes/houses/home.tscn" id="3_5rqdi"] [ext_resource type="Script" uid="uid://cjk8nronimk5r" path="res://addons/TileMapDual/TileMapDual.gd" id="3_hrrfd"] +[ext_resource type="PackedScene" uid="uid://bf1tj6ldl520h" path="res://scenes/houses/house_2.tscn" id="5_hrrfd"] +[ext_resource type="PackedScene" uid="uid://cj4j8j3fbpkek" path="res://scenes/houses/house_3.tscn" id="6_m0fav"] +[ext_resource type="PackedScene" uid="uid://cevq6x1qnwwwo" path="res://scenes/houses/house_4.tscn" id="7_jkyiu"] +[ext_resource type="PackedScene" uid="uid://56kyfhgeh23" path="res://scenes/houses/dark_house.tscn" id="8_qnhkw"] +[ext_resource type="PackedScene" uid="uid://cac5cla8jdogn" path="res://scenes/interactables/dark_house_door.tscn" id="9_cfsyk"] +[ext_resource type="Texture2D" uid="uid://dsapnb753puib" path="res://assets/textures/spritesheets/dark_house_assets.png" id="9_oxy87"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_eywaq"] texture = ExtResource("1_74em3") @@ -586,10 +592,146 @@ sources/1 = SubResource("TileSetAtlasSource_eywaq") [sub_resource type="TileSetScenesCollectionSource" id="TileSetScenesCollectionSource_1r5ec"] resource_name = "Houses" scenes/1/scene = ExtResource("3_5rqdi") +scenes/2/scene = ExtResource("5_hrrfd") +scenes/3/scene = ExtResource("6_m0fav") +scenes/4/scene = ExtResource("7_jkyiu") +scenes/5/scene = ExtResource("8_qnhkw") +scenes/6/scene = ExtResource("9_cfsyk") + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_cfsyk"] +texture = ExtResource("9_oxy87") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +6:1/0 = 0 +6:1/0/terrain_set = 0 +6:1/0/terrain = 0 +6:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-2, 10.5, 16, 10.5, 16, 16, -2, 16) +6:1/0/terrains_peering_bit/right_side = 0 +6:1/0/terrains_peering_bit/bottom_right_corner = 0 +6:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0 = 0 +7:1/0/terrain_set = 0 +7:1/0/terrain = 0 +7:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10.5, 16, 10.5, 16, 16, -16, 16) +7:1/0/terrains_peering_bit/right_side = 0 +7:1/0/terrains_peering_bit/bottom_right_corner = 0 +7:1/0/terrains_peering_bit/bottom_side = 0 +7:1/0/terrains_peering_bit/bottom_left_corner = 0 +7:1/0/terrains_peering_bit/left_side = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +5:2/0 = 0 +6:2/0 = 0 +6:2/0/terrain_set = 0 +6:2/0/terrain = 0 +6:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-2, -16, 0, -16, 0, 16, -2, 16) +6:2/0/terrains_peering_bit/bottom_side = 0 +6:2/0/terrains_peering_bit/top_side = 0 +7:2/0 = 0 +7:2/0/terrain_set = 0 +7:2/0/terrain = 0 +7:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 13.5, 0, 13.5, 0.049461365, 16, -16, 16) +7:2/0/terrains_peering_bit/bottom_side = 0 +7:2/0/terrains_peering_bit/bottom_left_corner = 0 +7:2/0/terrains_peering_bit/left_side = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +5:3/0 = 0 +5:3/0/terrain_set = 0 +5:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 10.5, 16, 10.5, 16, 16, -16, 16) +6:3/0 = 0 +6:3/0/terrain_set = 0 +6:3/0/terrain = 0 +6:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-2, -16, 0, -16, 0, 14, 16, 14, 16, 16, -2, 16) +6:3/0/terrains_peering_bit/right_side = 0 +6:3/0/terrains_peering_bit/bottom_right_corner = 0 +6:3/0/terrains_peering_bit/bottom_side = 0 +6:3/0/terrains_peering_bit/top_side = 0 +7:3/0 = 0 +7:3/0/terrain_set = 0 +7:3/0/terrain = 0 +7:3/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, 13.5, -2, 13.5, -2, -16, 0, -16, 0.049461365, 16, -16, 16) +7:3/0/terrains_peering_bit/bottom_side = 0 +7:3/0/terrains_peering_bit/bottom_left_corner = 0 +7:3/0/terrains_peering_bit/left_side = 0 +7:3/0/terrains_peering_bit/top_side = 0 [sub_resource type="TileSet" id="TileSet_5rqdi"] tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "fence" +terrain_set_0/terrain_0/color = Color(0.36084375, 0.38989827, 0.42006177, 1) sources/0 = SubResource("TileSetScenesCollectionSource_1r5ec") +sources/1 = SubResource("TileSetAtlasSource_cfsyk") + +[sub_resource type="GDScript" id="GDScript_jkyiu"] +script/source = "extends Area2D + +@onready var animation_player: AnimationPlayer = $CanvasModulate/AnimationPlayer +var night: bool = false + +func _on_body_entered(body: Node2D) -> void: + if !night && body is Player: + night = true + animation_player.play(\"night\") +" + +[sub_resource type="Animation" id="Animation_qnhkw"] +resource_name = "night" +length = 3.0 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 3), +"transitions": PackedFloat32Array(1, 1), +"update": 0, +"values": [Color(1, 1, 1, 1), Color(0.10980392, 0.14901961, 0.21960784, 1)] +} + +[sub_resource type="Animation" id="Animation_oxy87"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath(".:color") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Color(1, 1, 1, 1)] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_cfsyk"] +_data = { +&"RESET": SubResource("Animation_oxy87"), +&"night": SubResource("Animation_qnhkw") +} + +[sub_resource type="SegmentShape2D" id="SegmentShape2D_mv4yg"] +a = Vector2(570, 496) +b = Vector2(570, -80) [node name="Hood" type="Node2D"] z_as_relative = false @@ -598,7 +740,7 @@ y_sort_enabled = true [node name="Ground" type="TileMapLayer" parent="."] z_index = -1 material = ExtResource("1_eywaq") -tile_map_data = PackedByteArray("AAAQAAkAAQAAAAMAAAAQAAgAAQAAAAMAAAAQAAcAAQAEAAcAAAAQAAYAAQABAAIAAAAQAAUAAQADAAAAAAAQAAQAAQAEAAcAAAAQAAMAAQAEAAcAAAAQAAIAAQAAAAcAAAAQAAEAAQAEAAcAAAAQAAAAAQAEAAcAAAAQAP//AQAAAAMAAAAQAP7/AQAAAAcAAAAPAAkAAQAAAAcAAAAPAAgAAQAAAAMAAAAPAAcAAQAAAAMAAAAPAAYAAQABAAYAAAAPAAUAAQAHAAQAAAAPAAQAAQAAAAcAAAAPAAMAAQAEAAcAAAAPAAIAAQAAAAcAAAAPAAEAAQAEAAcAAAAPAAAAAQAAAAcAAAAPAP//AQAAAAMAAAAPAP7/AQAAAAcAAAAOAAkAAQAAAAMAAAAOAAgAAQAEAAcAAAAOAAcAAQAAAAMAAAAOAAYAAQAFAAYAAAAOAAUAAQAGAAQAAAAOAAQAAQAHAAYAAAAOAAMAAQAHAAYAAAAOAAIAAQAAAAMAAAAOAAEAAQAAAAcAAAAOAAAAAQAAAAcAAAAOAP//AQAAAAMAAAAOAP7/AQAEAAcAAAANAAkAAQAAAAMAAAANAAgAAQAEAAcAAAANAAcAAQAAAAcAAAANAAYAAQABAAIAAAANAAUAAQACAAEAAAANAAQAAQACAAUAAAANAAIAAQAAAAcAAAANAAEAAQAAAAcAAAANAAAAAQAAAAcAAAANAP//AQAAAAcAAAANAP7/AQAEAAcAAAAMAAkAAQAEAAcAAAAMAAgAAQAAAAcAAAAMAAcAAQAEAAcAAAAMAAYAAQAFAAYAAAAMAAUAAQABAAUAAAAMAAQAAQABAAQAAAAMAAMAAQABAAMAAAAMAAIAAQAAAAcAAAAMAAEAAQAAAAMAAAAMAAAAAQAAAAMAAAAMAP//AQAAAAMAAAAMAP7/AQAAAAMAAAALAAkAAQAAAAcAAAALAAgAAQAAAAMAAAALAAcAAQAAAAMAAAALAAYAAQAFAAYAAAALAAUAAQAHAAQAAAALAAQAAQAAAAMAAAALAAMAAQAAAAMAAAALAAIAAQAAAAMAAAALAAEAAQAEAAcAAAALAAAAAQAAAAMAAAALAP//AQAAAAMAAAALAP7/AQAAAAcAAAAKAAkAAQAAAAcAAAAKAAgAAQAAAAcAAAAKAAcAAQAAAAMAAAAKAAYAAQAFAAYAAAAKAAUAAQADAAQAAAAKAAQAAQAEAAcAAAAKAAMAAQAAAAcAAAAKAAIAAQAAAAcAAAAKAAEAAQAAAAMAAAAKAAAAAQAAAAMAAAAKAP//AQAAAAcAAAAKAP7/AQAEAAcAAAAJAAkAAQAEAAcAAAAJAAgAAQAEAAcAAAAJAAcAAQAHAAcAAAAJAAYAAQAHAAUAAAAJAAUAAQAHAAQAAAAJAAQAAQAEAAcAAAAJAAMAAQAAAAMAAAAJAAIAAQAEAAcAAAAJAAEAAQAAAAMAAAAJAAAAAQAAAAMAAAAJAP//AQAAAAMAAAAJAP7/AQAAAAMAAAAIAAkAAQADAAMAAAAIAAgAAQADAAYAAAAIAAcAAQADAAUAAAAIAAYAAQACAAUAAAAIAAUAAQADAAAAAAAIAAQAAQAAAAMAAAAIAAMAAQAAAAcAAAAIAAIAAQAEAAcAAAAIAAEAAQAAAAMAAAAIAAAAAQAEAAcAAAAIAP//AQAAAAcAAAAIAP7/AQAEAAcAAAAHAAkAAQABAAIAAAAHAAgAAQABAAAAAAAHAAcAAQAFAAQAAAAHAAYAAQACAAYAAAAHAAUAAQAHAAQAAAAHAAQAAQAAAAMAAAAHAAMAAQAAAAMAAAAHAAIAAQAAAAcAAAAHAAEAAQAAAAMAAAAHAAAAAQAAAAcAAAAHAP//AQAAAAcAAAAHAP7/AQAEAAcAAAAGAAkAAQAAAAMAAAAGAAgAAQAAAAcAAAAGAAcAAQAAAAMAAAAGAAYAAQABAAIAAAAGAAUAAQADAAQAAAAGAAQAAQAAAAMAAAAGAAMAAQAAAAcAAAAGAAIAAQAEAAcAAAAGAAEAAQAEAAcAAAAGAAAAAQAAAAcAAAAGAP//AQAEAAcAAAAGAP7/AQAEAAcAAAAFAAkAAQAAAAcAAAAFAAgAAQAEAAcAAAAFAAcAAQAAAAcAAAAFAAYAAQABAAIAAAAFAAUAAQADAAQAAAAFAAQAAQAAAAMAAAAFAAMAAQAAAAMAAAAFAAIAAQAAAAcAAAAFAAEAAQAAAAMAAAAFAAAAAQAEAAcAAAAFAP//AQAAAAMAAAAFAP7/AQAAAAMAAAAEAAkAAQAAAAcAAAAEAAgAAQAEAAcAAAAEAAcAAQAEAAcAAAAEAAYAAQABAAIAAAAEAAUAAQACAAAAAAAEAAQAAQADAAYAAAAEAAMAAQAHAAYAAAAEAAIAAQADAAIAAAAEAAEAAQADAAAAAAAEAAAAAQAAAAcAAAAEAP//AQAAAAcAAAAEAP7/AQAEAAcAAAADAAkAAQAAAAcAAAADAAgAAQAAAAcAAAADAAcAAQAAAAMAAAADAAYAAQAFAAYAAAADAAUAAQACAAUAAAADAAQAAQACAAUAAAADAAMAAQACAAEAAAADAAIAAQACAAUAAAADAAEAAQADAAAAAAADAAAAAQAAAAcAAAADAP//AQAAAAcAAAADAP7/AQAAAAcAAAACAAkAAQAEAAcAAAACAAgAAQAAAAcAAAACAAcAAQAEAAcAAAACAAYAAQAFAAYAAAACAAUAAQAFAAQAAAACAAQAAQAGAAYAAAACAAMAAQACAAUAAAACAAIAAQAFAAUAAAACAAEAAQABAAMAAAACAAAAAQAAAAMAAAACAP//AQAEAAcAAAACAP7/AQAEAAcAAAABAAkAAQAEAAcAAAABAAgAAQAAAAMAAAABAAcAAQAEAAcAAAABAAYAAQAAAAcAAAABAAUAAQAEAAcAAAABAAQAAQABAAIAAAABAAMAAQABAAUAAAABAAIAAQABAAcAAAABAAEAAQAAAAcAAAABAAAAAQAEAAcAAAABAP//AQAAAAcAAAABAP7/AQAAAAcAAAAAAAkAAQAEAAcAAAAAAAgAAQAEAAcAAAAAAAcAAQAEAAcAAAAAAAYAAQAEAAcAAAAAAAUAAQAAAAcAAAAAAAQAAQABAAYAAAAAAAMAAQAHAAQAAAAAAAIAAQAAAAMAAAAAAAEAAQAAAAMAAAAAAAAAAQAAAAMAAAAAAP//AQAEAAcAAAAAAP7/AQAEAAcAAAD//wkAAQAAAAcAAAD//wgAAQAEAAcAAAD//wcAAQAEAAcAAAD//wYAAQAAAAMAAAD//wUAAQAEAAcAAAD//wQAAQABAAIAAAD//wMAAQAHAAQAAAD//wIAAQAAAAcAAAD//wEAAQAAAAMAAAD//wAAAQAAAAMAAAD/////AQAEAAcAAAD///7/AQAAAAcAAAD+/wkAAQAEAAcAAAD+/wgAAQAAAAcAAAD+/wcAAQAEAAcAAAD+/wUAAQAEAAcAAAD+/wQAAQABAAYAAAD+/wMAAQAGAAQAAAD+/wIAAQADAAIAAAD+/wEAAQAHAAQAAAD+/wAAAQAAAAcAAAD+////AQAAAAcAAAD+//7/AQAEAAcAAAD9/wMAAQACAAEAAAD9/wQAAQABAAYAAAD8/wMAAQABAAEAAAD8/wQAAQABAAIAAAD8/wIAAQABAAAAAAD9/wIAAQACAAUAAAD8/wEAAQABAAMAAAD9/wEAAQADAAAAAAD8//7/AQAAAAcAAAD8////AQAAAAMAAAD8/wYAAQAAAAcAAAD8/wgAAQAAAAcAAAD8/wkAAQAAAAMAAAD8/wsAAQAAAAMAAAD9/wsAAQAAAAMAAAD+/wsAAQAEAAcAAAD//wsAAQAAAAcAAAD//woAAQAAAAcAAAAAAAoAAQAAAAcAAAABAAoAAQAAAAMAAAACAAoAAQAAAAcAAAACAAsAAQAAAAcAAAADAAsAAQAAAAcAAAAEAAsAAQAAAAMAAAAFAAsAAQAAAAMAAAAGAAsAAQAEAAcAAAAHAAsAAQAAAAcAAAAIAAsAAQAEAAcAAAAEAAwAAQAAAAcAAAADAAwAAQAAAAcAAAACAAwAAQAAAAcAAAABAAwAAQAAAAMAAAAAAAwAAQAAAAMAAAAAAAsAAQAAAAcAAAD//wwAAQAAAAMAAAD+/wwAAQAAAAcAAAD9/wwAAQAEAAcAAAD8/wwAAQAEAAcAAAAFAAwAAQAEAAcAAAAGAAwAAQAEAAcAAAAHAAwAAQAAAAcAAAAIAAwAAQAAAAMAAAAJAAwAAQAEAAcAAAAKAAwAAQAAAAcAAAALAAwAAQAAAAcAAAAMAAwAAQAEAAcAAAANAAwAAQAEAAcAAAAOAAsAAQAAAAMAAAAPAAsAAQAEAAcAAAAQAAsAAQAEAAcAAAAPAAwAAQAAAAcAAAAOAAwAAQAAAAMAAAALAAsAAQAAAAMAAAAKAAsAAQAEAAcAAAAMAAsAAQAAAAMAAAANAAsAAQAEAAcAAAAQAAwAAQAAAAcAAAARAAUAAQADAAQAAAARAAYAAQAFAAYAAAASAAYAAQABAAIAAAASAAUAAQADAAAAAAATAAUAAQADAAAAAAATAAYAAQAFAAYAAAARAAMAAQAAAAcAAAASAAMAAQAAAAMAAAATAAMAAQAAAAMAAAARAAQAAQAAAAMAAAASAAQAAQAAAAcAAAATAAQAAQAEAAcAAAAUAAMAAQAAAAMAAAAUAAQAAQAAAAcAAAAUAAUAAQAHAAQAAAAUAAYAAQABAAYAAAAVAAUAAQADAAAAAAAVAAYAAQABAAIAAAAWAAYAAQABAAYAAAAWAAUAAQAHAAQAAAAXAAYAAQAFAAYAAAAXAAUAAQAFAAUAAAAYAAYAAQABAAYAAAAYAAUAAQAGAAUAAAASAAgAAQAAAAMAAAASAAkAAQAAAAMAAAASAAoAAQAEAAcAAAASAAsAAQAAAAcAAAASAAwAAQAAAAMAAAASAA0AAQAAAAMAAAATAA0AAQAEAAcAAAATAAwAAQAAAAcAAAAUAAwAAQAAAAMAAAAVAAwAAQAEAAcAAAAWAAwAAQAAAAMAAAAXAAwAAQAAAAMAAAAXAAsAAQAEAAcAAAAYAAsAAQAAAAMAAAAYAAoAAQAAAAMAAAAYAAkAAQAEAAcAAAAYAAgAAQAAAAcAAAAXAAgAAQAEAAcAAAAWAAgAAQAAAAcAAAAVAAgAAQAAAAcAAAAUAAgAAQAAAAMAAAAUAAkAAQAAAAcAAAAVAAkAAQAAAAcAAAAWAAoAAQAAAAcAAAAXAAoAAQAEAAcAAAAUAAoAAQAEAAcAAAAYAA0AAQAAAAMAAAAXAA0AAQAAAAcAAAAWAA0AAQAEAAcAAAAVAA0AAQAEAAcAAAAUAA0AAQAEAAcAAAARAA0AAQAEAAcAAAAQAA0AAQAEAAcAAAAPAA0AAQAAAAcAAAANAA0AAQAAAAMAAAAMAA0AAQAAAAcAAAALAA0AAQAAAAMAAAAKAA0AAQAAAAMAAAAJAA0AAQAEAAcAAAAIAA0AAQAAAAcAAAAHAA0AAQAAAAMAAAAGAA0AAQAAAAMAAAAFAA0AAQAAAAMAAAAEAA0AAQAAAAcAAAADAA0AAQAAAAcAAAACAA0AAQAEAAcAAAABAA0AAQAAAAcAAAAAAA0AAQAEAAcAAAD//w0AAQAEAAcAAAD+/w0AAQAAAAcAAAD9/w0AAQAEAAcAAAD8/w0AAQAAAAcAAAD8/w4AAQAEAAcAAAD9/w4AAQAEAAcAAAD+/w4AAQAEAAcAAAD//w4AAQAAAAMAAAAAAA4AAQAAAAcAAAABAA4AAQAAAAMAAAACAA4AAQAEAAcAAAADAA4AAQAAAAcAAAAEAA4AAQAAAAcAAAAFAA4AAQAAAAMAAAAGAA4AAQAAAAcAAAAHAA4AAQAAAAMAAAAIAA4AAQAAAAcAAAAJAA4AAQAEAAcAAAAKAA4AAQAEAAcAAAALAA4AAQAAAAcAAAAMAA4AAQAEAAcAAAANAA4AAQAEAAcAAAAOAA4AAQAAAAMAAAAPAA4AAQAAAAMAAAAQAA4AAQAAAAMAAAARAA4AAQAAAAMAAAASAA4AAQAAAAMAAAATAA4AAQAAAAcAAAAUAA4AAQAAAAcAAAAVAA4AAQAAAAcAAAAWAA4AAQAAAAcAAAAXAA4AAQAAAAcAAAAYAA4AAQAAAAMAAAAYAAMAAQACAAEAAAAXAAMAAQAGAAUAAAAWAAMAAQABAAAAAAAXAAIAAQACAAUAAAAYAAIAAQACAAEAAAAWAAIAAQABAAQAAAAVAAIAAQAAAAcAAAAUAAIAAQAEAAcAAAATAAIAAQAAAAcAAAASAAEAAQAAAAcAAAATAAAAAQAAAAcAAAAUAAAAAQAAAAcAAAAVAAAAAQAEAAcAAAAWAAAAAQABAAMAAAAXAAAAAQAHAAQAAAAYAAAAAQADAAAAAAAYAP//AQAAAAMAAAAYAP7/AQAAAAcAAAAXAP7/AQAAAAcAAAAWAP7/AQAEAAcAAAAVAP7/AQAAAAMAAAAUAP7/AQAAAAMAAAATAP7/AQAAAAcAAAASAP7/AQAAAAcAAAARAP7/AQAAAAcAAAARAP//AQAEAAcAAAASAP//AQAAAAcAAAASAAAAAQAEAAcAAAANAAMAAQADAAQAAAAWAAQAAQAAAAIAAAAXAAQAAQAGAAYAAAAYAAQAAQACAAUAAAAZAAIAAQACAAUAAAAZAAMAAQACAAEAAAAZAAQAAQACAAUAAAAaAAIAAQACAAEAAAAaAAMAAQAGAAUAAAAaAAQAAQADAAUAAAAaAP7/AQAEAAcAAAAaAP//AQAAAAcAAAAaAAAAAQADAAQAAAAbAAAAAQADAAQAAAAbAP//AQAEAAcAAAAcAP//AQAEAAcAAAAcAP7/AQAAAAcAAAAcAAAAAQADAAIAAAAcAAEAAQAHAAYAAAAcAAIAAQADAAIAAAAbAAIAAQAGAAUAAAAbAAMAAQACAAUAAAAbAAQAAQABAAIAAAAbAAUAAQAAAAcAAAAbAAYAAQAAAAMAAAAaAAYAAQADAAYAAAAaAAUAAQAHAAYAAAAcAAQAAQADAAMAAAAcAAMAAQAHAAYAAAAcAAUAAQAEAAcAAAAcAAYAAQAAAAcAAAAeAP7/AQAAAAMAAAAeAP//AQAAAAcAAAAeAAAAAQAAAAcAAAAeAAEAAQAEAAcAAAAdAAEAAQAAAAMAAAAdAAIAAQAEAAcAAAAdAAMAAQAEAAcAAAAdAAQAAQAAAAMAAAAdAAUAAQAAAAcAAAAdAAYAAQAAAAMAAAAeAAUAAQAEAAcAAAAeAAQAAQAAAAcAAAAeAAMAAQAAAAcAAAAeAAIAAQAEAAcAAAAfAAIAAQAEAAcAAAAfAAEAAQAAAAMAAAAfAAAAAQAAAAcAAAAgAAAAAQAEAAcAAAAgAP//AQAEAAcAAAAgAP7/AQAAAAMAAAAfAP//AQAEAAcAAAAfAAMAAQAAAAcAAAAfAAQAAQAEAAcAAAAgAAQAAQAAAAcAAAAgAAMAAQAAAAcAAAAgAAIAAQAAAAcAAAAgAAUAAQAEAAcAAAAfAAUAAQAAAAcAAAAfAAYAAQAEAAcAAAAgAAcAAQADAAAAAAAgAAgAAQABAAYAAAAgAAkAAQAEAAcAAAAgAAoAAQAAAAcAAAAgAAsAAQAAAAMAAAAgAAwAAQAAAAMAAAAfAAwAAQAAAAcAAAAfAA0AAQAEAAcAAAAgAA0AAQAEAAcAAAAgAA4AAQAAAAMAAAAfAA4AAQAEAAcAAAAeAA4AAQAAAAcAAAAdAA4AAQAEAAcAAAAcAA4AAQAAAAMAAAAbAA4AAQAAAAMAAAAaAA4AAQAEAAcAAAAaAA0AAQAAAAMAAAAaAAwAAQAEAAcAAAAbAAwAAQAAAAcAAAAbAAsAAQAAAAMAAAAcAAsAAQAAAAcAAAAdAAsAAQAAAAMAAAAdAAwAAQAAAAMAAAAcAAwAAQAAAAMAAAAcAAoAAQAAAAMAAAAdAAoAAQAAAAcAAAAdAAkAAQAEAAcAAAAeAAkAAQAAAAcAAAAfAAkAAQAEAAcAAAAfAAgAAQAFAAYAAAAfAAoAAQAAAAcAAAAfAAsAAQAEAAcAAAAeAAsAAQAEAAcAAAAeAAgAAQAFAAYAAAAeAAcAAQAHAAQAAAAeAAYAAQAAAAcAAAAdAAcAAQADAAQAAAAcAAcAAQAHAAQAAAAcAAgAAQAFAAYAAAAbAAgAAQAFAAYAAAAaAAgAAQAFAAYAAAAZAAgAAQABAAYAAAAZAAkAAQAEAAcAAAAaAAkAAQAAAAcAAAAaAAoAAQAAAAcAAAAbAAoAAQAAAAcAAAAZAAUAAQACAAUAAAAZAAYAAQACAAYAAAAWAAEAAQABAAQAAAAXAAEAAQAGAAUAAAAYAAEAAQACAAEAAAAZAAEAAQAGAAUAAAAaAAEAAQACAAEAAAAbAAEAAQACAAEAAAAZAAAAAQAHAAQAAAAZAAcAAQABAAAAAAAaAAcAAQAGAAQAAAAbAAcAAQADAAQAAAAfAAcAAQADAAAAAAAhAAcAAQAHAAYAAAAdAAgAAQAFAAYAAAAhAAgAAQAAAAEAAAD7/wMAAQABAAMAAAD7/wQAAQACAAMAAAD7//7/AQAEAAcAAAD7////AQAEAAcAAAD7/wAAAQAAAAMAAAD7/wEAAQAAAAcAAAD7/wUAAQADAAcAAAD7/wYAAQAEAAcAAAD7/wcAAQAEAAcAAAD7/wgAAQAAAAcAAAD7/wkAAQAEAAcAAAD7/woAAQAAAAcAAAD7/wsAAQAEAAcAAAD7/wwAAQAEAAcAAAD7/w0AAQAAAAMAAAD7/w4AAQAAAAcAAAAhAP7/AQAAAAMAAAAhAP//AQAEAAcAAAAhAAAAAQAAAAcAAAAhAAEAAQAAAAMAAAAhAAIAAQAEAAcAAAAhAAMAAQAEAAcAAAAhAAQAAQAAAAMAAAAhAAUAAQAEAAcAAAAhAAkAAQAEAAYAAAAhAAoAAQAAAAMAAAAhAAsAAQAAAAcAAAAhAAwAAQAEAAcAAAAhAA0AAQAAAAcAAAAhAA4AAQAEAAcAAAABAAsAAQAAAAcAAAD+/woAAQAAAAcAAAD+/wYAAQAAAAcAAAD9/woAAQAAAAcAAAD9/wkAAQAEAAcAAAD9/wgAAQAAAAMAAAD9/wcAAQAEAAcAAAD9/wYAAQAAAAMAAAD9/wUAAQAAAAcAAAD8/woAAQAEAAcAAAD8/wcAAQAEAAcAAAD8/wUAAQAAAAMAAAAGAAoAAQAAAAMAAAAFAAoAAQAAAAcAAAAEAAoAAQAEAAcAAAADAAoAAQAEAAcAAAAeAA0AAQAAAAMAAAAeAAwAAQAEAAcAAAAeAAoAAQAAAAMAAAAdAA0AAQAAAAMAAAAcAA0AAQAAAAcAAAAbAA0AAQAAAAcAAAAaAAsAAQAAAAMAAAAZAA4AAQAAAAcAAAAZAA0AAQAAAAMAAAAZAAwAAQAAAAcAAAAZAAsAAQAEAAcAAAAZAAoAAQAAAAMAAAAYAAwAAQAEAAcAAAAWAAsAAQAAAAMAAAAVAAsAAQAAAAMAAAAVAAoAAQAEAAcAAAAUAAsAAQAAAAcAAAATAAsAAQAEAAcAAAATAAoAAQAAAAMAAAARAAwAAQAAAAcAAAARAAsAAQAEAAcAAAARAAoAAQAAAAcAAAAQAAoAAQAAAAMAAAAPAAoAAQAAAAMAAAAOAA0AAQAEAAcAAAAOAAoAAQAEAAcAAAANAAoAAQAEAAcAAAAMAAoAAQAAAAMAAAALAAoAAQAEAAcAAAAKAAoAAQAAAAMAAAAJAAsAAQAAAAMAAAAJAAoAAQAEAAcAAAAIAAoAAQAEAAcAAAAHAAoAAQAAAAcAAAAcAAkAAQAEAAcAAAAbAAkAAQAAAAMAAAAXAAkAAQAAAAMAAAAWAAkAAQAAAAcAAAATAAkAAQAAAAcAAAARAAkAAQAEAAcAAAAYAAcAAQAAAAcAAAAXAAcAAQAAAAcAAAAWAAcAAQAAAAMAAAAVAAcAAQAAAAcAAAAUAAcAAQAEAAcAAAATAAgAAQAAAAMAAAATAAcAAQAEAAcAAAASAAcAAQAEAAcAAAARAAgAAQAAAAcAAAARAAcAAQAAAAMAAAAhAAYAAQAAAAcAAAAgAAYAAQAEAAcAAAAgAAEAAQAEAAcAAAAfAP7/AQAAAAcAAAAdAAAAAQAAAAMAAAAdAP//AQAEAAcAAAAdAP7/AQAAAAMAAAAbAP7/AQAEAAcAAAAZAP//AQAEAAcAAAAZAP7/AQAEAAcAAAAXAP//AQAAAAMAAAAWAP//AQAEAAcAAAAVAP//AQAAAAcAAAAUAP//AQAEAAcAAAATAP//AQAAAAMAAAD9/wAAAQAEAAcAAAD9////AQAEAAcAAAD9//7/AQAEAAcAAAD8/wAAAQAEAAcAAAARAAAAAQAAAAcAAAAVAAEAAQAAAAcAAAAUAAEAAQAAAAMAAAATAAEAAQAEAAcAAAASAAIAAQAAAAMAAAARAAIAAQAAAAMAAAARAAEAAQAEAAcAAAAVAAQAAQAEAAcAAAAVAAMAAQAEAAcAAAA=") +tile_map_data = PackedByteArray("AAAQAAkAAQAAAAMAAAAQAAgAAQAAAAMAAAAQAAcAAQAEAAcAAAAQAAYAAQABAAIAAAAQAAUAAQADAAAAAAAQAAQAAQAEAAcAAAAQAAMAAQAEAAcAAAAQAAIAAQAAAAcAAAAQAAEAAQAEAAcAAAAQAAAAAQAEAAcAAAAQAP//AQAAAAMAAAAQAP7/AQAAAAcAAAAPAAkAAQAAAAcAAAAPAAgAAQAAAAMAAAAPAAcAAQAAAAMAAAAPAAYAAQABAAYAAAAPAAUAAQAGAAQAAAAPAAQAAQADAAIAAAAPAAMAAQAAAAAAAAAPAAIAAQAAAAcAAAAPAAEAAQAEAAcAAAAPAAAAAQAAAAcAAAAPAP//AQAAAAMAAAAPAP7/AQAAAAcAAAAOAAkAAQAAAAMAAAAOAAgAAQAEAAcAAAAOAAcAAQAAAAMAAAAOAAYAAQAFAAYAAAAOAAUAAQACAAUAAAAOAAQAAQACAAUAAAAOAAMAAQACAAQAAAAOAAIAAQAAAAMAAAAOAAEAAQAAAAcAAAAOAAAAAQAAAAcAAAAOAP//AQAAAAMAAAAOAP7/AQAEAAcAAAANAAkAAQAAAAMAAAANAAgAAQAEAAcAAAANAAcAAQAAAAcAAAANAAYAAQABAAIAAAANAAUAAQACAAEAAAANAAQAAQACAAUAAAANAAIAAQAAAAcAAAANAAEAAQAAAAcAAAANAAAAAQAAAAcAAAANAP//AQAAAAcAAAANAP7/AQAEAAcAAAAMAAkAAQAEAAcAAAAMAAgAAQAAAAcAAAAMAAcAAQAEAAcAAAAMAAYAAQAFAAYAAAAMAAUAAQABAAUAAAAMAAQAAQABAAQAAAAMAAMAAQABAAMAAAAMAAIAAQAAAAcAAAAMAAEAAQAAAAMAAAAMAAAAAQAAAAMAAAAMAP//AQAAAAMAAAAMAP7/AQAAAAMAAAALAAkAAQAAAAcAAAALAAgAAQAAAAMAAAALAAcAAQAAAAMAAAALAAYAAQAFAAYAAAALAAUAAQAHAAQAAAALAAQAAQAAAAMAAAALAAMAAQAAAAMAAAALAAIAAQAAAAMAAAALAAEAAQAEAAcAAAALAAAAAQAAAAMAAAALAP//AQAAAAMAAAALAP7/AQAAAAcAAAAKAAkAAQAAAAcAAAAKAAgAAQAAAAcAAAAKAAcAAQAAAAMAAAAKAAYAAQAFAAYAAAAKAAUAAQADAAQAAAAKAAQAAQAEAAcAAAAKAAMAAQAAAAcAAAAKAAIAAQAAAAcAAAAKAAEAAQAAAAMAAAAKAAAAAQAAAAMAAAAKAP//AQAAAAcAAAAKAP7/AQAEAAcAAAAJAAkAAQAEAAcAAAAJAAgAAQAEAAcAAAAJAAcAAQAHAAcAAAAJAAYAAQAHAAUAAAAJAAUAAQAHAAQAAAAJAAQAAQAEAAcAAAAJAAMAAQAAAAMAAAAJAAIAAQAEAAcAAAAJAAEAAQAAAAMAAAAJAAAAAQAAAAMAAAAJAP//AQAAAAMAAAAJAP7/AQAAAAMAAAAIAAkAAQADAAYAAAAIAAgAAQADAAYAAAAIAAcAAQADAAUAAAAIAAYAAQACAAUAAAAIAAUAAQADAAAAAAAIAAQAAQAAAAMAAAAIAAMAAQAAAAcAAAAIAAIAAQAEAAcAAAAIAAEAAQAAAAMAAAAIAAAAAQAEAAcAAAAIAP//AQAAAAcAAAAIAP7/AQAEAAcAAAAHAAkAAQABAAAAAAAHAAgAAQABAAAAAAAHAAcAAQAFAAQAAAAHAAYAAQACAAYAAAAHAAUAAQAHAAQAAAAHAAQAAQAAAAMAAAAHAAMAAQAAAAMAAAAHAAIAAQAAAAcAAAAHAAEAAQAAAAMAAAAHAAAAAQAAAAcAAAAHAP//AQAAAAcAAAAHAP7/AQAEAAcAAAAGAAkAAQAAAAMAAAAGAAgAAQAAAAcAAAAGAAcAAQAAAAMAAAAGAAYAAQABAAIAAAAGAAUAAQADAAQAAAAGAAQAAQAAAAMAAAAGAAMAAQAAAAcAAAAGAAIAAQAEAAcAAAAGAAEAAQAEAAcAAAAGAAAAAQAAAAcAAAAGAP//AQAEAAcAAAAGAP7/AQAEAAcAAAAFAAkAAQAAAAcAAAAFAAgAAQAEAAcAAAAFAAcAAQAAAAcAAAAFAAYAAQABAAIAAAAFAAUAAQADAAQAAAAFAAQAAQAAAAMAAAAFAAMAAQAAAAMAAAAFAAIAAQAAAAcAAAAFAAEAAQAAAAMAAAAFAAAAAQAEAAcAAAAFAP//AQAAAAMAAAAFAP7/AQAAAAMAAAAEAAkAAQAAAAcAAAAEAAgAAQAEAAcAAAAEAAcAAQAEAAcAAAAEAAYAAQABAAIAAAAEAAUAAQACAAAAAAAEAAQAAQADAAYAAAAEAAMAAQAHAAYAAAAEAAIAAQADAAIAAAAEAAEAAQADAAAAAAAEAAAAAQAAAAcAAAAEAP//AQAAAAcAAAAEAP7/AQAEAAcAAAADAAkAAQAAAAcAAAADAAgAAQAAAAcAAAADAAcAAQAAAAMAAAADAAYAAQAFAAYAAAADAAUAAQACAAUAAAADAAQAAQACAAUAAAADAAMAAQACAAEAAAADAAIAAQACAAUAAAADAAEAAQADAAAAAAADAAAAAQAAAAcAAAADAP//AQAAAAcAAAADAP7/AQAAAAcAAAACAAkAAQAEAAcAAAACAAgAAQAAAAcAAAACAAcAAQAEAAcAAAACAAYAAQAFAAYAAAACAAUAAQAFAAQAAAACAAQAAQAGAAYAAAACAAMAAQACAAUAAAACAAIAAQAFAAUAAAACAAEAAQABAAMAAAACAAAAAQAAAAMAAAACAP//AQAEAAcAAAACAP7/AQAEAAcAAAABAAkAAQAEAAcAAAABAAgAAQAAAAMAAAABAAcAAQAEAAcAAAABAAYAAQAAAAcAAAABAAUAAQAEAAcAAAABAAQAAQABAAIAAAABAAMAAQABAAUAAAABAAIAAQABAAcAAAABAAEAAQAAAAcAAAABAAAAAQAEAAcAAAABAP//AQAAAAcAAAABAP7/AQAAAAcAAAAAAAkAAQAEAAcAAAAAAAgAAQAEAAcAAAAAAAcAAQAEAAcAAAAAAAYAAQAEAAcAAAAAAAUAAQAAAAcAAAAAAAQAAQABAAYAAAAAAAMAAQAHAAQAAAAAAAIAAQAAAAMAAAAAAAEAAQAAAAMAAAAAAAAAAQAAAAMAAAAAAP//AQAEAAcAAAAAAP7/AQAEAAcAAAD//wkAAQAAAAcAAAD//wgAAQAEAAcAAAD//wcAAQAEAAcAAAD//wYAAQAAAAMAAAD//wUAAQAEAAcAAAD//wQAAQABAAIAAAD//wMAAQAHAAQAAAD//wIAAQAAAAcAAAD//wEAAQAAAAMAAAD//wAAAQAAAAMAAAD/////AQAEAAcAAAD///7/AQAAAAcAAAD+/wkAAQAEAAcAAAD+/wgAAQAAAAcAAAD+/wcAAQAEAAcAAAD+/wUAAQAEAAcAAAD+/wQAAQABAAYAAAD+/wMAAQAGAAQAAAD+/wIAAQADAAIAAAD+/wEAAQAHAAQAAAD+/wAAAQAAAAcAAAD+////AQAAAAcAAAD+//7/AQAEAAcAAAD9/wMAAQACAAEAAAD9/wQAAQABAAYAAAD8/wMAAQABAAEAAAD8/wQAAQABAAIAAAD8/wIAAQABAAAAAAD9/wIAAQACAAUAAAD8/wEAAQABAAMAAAD9/wEAAQADAAAAAAD8//7/AQAAAAcAAAD8////AQAAAAMAAAD8/wYAAQAAAAcAAAD8/wgAAQAAAAcAAAD8/wkAAQAAAAMAAAD8/wsAAQAAAAMAAAD9/wsAAQAAAAMAAAD+/wsAAQAEAAcAAAD//wsAAQAAAAcAAAD//woAAQAAAAcAAAAAAAoAAQAAAAcAAAABAAoAAQAAAAMAAAACAAoAAQAAAAcAAAACAAsAAQAEAAQAAAADAAsAAQAAAAcAAAAEAAsAAQAAAAMAAAAFAAsAAQAAAAMAAAAGAAsAAQAEAAcAAAAHAAsAAQABAAIAAAAIAAsAAQADAAMAAAAEAAwAAQADAAQAAAADAAwAAQADAAAAAAACAAwAAQAGAAQAAAABAAwAAQACAAYAAAAAAAwAAQAAAAMAAAAAAAsAAQAAAAcAAAD//wwAAQAAAAMAAAD+/wwAAQAAAAcAAAD9/wwAAQAEAAcAAAD8/wwAAQAEAAcAAAAFAAwAAQADAAAAAAAGAAwAAQADAAAAAAAHAAwAAQAEAAQAAAAIAAwAAQADAAMAAAAJAAwAAQAEAAcAAAAKAAwAAQAAAAcAAAALAAwAAQAAAAcAAAAMAAwAAQAEAAcAAAANAAwAAQAEAAcAAAAOAAsAAQAAAAMAAAAPAAsAAQAEAAcAAAAQAAsAAQAEAAcAAAAPAAwAAQAAAAcAAAAOAAwAAQAAAAMAAAALAAsAAQAAAAMAAAAKAAsAAQAEAAcAAAAMAAsAAQAAAAMAAAANAAsAAQAEAAcAAAAQAAwAAQAAAAcAAAARAAUAAQADAAQAAAARAAYAAQAFAAYAAAASAAYAAQABAAIAAAASAAUAAQADAAAAAAATAAUAAQADAAAAAAATAAYAAQAFAAYAAAARAAMAAQAAAAcAAAASAAMAAQAAAAMAAAATAAMAAQAAAAMAAAARAAQAAQAAAAMAAAASAAQAAQAAAAcAAAATAAQAAQAEAAcAAAAUAAMAAQAAAAMAAAAUAAQAAQAAAAcAAAAUAAUAAQAHAAQAAAAUAAYAAQABAAYAAAAVAAUAAQADAAAAAAAVAAYAAQABAAIAAAAWAAYAAQABAAYAAAAWAAUAAQAHAAQAAAAXAAYAAQAFAAYAAAAXAAUAAQAFAAUAAAAYAAYAAQABAAYAAAAYAAUAAQAGAAUAAAASAAgAAQAAAAMAAAASAAkAAQAAAAMAAAASAAoAAQAEAAcAAAASAAsAAQAAAAcAAAASAAwAAQAAAAMAAAASAA0AAQAAAAMAAAATAA0AAQAEAAcAAAATAAwAAQAAAAcAAAAUAAwAAQAAAAMAAAAVAAwAAQAEAAcAAAAWAAwAAQAAAAMAAAAXAAwAAQAAAAMAAAAXAAsAAQAEAAcAAAAYAAsAAQAAAAMAAAAYAAoAAQAAAAMAAAAYAAkAAQAEAAcAAAAYAAgAAQAAAAcAAAAXAAgAAQAEAAcAAAAWAAgAAQAAAAcAAAAVAAgAAQAAAAcAAAAUAAgAAQAAAAMAAAAUAAkAAQAAAAcAAAAVAAkAAQAAAAcAAAAWAAoAAQAAAAcAAAAXAAoAAQAEAAcAAAAUAAoAAQAEAAcAAAAYAA0AAQAAAAMAAAAXAA0AAQAAAAcAAAAWAA0AAQAEAAcAAAAVAA0AAQAEAAcAAAAUAA0AAQAEAAcAAAARAA0AAQAEAAcAAAAQAA0AAQAEAAcAAAAPAA0AAQAAAAcAAAANAA0AAQAAAAMAAAAMAA0AAQAAAAcAAAALAA0AAQAAAAMAAAAKAA0AAQAAAAMAAAAJAA0AAQAEAAcAAAAIAA0AAQAAAAcAAAAHAA0AAQAAAAMAAAAGAA0AAQAAAAMAAAAFAA0AAQAAAAMAAAAEAA0AAQAAAAcAAAADAA0AAQAAAAcAAAACAA0AAQAEAAcAAAABAA0AAQAAAAcAAAAAAA0AAQAEAAcAAAD//w0AAQAEAAcAAAD+/w0AAQAAAAcAAAD9/w0AAQAEAAcAAAD8/w0AAQAAAAcAAAD8/w4AAQAEAAcAAAD9/w4AAQAEAAcAAAD+/w4AAQAEAAcAAAD//w4AAQAAAAMAAAAAAA4AAQAAAAcAAAABAA4AAQAAAAMAAAACAA4AAQAEAAcAAAADAA4AAQAAAAcAAAAEAA4AAQAAAAcAAAAFAA4AAQAAAAMAAAAGAA4AAQAAAAcAAAAHAA4AAQAAAAMAAAAIAA4AAQAAAAcAAAAJAA4AAQAEAAcAAAAKAA4AAQAEAAcAAAALAA4AAQAAAAcAAAAMAA4AAQAEAAcAAAANAA4AAQAEAAcAAAAOAA4AAQAAAAMAAAAPAA4AAQAAAAMAAAAQAA4AAQAAAAMAAAARAA4AAQAAAAMAAAASAA4AAQAAAAMAAAATAA4AAQAAAAcAAAAUAA4AAQAAAAcAAAAVAA4AAQAAAAcAAAAWAA4AAQAAAAcAAAAXAA4AAQAAAAcAAAAYAA4AAQAAAAMAAAAYAAMAAQACAAEAAAAXAAMAAQAGAAUAAAAWAAMAAQABAAAAAAAXAAIAAQACAAUAAAAYAAIAAQACAAEAAAAWAAIAAQABAAQAAAAVAAIAAQAAAAcAAAAUAAIAAQAEAAcAAAATAAIAAQAAAAcAAAASAAEAAQAAAAcAAAATAAAAAQAAAAcAAAAUAAAAAQAAAAcAAAAVAAAAAQAEAAcAAAAWAAAAAQABAAMAAAAXAAAAAQAHAAQAAAAYAAAAAQADAAAAAAAYAP//AQAAAAMAAAAYAP7/AQAAAAcAAAAXAP7/AQAAAAcAAAAWAP7/AQAEAAcAAAAVAP7/AQAAAAMAAAAUAP7/AQAAAAMAAAATAP7/AQAAAAcAAAASAP7/AQAAAAcAAAARAP7/AQAAAAcAAAARAP//AQAEAAcAAAASAP//AQAAAAcAAAASAAAAAQAEAAcAAAANAAMAAQADAAQAAAAWAAQAAQAAAAIAAAAXAAQAAQAGAAYAAAAYAAQAAQACAAUAAAAZAAIAAQACAAUAAAAZAAMAAQACAAEAAAAZAAQAAQACAAUAAAAaAAIAAQACAAEAAAAaAAMAAQAGAAUAAAAaAAQAAQADAAUAAAAaAP7/AQAEAAcAAAAaAP//AQAAAAcAAAAaAAAAAQADAAQAAAAbAAAAAQADAAQAAAAbAP//AQAEAAcAAAAcAP//AQAEAAcAAAAcAP7/AQAAAAcAAAAcAAAAAQADAAIAAAAcAAEAAQAHAAYAAAAcAAIAAQADAAIAAAAbAAIAAQAGAAUAAAAbAAMAAQACAAUAAAAbAAQAAQABAAIAAAAbAAUAAQAAAAcAAAAbAAYAAQAAAAMAAAAaAAYAAQADAAYAAAAaAAUAAQAHAAYAAAAcAAQAAQADAAMAAAAcAAMAAQAHAAYAAAAcAAUAAQAEAAcAAAAcAAYAAQAAAAcAAAAeAP7/AQAAAAMAAAAeAP//AQAAAAcAAAAeAAAAAQAAAAcAAAAeAAEAAQAEAAcAAAAdAAEAAQAAAAMAAAAdAAIAAQAEAAcAAAAdAAMAAQAEAAcAAAAdAAQAAQAAAAMAAAAdAAUAAQAAAAcAAAAdAAYAAQAAAAMAAAAeAAUAAQAEAAcAAAAeAAQAAQAAAAcAAAAeAAMAAQAAAAcAAAAeAAIAAQAEAAcAAAAfAAIAAQAEAAcAAAAfAAEAAQAAAAMAAAAfAAAAAQAAAAcAAAAgAAAAAQAEAAcAAAAgAP//AQAEAAcAAAAgAP7/AQAAAAMAAAAfAP//AQAEAAcAAAAfAAMAAQAAAAcAAAAfAAQAAQAEAAcAAAAgAAQAAQAAAAcAAAAgAAMAAQAAAAcAAAAgAAIAAQAAAAcAAAAgAAUAAQAEAAcAAAAfAAUAAQAAAAcAAAAfAAYAAQAEAAcAAAAgAAcAAQADAAAAAAAgAAgAAQABAAYAAAAgAAkAAQAEAAcAAAAgAAoAAQAAAAcAAAAgAAsAAQAAAAMAAAAgAAwAAQAAAAMAAAAfAAwAAQAAAAcAAAAfAA0AAQAEAAcAAAAgAA0AAQAEAAcAAAAgAA4AAQAAAAMAAAAfAA4AAQAEAAcAAAAeAA4AAQAAAAcAAAAdAA4AAQAEAAcAAAAcAA4AAQAAAAMAAAAbAA4AAQAAAAMAAAAaAA4AAQAEAAcAAAAaAA0AAQAAAAMAAAAaAAwAAQAEAAcAAAAbAAwAAQAAAAcAAAAbAAsAAQAAAAMAAAAcAAsAAQAAAAcAAAAdAAsAAQAAAAMAAAAdAAwAAQAAAAMAAAAcAAwAAQAAAAMAAAAcAAoAAQAAAAMAAAAdAAoAAQAAAAcAAAAdAAkAAQAEAAcAAAAeAAkAAQAAAAcAAAAfAAkAAQAEAAcAAAAfAAgAAQAFAAYAAAAfAAoAAQAAAAcAAAAfAAsAAQAEAAcAAAAeAAsAAQAEAAcAAAAeAAgAAQAFAAYAAAAeAAcAAQAHAAQAAAAeAAYAAQAAAAcAAAAdAAcAAQADAAQAAAAcAAcAAQAHAAQAAAAcAAgAAQAFAAYAAAAbAAgAAQAFAAYAAAAaAAgAAQAFAAYAAAAZAAgAAQABAAYAAAAZAAkAAQAEAAcAAAAaAAkAAQAAAAcAAAAaAAoAAQAAAAcAAAAbAAoAAQAAAAcAAAAZAAUAAQACAAUAAAAZAAYAAQACAAYAAAAWAAEAAQABAAQAAAAXAAEAAQAGAAUAAAAYAAEAAQACAAEAAAAZAAEAAQAGAAUAAAAaAAEAAQACAAEAAAAbAAEAAQACAAEAAAAZAAAAAQAHAAQAAAAZAAcAAQABAAAAAAAaAAcAAQAGAAQAAAAbAAcAAQADAAQAAAAfAAcAAQADAAAAAAAhAAcAAQAHAAYAAAAdAAgAAQAFAAYAAAAhAAgAAQAAAAEAAAD7/wMAAQABAAMAAAD7/wQAAQABAAQAAAD7//7/AQAEAAcAAAD7////AQAEAAcAAAD7/wAAAQAAAAMAAAD7/wEAAQAAAAcAAAD7/wUAAQADAAcAAAD7/wYAAQAEAAcAAAD7/wcAAQAEAAcAAAD7/wgAAQAAAAcAAAD7/wkAAQAEAAcAAAD7/woAAQAAAAcAAAD7/wsAAQAEAAcAAAD7/wwAAQAEAAcAAAD7/w0AAQAAAAMAAAD7/w4AAQAAAAcAAAAhAP7/AQAAAAMAAAAhAP//AQAEAAcAAAAhAAAAAQAAAAcAAAAhAAEAAQAAAAMAAAAhAAIAAQAEAAcAAAAhAAMAAQAEAAcAAAAhAAQAAQAAAAMAAAAhAAUAAQAEAAcAAAAhAAkAAQAEAAYAAAAhAAoAAQAAAAMAAAAhAAsAAQAAAAcAAAAhAAwAAQAEAAcAAAAhAA0AAQAAAAcAAAAhAA4AAQAEAAcAAAABAAsAAQADAAQAAAD+/woAAQAAAAcAAAD+/wYAAQAAAAcAAAD9/woAAQAAAAcAAAD9/wkAAQAEAAcAAAD9/wgAAQAAAAMAAAD9/wcAAQAEAAcAAAD9/wYAAQAAAAMAAAD9/wUAAQAAAAcAAAD8/woAAQAEAAcAAAD8/wcAAQAEAAcAAAD8/wUAAQAAAAMAAAAGAAoAAQAAAAMAAAAFAAoAAQAAAAcAAAAEAAoAAQAEAAcAAAADAAoAAQAEAAcAAAAeAA0AAQAAAAMAAAAeAAwAAQAEAAcAAAAeAAoAAQAAAAMAAAAdAA0AAQAAAAMAAAAcAA0AAQAAAAcAAAAbAA0AAQAAAAcAAAAaAAsAAQAAAAMAAAAZAA4AAQAAAAcAAAAZAA0AAQAAAAMAAAAZAAwAAQAAAAcAAAAZAAsAAQAEAAcAAAAZAAoAAQAAAAMAAAAYAAwAAQAEAAcAAAAWAAsAAQAAAAMAAAAVAAsAAQAAAAMAAAAVAAoAAQAEAAcAAAAUAAsAAQAAAAcAAAATAAsAAQAEAAcAAAATAAoAAQAAAAMAAAARAAwAAQAAAAcAAAARAAsAAQAEAAcAAAARAAoAAQAAAAcAAAAQAAoAAQAAAAMAAAAPAAoAAQAAAAMAAAAOAA0AAQAEAAcAAAAOAAoAAQAEAAcAAAANAAoAAQAEAAcAAAAMAAoAAQAAAAMAAAALAAoAAQAEAAcAAAAKAAoAAQAAAAMAAAAJAAsAAQAAAAMAAAAJAAoAAQAEAAcAAAAIAAoAAQADAAYAAAAHAAoAAQACAAEAAAAcAAkAAQAEAAcAAAAbAAkAAQAAAAMAAAAXAAkAAQAAAAMAAAAWAAkAAQAAAAcAAAATAAkAAQAAAAcAAAARAAkAAQAEAAcAAAAYAAcAAQAAAAcAAAAXAAcAAQAAAAcAAAAWAAcAAQAAAAMAAAAVAAcAAQAAAAcAAAAUAAcAAQAEAAcAAAATAAgAAQAAAAMAAAATAAcAAQAEAAcAAAASAAcAAQAEAAcAAAARAAgAAQAAAAcAAAARAAcAAQAAAAMAAAAhAAYAAQAAAAcAAAAgAAYAAQAEAAcAAAAgAAEAAQAEAAcAAAAfAP7/AQAAAAcAAAAdAAAAAQAAAAMAAAAdAP//AQAEAAcAAAAdAP7/AQAAAAMAAAAbAP7/AQAEAAcAAAAZAP//AQAEAAcAAAAZAP7/AQAEAAcAAAAXAP//AQAAAAMAAAAWAP//AQAEAAcAAAAVAP//AQAAAAcAAAAUAP//AQAEAAcAAAATAP//AQAAAAMAAAD9/wAAAQAEAAcAAAD9////AQAEAAcAAAD9//7/AQAEAAcAAAD8/wAAAQAEAAcAAAARAAAAAQAAAAcAAAAVAAEAAQAAAAcAAAAUAAEAAQAAAAMAAAATAAEAAQAEAAcAAAASAAIAAQAAAAMAAAARAAIAAQAAAAMAAAARAAEAAQAEAAcAAAAVAAQAAQAEAAcAAAAVAAMAAQAEAAcAAAD6//z/AQAAAAcAAAD7//z/AQAAAAMAAAD8//z/AQAAAAcAAAD9//z/AQAAAAMAAAD+//z/AQAAAAMAAAD///z/AQAAAAcAAAAAAPz/AQAAAAMAAAABAPz/AQAAAAcAAAACAPz/AQAEAAcAAAADAPz/AQAEAAcAAAAEAPz/AQAAAAcAAAAFAPz/AQAAAAcAAAAGAPz/AQAAAAcAAAAHAPz/AQAAAAcAAAAIAPz/AQAAAAMAAAAJAPz/AQAEAAcAAAAKAPz/AQAAAAMAAAALAPz/AQAEAAcAAAAMAPz/AQAAAAMAAAANAPz/AQAAAAMAAAAOAPz/AQAEAAcAAAAPAPz/AQAAAAMAAAAQAPz/AQAAAAcAAAARAPz/AQAEAAcAAAASAPz/AQAEAAcAAAATAPz/AQAAAAcAAAAUAPz/AQAEAAcAAAAVAPz/AQAAAAMAAAAWAPz/AQAAAAcAAAAhAPz/AQAAAAMAAAAhAP3/AQAAAAMAAAAgAP3/AQAAAAMAAAAgAPz/AQAAAAcAAAAfAPz/AQAAAAcAAAAeAPz/AQAEAAcAAAAdAPz/AQAEAAcAAAAcAPz/AQAAAAcAAAAbAPz/AQAEAAcAAAAaAPz/AQAAAAMAAAAZAPz/AQAAAAcAAAAYAPz/AQAAAAcAAAAXAPz/AQAAAAMAAAD6//3/AQAAAAcAAAD6//7/AQAEAAcAAAD6////AQAEAAcAAAD6/wAAAQAEAAcAAAD6/wEAAQAAAAMAAAD6/wIAAQAEAAcAAAD6/wMAAQAEAAcAAAD6/wQAAQAEAAcAAAD6/wUAAQAAAAcAAAD6/wYAAQAEAAcAAAD6/wcAAQAAAAMAAAD6/wgAAQAAAAcAAAD6/wkAAQAAAAMAAAD6/woAAQAEAAcAAAD6/wsAAQAAAAMAAAD6/wwAAQAEAAcAAAD6/w0AAQAAAAcAAAD6/w4AAQAAAAcAAAA=") tile_set = SubResource("TileSet_ge1l5") rendering_quadrant_size = 32 physics_quadrant_size = 32 @@ -609,11 +751,26 @@ metadata/_edit_lock_ = true [node name="Objects" type="TileMapLayer" parent="."] y_sort_enabled = true -tile_map_data = PackedByteArray("AAADAAAAAAAAAAAAAQA=") +tile_map_data = PackedByteArray("AAADAAAAAAAAAAAAAQANAAMAAAAAAAAAAgD9/wAAAAAAAAAAAwADAAoAAAAAAAAABAAZAP//AAAAAAAABQAbAAMAAQAHAAEAAAAcAAMAAQAHAAMAAAAcAAIAAQAGAAIAAAAcAAEAAQAGAAIAAAAcAAAAAQAGAAIAAAAcAP//AQAHAAIAAAAbAP//AQAGAAEAAAAYAP//AQAHAAIAAAAXAP//AQAHAAEAAAAWAP//AQAGAAEAAAAWAAAAAQAGAAIAAAAWAAEAAQAGAAIAAAAWAAIAAQAGAAIAAAAWAAMAAQAGAAMAAAAXAAMAAQAHAAEAAAAYAAMAAQAHAAEAAAAZAAMAAAAAAAAABgA=") tile_set = SubResource("TileSet_5rqdi") rendering_quadrant_size = 32 physics_quadrant_size = 32 [node name="Player" parent="." node_paths=PackedStringArray("tilemap") instance=ExtResource("1_ge1l5")] -position = Vector2(112, 51) +position = Vector2(112, 53) tilemap = NodePath("../Ground") + +[node name="NightTrigger" type="Area2D" parent="."] +script = SubResource("GDScript_jkyiu") + +[node name="CanvasModulate" type="CanvasModulate" parent="NightTrigger"] + +[node name="AnimationPlayer" type="AnimationPlayer" parent="NightTrigger/CanvasModulate"] +libraries = { +&"": SubResource("AnimationLibrary_cfsyk") +} + +[node name="CollisionShape2D" type="CollisionShape2D" parent="NightTrigger"] +shape = SubResource("SegmentShape2D_mv4yg") + +[connection signal="body_entered" from="NightTrigger" to="NightTrigger" method="_on_body_entered"] diff --git a/scenes/levels/lvl_1.tscn b/scenes/levels/lvl_1.tscn new file mode 100644 index 0000000..77605d1 --- /dev/null +++ b/scenes/levels/lvl_1.tscn @@ -0,0 +1,155 @@ +[gd_scene load_steps=15 format=4 uid="uid://bdpobbbi6apq5"] + +[ext_resource type="Texture2D" uid="uid://2aopgpvv473r" path="res://assets/textures/tilemaps/level_interior_tileset.png" id="1_satx0"] +[ext_resource type="PackedScene" uid="uid://dfbomt0l6b1o4" path="res://scenes/player.tscn" id="2_0t8x2"] +[ext_resource type="PackedScene" uid="uid://sr8t2lu6apr4" path="res://scenes/enemies/skull.tscn" id="3_u5kpk"] + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_0t8x2"] +vertices = PackedVector2Array(16, 16, 2, 16, 2, 10, 16, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(2, 10, 16, 10, 16, 16, 2, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_u5kpk"] +vertices = PackedVector2Array(16, 16, 2, 16, 2, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(2, -16, 16, -16, 16, 16, 2, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_ij6uy"] +vertices = PackedVector2Array(16, -8, 2, -8, 2, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(2, -16, 16, -16, 16, -8, 2, -8)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_piajy"] +vertices = PackedVector2Array(16, 16, -16, 16, -16, 10, 16, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, 10, 16, 10, 16, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_v45sh"] +vertices = PackedVector2Array(16, 16, -16, 16, -16, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, 16, -16, 16, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_l6efi"] +vertices = PackedVector2Array(16, -8, -16, -8, -16, -16, 16, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, 16, -16, 16, -8, -16, -8)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_3u0n1"] +vertices = PackedVector2Array(-1, 16, -16, 16, -16, 10, -1, 10) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, 10, -1, 10, -1, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_2lf8p"] +vertices = PackedVector2Array(-1.5, 16, -16, 16, -16, -16, -1.5, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, -1.5, -16, -1.5, 16, -16, 16)]) +agent_radius = 0.0 + +[sub_resource type="NavigationPolygon" id="NavigationPolygon_vpggf"] +vertices = PackedVector2Array(-1, -8, -16, -8, -16, -16, -1, -16) +polygons = Array[PackedInt32Array]([PackedInt32Array(0, 1, 2, 3)]) +outlines = Array[PackedVector2Array]([PackedVector2Array(-16, -16, -1, -16, -1, -8, -16, -8)]) +agent_radius = 0.0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_u5kpk"] +texture = ExtResource("1_satx0") +texture_region_size = Vector2i(32, 32) +0:0/0 = 0 +0:0/0/terrain_set = 0 +0:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 10, 2, 10, 2, 16, -16, 16) +0:0/0/terrains_peering_bit/bottom_right_corner = 0 +0:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_0t8x2") +1:0/0 = 0 +1:0/0/terrain_set = 0 +1:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 10, -16, 10) +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:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_piajy") +2:0/0 = 0 +2:0/0/terrain_set = 0 +2:0/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 16, -16, 16, 16, -1, 16, -0.9796982, 10, -16, 10) +2:0/0/terrains_peering_bit/bottom_left_corner = 0 +2:0/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_3u0n1") +0:1/0 = 0 +0:1/0/terrain_set = 0 +0:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 2, -16, 2, 16, -16, 16) +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 +0:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_u5kpk") +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 +1:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_v45sh") +2:1/0 = 0 +2:1/0/terrain_set = 0 +2:1/0/physics_layer_0/polygon_0/points = PackedVector2Array(-1, -16, 16, -16, 16, 16, -1, 16) +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:1/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_2lf8p") +0:2/0 = 0 +0:2/0/terrain_set = 0 +0:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-16, -16, 2, -16, 2, -8, 16, -8, 16, 16, -16, 16) +0:2/0/terrains_peering_bit/top_right_corner = 0 +0:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_ij6uy") +1:2/0 = 0 +1:2/0/terrain_set = 0 +1:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(16, 16, -16, 16, -16, -8, 16, -8) +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 +1:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_l6efi") +2:2/0 = 0 +2:2/0/terrain_set = 0 +2:2/0/physics_layer_0/polygon_0/points = PackedVector2Array(-1, -16, 16, -16, 16, 16, -16, 16, -16, -8, -1, -8) +2:2/0/terrains_peering_bit/top_left_corner = 0 +2:2/0/navigation_layer_0/polygon = SubResource("NavigationPolygon_vpggf") + +[sub_resource type="TileSet" id="TileSet_u5kpk"] +tile_size = Vector2i(32, 32) +physics_layer_0/collision_layer = 1 +terrain_set_0/mode = 0 +terrain_set_0/terrain_0/name = "Ground 0" +terrain_set_0/terrain_0/color = Color(0.5, 0.34375, 0.25, 1) +navigation_layer_0/layers = 1 +sources/1 = SubResource("TileSetAtlasSource_u5kpk") + +[node name="Lvl1" type="Node2D"] +y_sort_enabled = true + +[node name="TileMapLayer" type="TileMapLayer" parent="."] +z_index = -1 +y_sort_enabled = true +tile_map_data = PackedByteArray("AAD//wAAAQABAAEAAAAAAAAAAQABAAEAAAAAAAEAAQABAAEAAAD//wEAAQABAAEAAAD+/wEAAQABAAEAAAD+/wAAAQABAAEAAAD+////AQABAAEAAAD/////AQABAAEAAAAAAP//AQABAAEAAAABAAAAAQABAAEAAAABAAEAAQABAAEAAAABAP//AQABAAEAAAAAAP7/AQABAAEAAAABAP7/AQABAAEAAAD///7/AQABAAEAAAD+//7/AQABAAEAAAACAP//AQABAAEAAAACAAAAAQABAAEAAAACAP7/AQABAAEAAAADAP//AQABAAEAAAADAAAAAQABAAEAAAADAP7/AQABAAEAAAAEAP//AQABAAEAAAAEAAAAAQABAAEAAAAEAP7/AQABAAEAAAAEAP3/AQABAAEAAAAFAP3/AQACAAEAAAAFAP7/AQACAAEAAAADAP3/AQABAAEAAAADAPz/AQABAAEAAAAEAPz/AQABAAEAAAAFAPz/AQACAAEAAAAFAP//AQACAAEAAAACAP3/AQABAAEAAAACAPz/AQABAAEAAAABAP3/AQABAAEAAAABAPz/AQABAAEAAAAAAP3/AQABAAEAAAAAAPz/AQABAAEAAAD///3/AQABAAEAAAD///z/AQABAAEAAAD+//3/AQABAAEAAAD+//z/AQABAAEAAAD9////AQABAAEAAAD9//7/AQABAAEAAAD9//3/AQABAAEAAAD9//z/AQABAAEAAAD9/wAAAQABAAEAAAD9/wEAAQABAAEAAAACAAEAAQABAAEAAAACAAIAAQABAAEAAAABAAIAAQABAAEAAAAAAAIAAQABAAEAAAD//wIAAQABAAEAAAD+/wIAAQABAAEAAAD9/wIAAQABAAEAAAADAAEAAQABAAEAAAADAAIAAQABAAEAAAAEAAEAAQABAAEAAAAEAAIAAQABAAEAAAAFAAAAAQACAAEAAAAFAAEAAQACAAEAAAAFAAIAAQACAAEAAAD8/wIAAQABAAEAAAD8/wMAAQABAAIAAAD7/wMAAQABAAIAAAD7/wIAAQABAAEAAAD7/wEAAQABAAEAAAD8/wEAAQABAAEAAAD7/wAAAQABAAEAAAD8/wAAAQABAAEAAAD7////AQABAAEAAAD8////AQABAAEAAAD7//7/AQABAAEAAAD8//7/AQABAAEAAAD7//3/AQABAAEAAAD8//3/AQABAAEAAAD7//z/AQABAAEAAAD8//z/AQABAAEAAAD9/wMAAQABAAIAAAD+/wMAAQABAAIAAAD//wMAAQABAAIAAAAAAAMAAQABAAIAAAABAAMAAQABAAIAAAACAAMAAQABAAIAAAADAAMAAQABAAIAAAAEAAMAAQABAAIAAAAFAAMAAQACAAIAAAD6/wMAAQAAAAIAAAD6/wIAAQAAAAEAAAD6/wEAAQAAAAEAAAD6/wAAAQAAAAEAAAD6////AQAAAAEAAAD6//7/AQAAAAEAAAD6//3/AQAAAAEAAAD6//z/AQAAAAEAAAD6//v/AQAAAAAAAAD7//v/AQABAAAAAAD8//v/AQABAAAAAAD9//v/AQABAAAAAAD+//v/AQABAAAAAAD///v/AQABAAAAAAAAAPv/AQABAAAAAAABAPv/AQABAAAAAAACAPv/AQABAAAAAAADAPv/AQABAAAAAAAEAPv/AQABAAAAAAAFAPv/AQACAAAAAAA=") +tile_set = SubResource("TileSet_u5kpk") +rendering_quadrant_size = 32 +physics_quadrant_size = 32 + +[node name="Player" parent="." node_paths=PackedStringArray("tilemap") instance=ExtResource("2_0t8x2")] +tilemap = NodePath("../TileMapLayer") + +[node name="Skull" parent="." instance=ExtResource("3_u5kpk")] +position = Vector2(-111, -50) + +[node name="Skull2" parent="." instance=ExtResource("3_u5kpk")] +position = Vector2(8, -106) + +[node name="Skull3" parent="." instance=ExtResource("3_u5kpk")] +position = Vector2(140, -102) diff --git a/scenes/menus/hud.tscn b/scenes/menus/hud.tscn new file mode 100644 index 0000000..678ac70 --- /dev/null +++ b/scenes/menus/hud.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=3 format=3 uid="uid://c48stuhi2qml3"] + +[ext_resource type="PackedScene" uid="uid://b7bd4lqwlheti" path="res://scenes/menus/util/hearts.tscn" id="1_xmy64"] + +[sub_resource type="GDScript" id="GDScript_xmy64"] +script/source = "class_name HUD +extends CanvasLayer + +@onready var hearts: Hearts = $Hearts +" + +[node name="HUD" type="CanvasLayer"] +script = SubResource("GDScript_xmy64") + +[node name="Hearts" parent="." instance=ExtResource("1_xmy64")] +health = 7 diff --git a/scenes/menus/util/hearts.tscn b/scenes/menus/util/hearts.tscn new file mode 100644 index 0000000..786e586 --- /dev/null +++ b/scenes/menus/util/hearts.tscn @@ -0,0 +1,95 @@ +[gd_scene load_steps=10 format=3 uid="uid://b7bd4lqwlheti"] + +[ext_resource type="Texture2D" uid="uid://5pbgeg3yx6cd" path="res://assets/textures/spritesheets/heart.png" id="1_fn71o"] +[ext_resource type="Script" uid="uid://cfplt163iotph" path="res://scripts/menus/util/hearts.gd" id="1_nty8h"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_xmy64"] +atlas = ExtResource("1_fn71o") +region = Rect2(33, 1, 14, 13) + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_tfgnj"] +load_path = "res://.godot/imported/heart.png-0efefdd245172a860e354a0c110700fc.ctex" + +[sub_resource type="AtlasTexture" id="AtlasTexture_nty8h"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_6ej26"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_gx0d8"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_prrtw"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[sub_resource type="AtlasTexture" id="AtlasTexture_yvsuk"] +atlas = SubResource("CompressedTexture2D_tfgnj") +region = Rect2(1, 1, 14, 13) + +[node name="Hearts" type="Control"] +layout_mode = 3 +anchors_preset = 0 +offset_left = 8.0 +offset_top = 8.0 +offset_right = 8.0 +offset_bottom = 8.0 +script = ExtResource("1_nty8h") + +[node name="BackgroundContainer" type="HBoxContainer" parent="."] +layout_mode = 0 +offset_right = 86.0 +offset_bottom = 13.0 + +[node name="TextureRect" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect2" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect3" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect4" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="TextureRect5" type="TextureRect" parent="BackgroundContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_xmy64") +stretch_mode = 2 + +[node name="HeartContainer" type="HBoxContainer" parent="."] +layout_mode = 0 +offset_right = 14.0 +offset_bottom = 13.0 + +[node name="TextureRect" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_nty8h") + +[node name="TextureRect2" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_6ej26") + +[node name="TextureRect3" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_gx0d8") + +[node name="TextureRect4" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_prrtw") + +[node name="TextureRect5" type="TextureRect" parent="HeartContainer"] +layout_mode = 2 +texture = SubResource("AtlasTexture_yvsuk") diff --git a/scenes/player.tscn b/scenes/player.tscn index 048a819..7ed3cc3 100644 --- a/scenes/player.tscn +++ b/scenes/player.tscn @@ -1,7 +1,9 @@ -[gd_scene load_steps=22 format=3 uid="uid://dfbomt0l6b1o4"] +[gd_scene load_steps=31 format=3 uid="uid://dfbomt0l6b1o4"] [ext_resource type="Script" uid="uid://dxvslwwnnlosy" path="res://scripts/player.gd" id="1_3vyb7"] [ext_resource type="Texture2D" uid="uid://d06cv484ev2n3" path="res://assets/textures/spritesheets/normal_player.png" id="2_qhqgy"] +[ext_resource type="PackedScene" uid="uid://c48stuhi2qml3" path="res://scenes/menus/hud.tscn" id="3_qhqgy"] +[ext_resource type="Texture2D" uid="uid://c1yunf5rn1ncd" path="res://assets/textures/spritesheets/attack.png" id="4_dqkch"] [sub_resource type="AtlasTexture" id="AtlasTexture_dqkch"] atlas = ExtResource("2_qhqgy") @@ -15,30 +17,30 @@ region = Rect2(32, 0, 32, 32) atlas = ExtResource("2_qhqgy") region = Rect2(64, 0, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"] -atlas = ExtResource("2_qhqgy") -region = Rect2(0, 0, 32, 32) - [sub_resource type="AtlasTexture" id="AtlasTexture_3v2ag"] atlas = ExtResource("2_qhqgy") region = Rect2(96, 64, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"] +[sub_resource type="AtlasTexture" id="AtlasTexture_fjrip"] atlas = ExtResource("2_qhqgy") -region = Rect2(96, 0, 32, 32) +region = Rect2(0, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_f1ej7"] atlas = ExtResource("2_qhqgy") region = Rect2(0, 96, 32, 32) -[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"] +[sub_resource type="AtlasTexture" id="AtlasTexture_jej6c"] atlas = ExtResource("2_qhqgy") -region = Rect2(64, 32, 32, 32) +region = Rect2(96, 0, 32, 32) [sub_resource type="AtlasTexture" id="AtlasTexture_a8ls1"] atlas = ExtResource("2_qhqgy") region = Rect2(32, 96, 32, 32) +[sub_resource type="AtlasTexture" id="AtlasTexture_oprun"] +atlas = ExtResource("2_qhqgy") +region = Rect2(64, 32, 32, 32) + [sub_resource type="AtlasTexture" id="AtlasTexture_qfm1y"] atlas = ExtResource("2_qhqgy") region = Rect2(96, 0, 32, 32) @@ -92,36 +94,36 @@ animations = [{ }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_fjrip") +"texture": SubResource("AtlasTexture_3v2ag") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_3v2ag") +"texture": SubResource("AtlasTexture_fjrip") }], -"loop": true, +"loop": false, "name": &"hand_down", -"speed": 3.0 +"speed": 4.0 }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_jej6c") -}, { -"duration": 1.0, "texture": SubResource("AtlasTexture_f1ej7") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_jej6c") }], -"loop": true, +"loop": false, "name": &"hand_side", -"speed": 3.0 +"speed": 4.0 }, { "frames": [{ "duration": 1.0, -"texture": SubResource("AtlasTexture_oprun") +"texture": SubResource("AtlasTexture_a8ls1") }, { "duration": 1.0, -"texture": SubResource("AtlasTexture_a8ls1") +"texture": SubResource("AtlasTexture_oprun") }], -"loop": true, +"loop": false, "name": &"hand_up", -"speed": 3.0 +"speed": 4.0 }, { "frames": [{ "duration": 1.0, @@ -178,7 +180,58 @@ animations = [{ radius = 6.0 height = 14.0 +[sub_resource type="AtlasTexture" id="AtlasTexture_d2wvv"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 0, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_i4ail"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 16, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_a38lo"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 32, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_4ni07"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 48, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_l71n6"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 64, 32, 16) + +[sub_resource type="AtlasTexture" id="AtlasTexture_y4r1p"] +atlas = ExtResource("4_dqkch") +region = Rect2(0, 80, 32, 16) + +[sub_resource type="SpriteFrames" id="SpriteFrames_ke2ow"] +animations = [{ +"frames": [{ +"duration": 1.0, +"texture": SubResource("AtlasTexture_d2wvv") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_i4ail") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_a38lo") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_4ni07") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_l71n6") +}, { +"duration": 1.0, +"texture": SubResource("AtlasTexture_y4r1p") +}], +"loop": false, +"name": &"default", +"speed": 12.0 +}] + [node name="Player" type="CharacterBody2D"] +collision_layer = 3 motion_mode = 1 script = ExtResource("1_3vyb7") @@ -198,8 +251,20 @@ drag_horizontal_enabled = true drag_vertical_enabled = true [node name="RayCast2D" type="RayCast2D" parent="."] -target_position = Vector2(0, 32) +position = Vector2(0, 10) +target_position = Vector2(0, 22) collision_mask = 2 hit_from_inside = true collide_with_areas = true collide_with_bodies = false + +[node name="HUD" parent="." instance=ExtResource("3_qhqgy")] + +[node name="CursorHideTimer" type="Timer" parent="."] + +[node name="FightAnimation" type="AnimatedSprite2D" parent="."] +sprite_frames = SubResource("SpriteFrames_ke2ow") +frame = 5 +frame_progress = 1.0 +offset = Vector2(0, 24) +flip_v = true diff --git a/scripts/enemies/skull.gd b/scripts/enemies/skull.gd new file mode 100644 index 0000000..ba39472 --- /dev/null +++ b/scripts/enemies/skull.gd @@ -0,0 +1,86 @@ +extends CharacterBody2D + +@export var speed: int = 900 +@onready var navigation_agent_2d: NavigationAgent2D = $NavigationAgent2D +@onready var follow_update_timer: Timer = $FollowUpdateTimer +@onready var attack_timer: Timer = $AttackTimer +@onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D + +var idle: bool = true +const DAMAGE: int = 1 +var health: int = 8 +var target: Player = null +var in_attack_range: bool = false +var stop_distance: int = 20 +var attack_cooldown_offset: float = 0.0 +var flicker_time: float = 0.2 +var flicker_timer: float = 0.0 + +func _ready() -> void: + navigation_agent_2d.avoidance_priority = randf_range(0.5, 1.0) + attack_cooldown_offset = randf_range(0.0, 0.5) + animated_sprite.speed_scale = randf_range(0.4, 1.2) + +func _process(delta: float) -> void: + if flicker_timer > 0.0: + flicker_timer -= delta + animated_sprite.modulate = Color(1, 0, 0) + if flicker_timer <= 0.0: + animated_sprite.modulate = Color(1, 1, 1) + +func _on_area_body_entered(body: Node2D) -> void: + if body is Player: + idle = false + target = body + follow_update_timer.start() + animated_sprite.play() + +func _on_area_body_exited(body: Node2D) -> void: + if body is Player: + idle = true + target = null + follow_update_timer.stop() + animated_sprite.frame = 0 + animated_sprite.stop() + +func _on_attack_area_body_entered(body: Node2D) -> void: + if body is Player: + in_attack_range = true + attack_timer.start(attack_timer.wait_time + attack_cooldown_offset) + +func _on_attack_area_body_exited(body: Node2D) -> void: + if body is Player: + in_attack_range = false + attack_timer.stop() + +func _physics_process(delta: float) -> void: + if !idle && target: + if !navigation_agent_2d.is_navigation_finished(): + var next_path_pos: Vector2 = navigation_agent_2d.get_next_path_position() + var direction: Vector2 = (next_path_pos - global_position).normalized() + var desired_velocity: Vector2 = direction * speed * delta + navigation_agent_2d.set_velocity(desired_velocity) + else: + velocity = Vector2.ZERO + move_and_slide() + else: + velocity = Vector2.ZERO + move_and_slide() + +func _on_follow_update_timer_timeout() -> void: + if target && !idle: + navigation_agent_2d.target_position = target.global_position + +func _on_navigation_agent2d_velocity_computed(safe_velocity: Vector2) -> void: + velocity = safe_velocity + move_and_slide() + +func _on_attack_timer_timeout() -> void: + if target && in_attack_range: + target.health -= DAMAGE + +func _on_fightable_fought(player: Player) -> void: + health -= player.damage + flicker_timer = flicker_time + if health <= 0: + queue_free() diff --git a/scripts/enemies/skull.gd.uid b/scripts/enemies/skull.gd.uid new file mode 100644 index 0000000..15c0a89 --- /dev/null +++ b/scripts/enemies/skull.gd.uid @@ -0,0 +1 @@ +uid://cuc28u7op02gq diff --git a/scripts/fightable.gd b/scripts/fightable.gd new file mode 100644 index 0000000..4348859 --- /dev/null +++ b/scripts/fightable.gd @@ -0,0 +1,6 @@ +class_name Fightable +extends Area2D + +signal fought(player: Player) + +func fight(player: Player) -> void: fought.emit(player) diff --git a/scripts/fightable.gd.uid b/scripts/fightable.gd.uid new file mode 100644 index 0000000..22d66e9 --- /dev/null +++ b/scripts/fightable.gd.uid @@ -0,0 +1 @@ +uid://cvd86i6imfk24 diff --git a/scripts/interactables/interact_sceneswitch.gd b/scripts/interactables/interact_sceneswitch.gd index 85e70c5..afcdb7e 100644 --- a/scripts/interactables/interact_sceneswitch.gd +++ b/scripts/interactables/interact_sceneswitch.gd @@ -6,4 +6,5 @@ extends Node2D func _ready() -> void: $Interactable.auto_interact = auto_interact func _on_interacted(_player: Player) -> void: - EventManager.transition_scene_file(scene) + if !scene.is_empty(): + EventManager.transition_scene_file(scene) diff --git a/scripts/menus/util/hearts.gd b/scripts/menus/util/hearts.gd new file mode 100644 index 0000000..51fd7fd --- /dev/null +++ b/scripts/menus/util/hearts.gd @@ -0,0 +1,34 @@ +@tool +class_name Hearts +extends Control + +@export_range(0, 10, 1) var health: int = 10: + set(value): + health = clamp(value, 0, max_health) + update_health_textures() + +var max_health: int = 10 +var heart_textures: Array[Node] + +func _ready() -> void: + heart_textures = $HeartContainer.get_children() + for heart_texture in heart_textures: + heart_texture.texture = heart_texture.texture.duplicate() + update_health_textures() + +func update_health_textures() -> void: + @warning_ignore("integer_division") + var full_hearts: int = health / 2 + var half_heart: bool = health % 2 == 1 + + for i in range(heart_textures.size()): + var heart_texture: TextureRect = heart_textures[i] + var atlas: AtlasTexture = heart_texture.texture as AtlasTexture + if i < full_hearts: + atlas.region.position.x = 1 + heart_texture.visible = true + elif i == full_hearts and half_heart: + atlas.region.position.x = 17 + heart_texture.visible = true + else: + heart_texture.visible = false diff --git a/scripts/menus/util/hearts.gd.uid b/scripts/menus/util/hearts.gd.uid new file mode 100644 index 0000000..bfe93ac --- /dev/null +++ b/scripts/menus/util/hearts.gd.uid @@ -0,0 +1 @@ +uid://cfplt163iotph diff --git a/scripts/player.gd b/scripts/player.gd index ed14298..c636301 100644 --- a/scripts/player.gd +++ b/scripts/player.gd @@ -1,18 +1,22 @@ class_name Player extends CharacterBody2D -const SPEED: int = 800 +const SPEED: int = 1000 @onready var animated_sprite: AnimatedSprite2D = $AnimatedSprite2D +@onready var fight_animation: AnimatedSprite2D = $FightAnimation @onready var cam: Camera2D = $Camera2D @onready var raycast: RayCast2D = $RayCast2D -const RAYCAST_RAGE: int = 32 - +@onready var cursor_hide_timer: Timer = $CursorHideTimer +const RAYCAST_RANGE: int = 22 @export var tilemap: TileMapLayer var tilesize: int = 32 var position_limit_rect: Rect2 -const STILL_POSITIONS: Array[String] = ["sit", "hand_down", "hand_side", "hand_up"] +const STILL_POSITIONS: Array[String] = ["sit_down", "sit_side", "hand_down", "hand_side", "hand_up"] + +var health: int = 10 +var damage: int = 2 func _ready() -> void: EventManager.player = self @@ -35,9 +39,55 @@ func _ready() -> void: ) func _process(_delta: float) -> void: - if EventManager.player_free && !EventManager.animation_player.is_playing() && Input.is_action_just_pressed("interact") && raycast.is_colliding() && raycast.get_collider() is Interactable: - var interactable: Interactable = raycast.get_collider() + if EventManager.player_free && !EventManager.animation_player.is_playing() && Input.is_action_just_pressed("interact"): + interact() + +func interact() -> void: + var interactable: Interactable + if raycast.is_colliding() && raycast.get_collider() is Interactable: + interactable = raycast.get_collider() + else: + interactable = null + var fightable: Fightable + if raycast.is_colliding() && raycast.get_collider() is Fightable: + fightable = raycast.get_collider() + else: + fightable = null + + match animated_sprite.animation: + "down": + animated_sprite.play("hand_down") + if interactable == null: + fight_animation.rotation_degrees = 0 + fight_animation.play() + if !fight_animation.is_playing(): + fight_animation.play() + await animated_sprite.animation_finished + animated_sprite.animation = "down" + "up": + animated_sprite.play("hand_up") + if interactable == null: + fight_animation.rotation_degrees = 180 + fight_animation.play() + if !fight_animation.is_playing(): + fight_animation.play() + await animated_sprite.animation_finished + animated_sprite.animation = "up" + "side": + animated_sprite.play("hand_side") + if interactable == null: + if animated_sprite.flip_h: + fight_animation.rotation_degrees = 90 + else: + fight_animation.rotation_degrees = -90 + if !fight_animation.is_playing(): + fight_animation.play() + await animated_sprite.animation_finished + animated_sprite.animation = "side" + if interactable != null: interactable.interact(self) + elif fightable != null: + fightable.fight(self) func _physics_process(delta: float) -> void: if !STILL_POSITIONS.has(animated_sprite.animation) && EventManager.player_free && !EventManager.animation_player.is_playing(): @@ -49,7 +99,7 @@ func _physics_process(delta: float) -> void: elif abs(input.y) > 0: raycast_input.y = sign(input.y) if raycast_input != Vector2.ZERO: - raycast.target_position = raycast_input * RAYCAST_RAGE + raycast.target_position = raycast_input * RAYCAST_RANGE velocity = input * delta * SPEED * 3 @@ -71,6 +121,10 @@ func _physics_process(delta: float) -> void: func _unhandled_input(event: InputEvent) -> void: if event is InputEventMouse: + cursor_hide_timer.stop() Input.mouse_mode = Input.MOUSE_MODE_VISIBLE elif EventManager.player_free && !EventManager.animation_player.is_playing() && !event.is_action("escape"): + if cursor_hide_timer.is_stopped(): + cursor_hide_timer.start() + await cursor_hide_timer.timeout Input.mouse_mode = Input.MOUSE_MODE_HIDDEN