From 1593a353bad70b8e7c019e18d4d3c39b0f02c571 Mon Sep 17 00:00:00 2001 From: Aaron Mahan Date: Thu, 16 Sep 2021 06:41:34 -0600 Subject: [PATCH] Create equipping system. - Equip/unequip pickaxe by pressing E key. - Add/remove clothing / equipment by left-clicking on the item. - Redo all player animations, both to improve visual quality and create 1 layer per clothing / equipment item. --- assets/aseprite/klas.aseprite | Bin 8401 -> 9979 bytes assets/aseprite/klas2.aseprite | Bin 0 -> 50100 bytes assets/aseprite/pickaxe.aseprite | Bin 0 -> 916 bytes assets/textures/klas-layers/arm-left.png | Bin 0 -> 475 bytes .../textures/klas-layers/arm-left.png.import | 34 + assets/textures/klas-layers/arm-right.png | Bin 0 -> 466 bytes .../textures/klas-layers/arm-right.png.import | 34 + assets/textures/klas-layers/backpack.png | Bin 0 -> 1132 bytes .../textures/klas-layers/backpack.png.import | 34 + assets/textures/klas-layers/belt.png | Bin 0 -> 371 bytes assets/textures/klas-layers/belt.png.import | 34 + assets/textures/klas-layers/body.png | Bin 0 -> 807 bytes assets/textures/klas-layers/body.png.import | 34 + assets/textures/klas-layers/boot-left.png | Bin 0 -> 333 bytes .../textures/klas-layers/boot-left.png.import | 34 + assets/textures/klas-layers/boot-right.png | Bin 0 -> 340 bytes .../klas-layers/boot-right.png.import | 34 + assets/textures/klas-layers/foot-left.png | Bin 0 -> 319 bytes .../textures/klas-layers/foot-left.png.import | 34 + assets/textures/klas-layers/foot-right.png | Bin 0 -> 336 bytes .../klas-layers/foot-right.png.import | 34 + assets/textures/klas-layers/glove-left.png | Bin 0 -> 565 bytes .../klas-layers/glove-left.png.import | 34 + assets/textures/klas-layers/glove-right.png | Bin 0 -> 388 bytes .../klas-layers/glove-right.png.import | 34 + assets/textures/klas-layers/hair.png | Bin 0 -> 1926 bytes assets/textures/klas-layers/hair.png.import | 34 + assets/textures/klas-layers/hand-left.png | Bin 0 -> 527 bytes .../textures/klas-layers/hand-left.png.import | 34 + .../klas-layers/hand-outline-left.png.import | 34 + assets/textures/klas-layers/hand-right.png | Bin 0 -> 406 bytes .../klas-layers/hand-right.png.import | 34 + assets/textures/klas-layers/hat-outline.png | Bin 0 -> 553 bytes .../klas-layers/hat-outline.png.import | 34 + assets/textures/klas-layers/hat.png | Bin 0 -> 1475 bytes assets/textures/klas-layers/hat.png.import | 34 + .../klas-layers/head-outline-rear.png | Bin 0 -> 255 bytes .../klas-layers/head-outline-rear.png.import | 34 + assets/textures/klas-layers/head.png | Bin 0 -> 920 bytes assets/textures/klas-layers/head.png.import | 34 + .../textures/klas-layers/item-in-backpack.png | Bin 0 -> 1115 bytes .../klas-layers/item-in-backpack.png.import | 34 + assets/textures/klas-layers/item-in-hand.png | Bin 0 -> 663 bytes .../klas-layers/item-in-hand.png.import | 34 + assets/textures/klas-layers/pants.png | Bin 0 -> 644 bytes assets/textures/klas-layers/pants.png.import | 34 + assets/textures/klas-layers/scarf.png | Bin 0 -> 475 bytes assets/textures/klas-layers/scarf.png.import | 34 + .../klas-layers/shirt-sleeve-left.png | Bin 0 -> 458 bytes .../klas-layers/shirt-sleeve-left.png.import | 34 + .../klas-layers/shirt-sleeve-right.png | Bin 0 -> 435 bytes .../klas-layers/shirt-sleeve-right.png.import | 34 + assets/textures/klas-layers/shirt.png | Bin 0 -> 509 bytes assets/textures/klas-layers/shirt.png.import | 34 + assets/textures/klas.png | Bin 3605 -> 3627 bytes assets/textures/pickaxe.png | Bin 0 -> 204 bytes assets/textures/pickaxe.png.import | 34 + project.godot | 28 + scenes/main.tscn | 3190 +++++++++++++++-- scenes/ui.tscn | 1 + scripts/Cliffs.cs | 11 +- scripts/Player.cs | 614 +++- scripts/Tools.cs | 33 +- scripts/Weapon.cs | 123 + 64 files changed, 4609 insertions(+), 309 deletions(-) create mode 100644 assets/aseprite/klas2.aseprite create mode 100644 assets/aseprite/pickaxe.aseprite create mode 100644 assets/textures/klas-layers/arm-left.png create mode 100644 assets/textures/klas-layers/arm-left.png.import create mode 100644 assets/textures/klas-layers/arm-right.png create mode 100644 assets/textures/klas-layers/arm-right.png.import create mode 100644 assets/textures/klas-layers/backpack.png create mode 100644 assets/textures/klas-layers/backpack.png.import create mode 100644 assets/textures/klas-layers/belt.png create mode 100644 assets/textures/klas-layers/belt.png.import create mode 100644 assets/textures/klas-layers/body.png create mode 100644 assets/textures/klas-layers/body.png.import create mode 100644 assets/textures/klas-layers/boot-left.png create mode 100644 assets/textures/klas-layers/boot-left.png.import create mode 100644 assets/textures/klas-layers/boot-right.png create mode 100644 assets/textures/klas-layers/boot-right.png.import create mode 100644 assets/textures/klas-layers/foot-left.png create mode 100644 assets/textures/klas-layers/foot-left.png.import create mode 100644 assets/textures/klas-layers/foot-right.png create mode 100644 assets/textures/klas-layers/foot-right.png.import create mode 100644 assets/textures/klas-layers/glove-left.png create mode 100644 assets/textures/klas-layers/glove-left.png.import create mode 100644 assets/textures/klas-layers/glove-right.png create mode 100644 assets/textures/klas-layers/glove-right.png.import create mode 100644 assets/textures/klas-layers/hair.png create mode 100644 assets/textures/klas-layers/hair.png.import create mode 100644 assets/textures/klas-layers/hand-left.png create mode 100644 assets/textures/klas-layers/hand-left.png.import create mode 100644 assets/textures/klas-layers/hand-outline-left.png.import create mode 100644 assets/textures/klas-layers/hand-right.png create mode 100644 assets/textures/klas-layers/hand-right.png.import create mode 100644 assets/textures/klas-layers/hat-outline.png create mode 100644 assets/textures/klas-layers/hat-outline.png.import create mode 100644 assets/textures/klas-layers/hat.png create mode 100644 assets/textures/klas-layers/hat.png.import create mode 100644 assets/textures/klas-layers/head-outline-rear.png create mode 100644 assets/textures/klas-layers/head-outline-rear.png.import create mode 100644 assets/textures/klas-layers/head.png create mode 100644 assets/textures/klas-layers/head.png.import create mode 100644 assets/textures/klas-layers/item-in-backpack.png create mode 100644 assets/textures/klas-layers/item-in-backpack.png.import create mode 100644 assets/textures/klas-layers/item-in-hand.png create mode 100644 assets/textures/klas-layers/item-in-hand.png.import create mode 100644 assets/textures/klas-layers/pants.png create mode 100644 assets/textures/klas-layers/pants.png.import create mode 100644 assets/textures/klas-layers/scarf.png create mode 100644 assets/textures/klas-layers/scarf.png.import create mode 100644 assets/textures/klas-layers/shirt-sleeve-left.png create mode 100644 assets/textures/klas-layers/shirt-sleeve-left.png.import create mode 100644 assets/textures/klas-layers/shirt-sleeve-right.png create mode 100644 assets/textures/klas-layers/shirt-sleeve-right.png.import create mode 100644 assets/textures/klas-layers/shirt.png create mode 100644 assets/textures/klas-layers/shirt.png.import create mode 100644 assets/textures/pickaxe.png create mode 100644 assets/textures/pickaxe.png.import create mode 100644 scripts/Weapon.cs diff --git a/assets/aseprite/klas.aseprite b/assets/aseprite/klas.aseprite index ec7c98e70bf3b14e2460d4f9bf0d2d7b1230cfed..14013fb917ecda5b7690909e952026c0783fd33e 100644 GIT binary patch delta 4865 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 delta 3491 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 literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/arm-right.png.import b/assets/textures/klas-layers/arm-right.png.import new file mode 100644 index 0000000..e1a1059 --- /dev/null +++ b/assets/textures/klas-layers/arm-right.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/arm-right.png-9763eb6c9dc6d44fab2d28aebd001ca8.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/arm-right.png" +dest_files=[ "res://.import/arm-right.png-9763eb6c9dc6d44fab2d28aebd001ca8.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/backpack.png b/assets/textures/klas-layers/backpack.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7e58de880e0eff13ccbb40b6de445815f333b6 GIT binary patch literal 1132 zcmV-y1e5!TP)Px(CP_p=RCt{2oWD=oKorNnj_v%wNs21985jyvhpJ*>f~7;%|F>(!P*rLt7F2a; z7g#d1NT`5QD3Dx-*c5`@-uYc}KJxuYNLG}u-}BwO?_JK=03n1BLI@#*5JCtcgb+dq zA%qY@2qA(BS`<2rv6cKRzSJG_(Q$J1X6 z(ce0U&G;%ihf%v%Wv9O~`;k$6m-;%i-$TQ9|L{HkIuq%9X*CJ~0I%1cV0Ug7todT^S~$nD8l#r>rCMS^!6{v%Zb9ZQZQNfOZB&52QD0^6PQK) zJzN>MY5n;=ejMjtR=-Acddbc4`Ppch^i~#N9$&vmZ^1uQNqnOPbX9#F{7;Ha{{j5Z zzs{8HfU2k&PaFC2N?nePy}VGLY;6O>xBnH_X#u>fIGn(&=v^5&V5R;F$It271~9#a zGuQaO=MTsiActv+$IoBl`0Hm3D$F-^(7$-~24CL4tE6Z9Rc=2k{^Riao%>&zUe`Y$ zT)+69zfTnYSL^NK>+}-DVIu&t2GpQTKid1Go0p23F`{OSW+PCOY%!u6zf4c`IZRWW zu5I8jO)Kd;z2xT4h5j&2k!)>O&R=-_qWUWvKmFl>DE^|xPYv=H*YA3_i~jHc>)o!m z`qAE}%6hina<`w*Kc(|;pR!0BAl*7G#YNWD{5m<{g+HKjaRa2bqDXPA|DJu<`ZS=p5_aE-*YmzuT>J3s0h# z=5OKp3+qq!4uJ3D$94Wi{ih|wou|zM7(BUdOAi1aj?bLNm)5@|f7g1~?N^8TbM1e# z`bz-cMi&6|{6o5anT=m{11>*ykiR!*8FT&`0zi8Lv5GW){u%=S*q;^xA3~ZFJN*@e zQHb&N_@063yh=u@uOqJO&-d};+J6Wk)v1er4B{vNaPwnW7vJ+Ij>%u-iU;~KS5j|$ yuRq`OCxo~o_m4pw<;Py(d;WwFLI@#*kc>Z94U$y7;dK810000cQa<6xsmc@#z*hR&+Y1$KAUHMJo)GKv-`3?KYC^s_wM~St$RTB zn@?JP^XH5F=b5@L{H?gd+aE#uf2%L5@#R}t_V53Oy0dD^x9@6Z*zyQIw!7B-$ou)K zvj24{&$2f5*2^0uJ?Zbe^ke7w_{^HOf3jEa{Xb<^^}l4FPYb>HH}D;}5>m~qDO=C= w^Zy?PyDvWu{PX%<&h`8JobUcnFFtrt!#LZ*r6OtR+e;uJPgg&ebxsLQ0CDoC@c;k- literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/belt.png.import b/assets/textures/klas-layers/belt.png.import new file mode 100644 index 0000000..47b8c09 --- /dev/null +++ b/assets/textures/klas-layers/belt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/belt.png-63f78a1abde3e0f1d64d3ebab6a7f5b3.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/belt.png" +dest_files=[ "res://.import/belt.png-63f78a1abde3e0f1d64d3ebab6a7f5b3.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/body.png b/assets/textures/klas-layers/body.png new file mode 100644 index 0000000000000000000000000000000000000000..dccaa48714d7a24fd838b170010d347d277a0f8a GIT binary patch literal 807 zcmV+?1K9kDP)Px%;Ymb6RCt{2+rLX&Q5eSY=LG4REt<(pLKj6u#X;P zI~reqnw{E3g7|RquJw;_{|{ySM>zjLV#8=a`wl>v@SbtD*uid%4 zzSiA1%j;{YAJjE}eRV1ELG0J=_&f7kYYd$N_PxmTR>e^hHwR-cm&A*lLv*ok?2|s_l*B_Es8&Ii# z5^T8SeK)}10Cve|vHn8eKR)Z1?B}o1x>I>^+Pr+@G4lN0)`HnTX_=Yox#AxiuKBF? z&rJ1P<;7{!Xx)u8-~0OaPg-VgYavwwJ1*mAoA+7&q@O>&>kr9a4d_vI!$|#uC`q3` z&L`TyuKAeH1{fT`u6f(_7yAAgm-=1iuX*#>Z6ZgVKREra!{)8jx!h;-t)VGY>T%W# z+)ga32Clp~ZJIZaX`-3rUl>W|uz9P4)9;BhS&yF$*Zd3XOUAy=KiB-YoIk$n55?HM zsKNgtl{!sG#K?j;0?DUMwDKTj#czx8mE6@>bJ} zQ}2Ej{JLjS@;7tVo6I>sf294LcEdjVwRiuToyUB?ZB4)L)l(N92-I;iJI>b5>iq8K zGM4!%Zv}V0d3^rlJ^Py<7jJrfzOVn(@0b4#SC!v;erf%`0@kqGbA|RsO#BY=o2RRv J%Q~loCIEa;5znMQ9bg1PL#tx zC3*#yAC%d|ckzwXyBYQ?KN@aVFW)b*TKb0H$H=YK$877q+P!kUx1l!tNBP2U``q8i zo&Ue>bybS*dkOpB^KYJCHSh55b1NS9{hTc6zxLJN{aSXL%fiq6+?yO#$anfD>+2N< UzD+05(bss;c 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 M07*qoM6N<$g0m^nB>(^b literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/hair.png.import b/assets/textures/klas-layers/hair.png.import new file mode 100644 index 0000000..d68bcb1 --- /dev/null +++ b/assets/textures/klas-layers/hair.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hair.png-817b2e3f0eabf6f59d51a7fca0c80586.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/hair.png" +dest_files=[ "res://.import/hair.png-817b2e3f0eabf6f59d51a7fca0c80586.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/hand-left.png b/assets/textures/klas-layers/hand-left.png new file mode 100644 index 0000000000000000000000000000000000000000..a6c1705be578d2c84cac714101e5347d1c3419b8 GIT binary patch literal 527 zcmV+q0`UEbP)Px$$w@>(RCt{2+%ZnWKoCIDu|=PbBo${!12=FNZh%tK@xjv>RIl003x&$tTKovz#6yYrH7)2LJ#GCO7cx@xsmD zyD;`$82c`{0dyV@L~BbY005=Ey?=(W?_}(|BJm<3+IW=JF4od6*7EZF(4@w%_6ON+ zmc`;V`2zrec;Ptg!g1IouV7ll3#(71F!uleAllp;h`Enn>v#JZ007`(b8jH#K7Ihe zU&g+R-l9v10RRA~84n?4)GpRpVgMk4b{pS&JODsL`7i_!?eYFjgjWf9r`^W)9*;zm z>mQNM=kMn`;1k>S*TYd^KYt25I#(K4z%}h#Ak0}cb(xw&RsFn5+KH#D2h_Y2rEnZ} zsuy8XfC0D8um4(D)s!5yNn1a!l6K7!^oF4nB}2hZ{5YB={&a;PD10Q2U(4tdWX000000001x>Kk4~y;yMI Rk_Z3*002ovPDHLkV1f`3>|g)@ literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/hand-left.png.import b/assets/textures/klas-layers/hand-left.png.import new file mode 100644 index 0000000..e74ccdf --- /dev/null +++ b/assets/textures/klas-layers/hand-left.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hand-left.png-1ac786205a51b32f2776960b6ae71e2a.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/hand-left.png" +dest_files=[ "res://.import/hand-left.png-1ac786205a51b32f2776960b6ae71e2a.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/hand-outline-left.png.import b/assets/textures/klas-layers/hand-outline-left.png.import new file mode 100644 index 0000000..e32f8f0 --- /dev/null +++ b/assets/textures/klas-layers/hand-outline-left.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hand-outline-left.png-0789e86d5d299d0742c19d739f7e660d.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/hand-outline-left.png" +dest_files=[ "res://.import/hand-outline-left.png-0789e86d5d299d0742c19d739f7e660d.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/hand-right.png b/assets/textures/klas-layers/hand-right.png new file mode 100644 index 0000000000000000000000000000000000000000..6cbd1a68f0515235652e024b6204a286b1e0c490 GIT binary patch literal 406 zcmV;H0crk;P)Px$P)S5VRCt{2-LY-LKokbxXOuoAq{<95$p&;}1(#_Uhc2ZzpkxHLphI55X+Vmi zNXU1Xi}CkK$Q1mtEuqu9=hHa?02oU5>r*VhUd|KZ*?9nfB616uo8%*{fXmgLwyW;6 zT_qQgBhSO1o=RT;0FUjoT}4F1VzcieqAHm08_o9h`CiSQUy=*A-28euuNIqq*EV&L zJOD6l#X4ARQ+I7sC!aqz9}&5E008>B!6VeE7jRR*e*l2{n)({Rsoy_@Nf-bC_hb?V z&|m4t&!zLgwAi@-xbD2YjKN|cxdZXo^YF-ijGqAXWVQ;B<}!XVBD2evkGI!|i0*vs zt#lryOa~PpjSgygrT1CO$}3=pr91cU>7W9n(LpU>cKs*gusa;Pwy9%xIQkO}V6oX( zk?;nRi_&Z0O6LJ!svf<-_ofQ~00000000X51_S)*H_hqgq5uE@07*qoM6N<$f<3jj ArvLx| literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/hand-right.png.import b/assets/textures/klas-layers/hand-right.png.import new file mode 100644 index 0000000..b13c553 --- /dev/null +++ b/assets/textures/klas-layers/hand-right.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hand-right.png-a8f62431ee06fa45caa0011c1064d7c3.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/hand-right.png" +dest_files=[ "res://.import/hand-right.png-a8f62431ee06fa45caa0011c1064d7c3.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/hat-outline.png b/assets/textures/klas-layers/hat-outline.png new file mode 100644 index 0000000000000000000000000000000000000000..0ad6a35b6f2f31f28a85aa795d659ec710889e6a GIT binary patch literal 553 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlV3vjRj$&;C9X96k4;vjb?hIQv;UIN*VJzX3_ zD(1YsbUpKb@S^Hg|zxcwb!~c{8 zZRZ**b1yvk|H_w_AMZ)nS>LwYl2KXAy`TBbsWs*c zBp+9=-T&h2=2MI&MSGqynpEv+mr3i9|M_=q;W0^|;v(HGcdM^InDkG5;n&)hSr)zJ zvfm6xchcPCg^}yI#Ye*YIBczGn=)w#R?ozqjuE(r>qZxW5g2^!@yz>;0+!Out6I zDlWVH&ah3@^IzCTxr!6yucU+Wm_{~B9ORO^nh-8#GBTlx<6Grphr jUc8yX4T%n{Qp$^7l|v(NO^aK+Vh36%7F3 zYI&`(OIgnEqle1n36y~La0aNudh-CFl;P#-bT*}OdHhuDnIJ95s;mj)tLa0-_}#Dq z(1%Kr=l^kLpfwf%SH-{uCP^FoB#nZKh-q^!wRUMfX!M$y=y}D?xRvCV=W25E*~MoE zs+GvQj}`^zO49A$(o!h3{pL(1u4?~54_}Ew1Tg}8P7K*nw3uSl`7+5pj ztPeu;*61ue5Ji{D@;|U?QfszLz{|En3P8-jHGua${=~*rzJ9=%qeg~oVZ%Chl<-02 zgq6*0i#IsI#+QWUX%OHQ;Hgrig$)5s&}agV(8R=8zXQI_nH<@{?UhM?FGr#qUl z;57B80HB(HjEW}L#?Vo_QohBd6GEIs;8zuc>+desj|wJf$JN>? z%o<6Ko`*SsA*fhefFvMEkq_}P;VdVeB&p3PJyG2)Od*^CSFV!y(XQHUwpk)y>9y>+ zs*CH7T+ZZ)%c3P8Sp<>d!p71uN5b#BPvWTTU@hR7`Rmim27hZ!$;WL!VV1URvEzuB zUJTXCGm1d(N;~?a%Jn!8s3%Mnpv_kT4H>FBwLFc2upTd@ zg+ggQu^K(pPT+|E&a!hh#7k572aKi{y{Xl~;UjtF_~&`Wf9_3_6c9kGj;BGHn?&F= z=^_3Dh|!b;YN;ZihSrYPt!JMa5L+xw`t>atC8nxvUGkyoZpkV}{h4J)7?KSBFCk(( z_BLd&AA25Avp$h4RRC}t{nC#2`488QcVtO@L%GnN+{1(_@fmn->sAL)b+{*%!Lu;vaM4vnMji~i{H#O z%$G~Vhf{XOSv@tlf#Z2PtJ8T=LH06Q6TKmD+%X)$h35 zh{}c~3fxPLD1`eDE57s`G9v6GKVBwIUidzVJNZ{@OLpIz4U8MlRmSW>Bo)-`L&+3{ zT-*=Mp-@X;b@WA93-sGvBL5ppsBh{JT2eh()tGw2I=ni`P?)C)tkeDwPKn3ED8b1t z`gnf&i}1*ZnaqOpZWbvf&|D@bcTNB9V#Cie>0O{m8>3*}kyTm&XD(vW$*m9uPAu4> zYag)1qq4XWb@+2SmW}y6IUfn)4VTOW$ay%nKxEC43*L3BP5Jg$45fdb%QwXNO$9e3 z_YHT;*0i|UF3ll=X&BS1yzB^+F_HD)?fk4h}Prt8JdjYyQpW z)7be%V#EqEGC&}-x|)%s>`g|M^_xSIAEl%P?+67s4~c?W(@6BuNOXI;WPb_TY~ZO4 zf>hEeZ&b>)hUeNY8WUGgHAC$3E`U_>z!r8hH@#CzT05E|=6}#t*!s?Vn&}9dh^)i^ z%F*ksXMCO|eDC!SMXU!*!S1hMdeeX0A+)Orx4rKKxwq*|c8KpRmi(F`5?Ob*!pjM|vCP6FzB?i}Ho{LHxwrlwJd)6GRb{{t TUhB=2e`UbS&EJ*kjLrHND17pB literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/hat.png.import b/assets/textures/klas-layers/hat.png.import new file mode 100644 index 0000000..60a44d8 --- /dev/null +++ b/assets/textures/klas-layers/hat.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/hat.png-17fa483495f411a9789a07c97bdc82c4.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/hat.png" +dest_files=[ "res://.import/hat.png-17fa483495f411a9789a07c97bdc82c4.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/head-outline-rear.png b/assets/textures/klas-layers/head-outline-rear.png new file mode 100644 index 0000000000000000000000000000000000000000..8d1cf0d56b3e1eb9a1ac851df2cb7e209332f901 GIT binary patch literal 255 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlV3vjRj$&;C9X96k4;vjb?hIQv;UIIBgJzX3_ zD(1Ys;mCK$fXDUVfxqu#^ccFiR#c{>#cJBG&5exZ1}cMsIO}E14iS6nU;S)c_v_Ef z=k>4Z9^HH?ZcuACYw>&Qzvz|Bv`@Qnt)@op o>g)CMmdKI;Vst0ET~P5C8xG literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/head-outline-rear.png.import b/assets/textures/klas-layers/head-outline-rear.png.import new file mode 100644 index 0000000..a73dccd --- /dev/null +++ b/assets/textures/klas-layers/head-outline-rear.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head-outline-rear.png-af778f948f103c91935594f6edb6dd2f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/head-outline-rear.png" +dest_files=[ "res://.import/head-outline-rear.png-af778f948f103c91935594f6edb6dd2f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/head.png b/assets/textures/klas-layers/head.png new file mode 100644 index 0000000000000000000000000000000000000000..f52848c47c9967c894c83f1e4b61962b06dbaab9 GIT binary patch literal 920 zcmV;J184k+P)Px&Qb|NXRCt{2+p%sMK@bMu|4<~$ZrlM@3ZguKB@~G_2q_|X14NWEq0D2XB#k>n zo&Z-NWr|3SB1bLHTocCOAZ+c~(Xp>I4t^$5}~c3TZhF0RZ;r~d2);bPp! z-OcstLVYmJ9PeO!%5SZ9mE#jsdm|u24WimD#{Jc`YHx&Ys}W2tt{xm*8ZXV?LA(pv z_m9u~*T!CsZ}l0oVLNfbrUyFB8qP20;cVDO<@f}ET@T0O<734a&!n4ySnPR2m$DW-4@W1G_x1Tb_(n?St zOxIr6(QlB?UZ0A_=`?GBx!I#X!)-g>MgM8vKR)vZ0000 literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/head.png.import b/assets/textures/klas-layers/head.png.import new file mode 100644 index 0000000..da41c24 --- /dev/null +++ b/assets/textures/klas-layers/head.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/head.png-ef1170cf924dfd18e18a1191f4bf9db9.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/head.png" +dest_files=[ "res://.import/head.png-ef1170cf924dfd18e18a1191f4bf9db9.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/item-in-backpack.png b/assets/textures/klas-layers/item-in-backpack.png new file mode 100644 index 0000000000000000000000000000000000000000..5c01068c7d7dccfb71dd7e83d3839f541c2822e0 GIT binary patch literal 1115 zcmV-h1f=_kP)Px(6-h)vRCt{2*)ePDRul*Dzv?VC#Ep4dClAe37bghx1`i4pUf+=Q@kWD&F8U6g z@&z(z6?p5=PvA)!x)_8b&{FKdQvzNLf%Z+}c6d)k6$$v>tEZdm{C``5k92Z;?$Ol^ zKtx1DL_|bHL_~C~oUU$kd3lM|Y9&`2JD*c157vnm-hF! zFn~nk=T7_I^!$(&MUfbf$JlPS&S*4(@B7m608o~tGnq^}k6*9X&g0{wa9vlFW!d?x zGrj(Fk({an|z zu70}t>#m=smoWc)-&fv0*f#%c@y($h{89k;zK=9bt6w)yRi3q8uK@tlK_6ilA_xMh zMCighePQ)t=DU(irw$`()Ul(R76oEZfHKxqPm}5ScXxLOKz;vU+x)Y|!6%^g0{FgPe~UQSo0FdN=i@&DfYMN`$IE)E0hi0A z%B5a~+5l6kx9%JGVzF=@9v+lW0P6YAWrJIYZ_+)%f9eHHrhk(p(TdkSLFjsZ=bUlC9b*1mGo4@Y* zX)-;+pwUXj_ z9)AAmM@$EO5d?vB{Pp!UJkJwB5QysESu%9<*NuOMm=5~N{ioZ%E%d+9{40m7f6w#q z?yaZXf57L5#k;p2RKI_n_}|`tuYG?V_4=u-KfrAL+KAWDR{ehc_yMZ@tD}we^8{<= z$1`lt|2WuQ0NeAoK^q&`uP^|OdMN|Q^b1^9>(Ar{Px%QAtEWRCt{2-9JkkaU93-&o4POz2;&gLQ^f$p+ZC3KsdN1V>j_p-0DNnr;*jU zLmx(^?STX&OL3^3%;eDogVoe;hib531kv=;_vgTn&J5enN`aP_mxt|9>uwka006kPD2nv% z?Q1nkzQu8TFByZ&s1s~uc1BOUygi@uba*;&t>cqXQ%(AFfJjo3Bog};007*Bm-CPG z)SM*Q*{e57l7x&g&1!x@HNRkM<)W>Xi=(EQq{}lBlVm{<{IePX003?)mvsTSyEu-u zy}hkQ$(JN8o}TE2zzP5WkSPM_f1>~EeB@XdhLWV6ZeNX(uc|+1XJ&*@001zNxQ9Q% zYJNewc)qig&$*Ai{&mw#l2%t&-SPKtTJ$^%yqxCqIsF)%yPfOT0001Fh5$N6YJNeU zlLjUWyqtQ2bM5s{*v9|>V4@ICrp(n4Dv1CJ001(zxw)yOr6o(#)NO5TN#ajPQ)jO~ z{8SUc6952Y?%>NO9j?4k7>1^ce8Nje0000On}g)Def{wMuRa1O0002S$yLJ0?e6Xl xI|!fv000=9oo-)09~aebx3ew<0000F)o+kQwDPwN%18hJ002ovPDHLkV1gy7ESvxU literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/item-in-hand.png.import b/assets/textures/klas-layers/item-in-hand.png.import new file mode 100644 index 0000000..df4f504 --- /dev/null +++ b/assets/textures/klas-layers/item-in-hand.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/item-in-hand.png-2256283a96ce3e3f7c09b46d62fce0ef.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/item-in-hand.png" +dest_files=[ "res://.import/item-in-hand.png-2256283a96ce3e3f7c09b46d62fce0ef.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/pants.png b/assets/textures/klas-layers/pants.png new file mode 100644 index 0000000000000000000000000000000000000000..cac4fd7d62e607ba55ae843cfa2d2690d8f417ec GIT binary patch literal 644 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlV3vjRj$&;C9X96k4;vjb?hIQv;UIJz9JY5_^ zD(1Ys>DYbCLE_lQ^hqJHOND~G5*M=DJMI79ek1v1CO@mA*HPYA>u#!CZa%Tgj9qcQFGt) z{e?P1BeZPFUeB|+8wV(IK*~izem*1|;8OyNFJ93It5Bu-yyMs;^ z+*dlf%|iRV^?|l?{rh{S@(8nikbC`rF-K*t+~cI5DKlP})>i*Nx$$kyXW2FL&)=$i z{(E0tEYE~*w{I`LtK&6YgIPy!Ss}yOw3)VYb}E@aci8M^to_W9zBl4_&a{6ZmyeV;@Xo#e@9wRfX6SL;M zcl^(*{=INrCg*vvyL#Vc#=KC;&BfaH&GkJ$hAorwUN&LX#Nt0y*Vd=*yA=`a-?OMU z^v;LYU&`m@qh9|f6sGqjignf@?Q!MgoD!|l+2JJ>fzmX-ZG zp#J`LeeM2wr|b1L2ewKoe5zb`-rmU5Nb!@u{r&IrR<~^}y7!xpdB%H&tirDr_{{H9tzy1mD`e(QE+QKy}AJ+b3DmuG(>FzIn zYGy_gFFree%x|Ax&)T&)sbBY0{rm7|D#u;0we#g2s<-d^-?B~~7~>9;>qFK*`gI^@ RxgIF~Jzf1=);T3K0RVnGFPZ=V literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/pants.png.import b/assets/textures/klas-layers/pants.png.import new file mode 100644 index 0000000..dd2afdb --- /dev/null +++ b/assets/textures/klas-layers/pants.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/pants.png-f896d746ade843752a707c38df35784f.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/pants.png" +dest_files=[ "res://.import/pants.png-f896d746ade843752a707c38df35784f.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/scarf.png b/assets/textures/klas-layers/scarf.png new file mode 100644 index 0000000000000000000000000000000000000000..e1cac57fa26bbd0f8f936c60923c46cb61830df3 GIT binary patch literal 475 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlV3vjRj$&;C9X96k4;vjb?hIQv;UIN)uJzX3_ zD(1YsVI6eXK!D+b>B7ZItTPv$E`9OxrKSJ6L!~c%hz0~UWpEs3vAm%n8ToMUImz{V zr)~YDB?vSM85oGhzGay)?`qP#X`8>4*8IM9^y}lzJDC{X9EqFNHT(1BFMof0TiZQZ zuQZ%r|Mw1A;ow^bw#mh3ZLYg!xh2SX>*xDNf3LP}&pLL!%eLi5?25lU!4l0vx3A6L zytt!#cjo$qYoFV@l?6SOI??fBo&0?E*pjU?{!1Kqs&n+{-O~#^=j{GpH0_b8Yk6h8 zMKizU&R?Apan811r41Lgd2g9#KP6*tqxRM7_AV}0;_Bz!dwkuu;Pub#Pb|Ja-p=}e zy_x=mV=>0%@6v^58D0Ok@ICXjQ}!NP*5?1~{lW3{oOFzH^f~QS^TR&1&-xd)t2NV)n|wX9|KR7m z&2?ejKdtO`8=pHOe)i+F&+M;mUj8Ng@%z8zf;Z_kmwz%N2c%37|I*IzKj#!zB!GlH MUHx3vIVCg!02XQ9@&Et; literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/scarf.png.import b/assets/textures/klas-layers/scarf.png.import new file mode 100644 index 0000000..448d8ea --- /dev/null +++ b/assets/textures/klas-layers/scarf.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/scarf.png-2fd16f120f4e644493370696bc27456e.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/scarf.png" +dest_files=[ "res://.import/scarf.png-2fd16f120f4e644493370696bc27456e.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/shirt-sleeve-left.png b/assets/textures/klas-layers/shirt-sleeve-left.png new file mode 100644 index 0000000000000000000000000000000000000000..b21bbae40a15df541daa36d46c12b9ce36eb4dce GIT binary patch literal 458 zcmeAS@N?(olHy`uVBq!ia0y~yU|IlV3vjRj$&;C9X96k4;vjb?hIQv;UIN)Io-U3d z6?5L++L+gDAkzBK*=3F!r|72(bC-HA-}B%3i(myax8^H>jwgJ)LEFTf4Ili!y?$M8 zV{OYsph-xeAJpw7VH!Nn-TFu^Kc`}OH^>1r7VBaQ_O z+Y*Es4}~3k{C(Ra?pG4Ans0ZNuD{>$JbhAC0tb`EyszyN8?1s^IwIIB;%2@1_43Np zhkJKVVi3&g`a1pE?>|1K^$gsfeTpl6(v z=7-owr@s*!f9E^yZ%fX){_79JjTO&7SQ-d;H7Px$ZAnByRCt{2+ObLlK@bMuIXMr}2*(vRR%z^g|A+7qQrTD>0fU7R)*_}7L2ges zm;JtemKn0i{*Z|P0000000000fRmSQABPkXsnUA*=Av{10Gz$j0Z4$NI&I%Y9Pa!{ z-g^NQ;LP<8Lkw#H3~JH#U3_fc)9vF>x|JUZpa5s?VjpSWPp@BkfF0J^k8mnEe{TOX z%+JCc!{_BT;`)BoP=mzMnaK<)N@#Ou=-ZQo6Lh;jpL=>U~G z|F9mS7&A1txx945%St%l7_p*}#_*3yoO(v- z`dmxzKiAUxC(rTyYp>d@`dOQz9;E}^((5U!^ygo?eg?INkJ{&_Vt@7fH7(8pP?P3k z`(C<-l4_ryijA8wYlrkFc0l=+uM7Ammk>_fxEZ6nnYKT73iSX0{J+%Q_zM*P00000 d0000uE1&b8q&$T@u1^2}002ovPDHLkV1gsS$_)Sj literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/shirt-sleeve-right.png.import b/assets/textures/klas-layers/shirt-sleeve-right.png.import new file mode 100644 index 0000000..7ef19c0 --- /dev/null +++ b/assets/textures/klas-layers/shirt-sleeve-right.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/shirt-sleeve-right.png-c9586fb192fee4c3778ee8b0ec132cde.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/shirt-sleeve-right.png" +dest_files=[ "res://.import/shirt-sleeve-right.png-c9586fb192fee4c3778ee8b0ec132cde.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas-layers/shirt.png b/assets/textures/klas-layers/shirt.png new file mode 100644 index 0000000000000000000000000000000000000000..2e153b79d566308668db847f1e2893ceb5e0182d GIT binary patch literal 509 zcmVPx$w@E}nRCt{2+QDwqKoADtF(MTbMM6Gs&m-{u579^9fK&+%QPlQ8)wJONhtl{E zXH3Q$f8Q;ZCSLFE*nbp900000000000000000000001mfS3Lmc=hN4I|MuAZ&Bk5< z04DLidH`IOe%|w|@OooPWvppE-=b6@vjZ`*%UMKDz*yykK*;{l1NeI61&ZXZAg`x{^; zJO7#cr+oZCo$BXz>-od`wg3PC00000z(~IVJ%(Y=1@dB600000NkvXXu0mjfbnyHt literal 0 HcmV?d00001 diff --git a/assets/textures/klas-layers/shirt.png.import b/assets/textures/klas-layers/shirt.png.import new file mode 100644 index 0000000..7f53f0d --- /dev/null +++ b/assets/textures/klas-layers/shirt.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/shirt.png-c0c9727a06ccb4b40d98b853de2ed5ff.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/klas-layers/shirt.png" +dest_files=[ "res://.import/shirt.png-c0c9727a06ccb4b40d98b853de2ed5ff.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/assets/textures/klas.png b/assets/textures/klas.png index debc27c75d5fa2c93f814d2d4cf60898be5975c3..7665a60734663d67579e385d0d280a5cb4d1cb43 100644 GIT binary patch literal 3627 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 xMkVqujPx?&q+id7a9d4C2z!u&r!` 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 literal 0 HcmV?d00001 diff --git a/assets/textures/pickaxe.png.import b/assets/textures/pickaxe.png.import new file mode 100644 index 0000000..8e05db0 --- /dev/null +++ b/assets/textures/pickaxe.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/pickaxe.png-115d3229aa899985a3c2d916c5fe3f31.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://assets/textures/pickaxe.png" +dest_files=[ "res://.import/pickaxe.png-115d3229aa899985a3c2d916c5fe3f31.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=false +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/project.godot b/project.godot index 7f202fe..7c4016a 100644 --- a/project.godot +++ b/project.godot @@ -60,6 +60,29 @@ enabled=PoolStringArray( "res://addons/WAT/plugin.cfg" ) window=false resolution=false +[importer_defaults] + +texture={ +"compress/bptc_ldr": 0, +"compress/hdr_mode": 0, +"compress/lossy_quality": 0.7, +"compress/mode": 0, +"compress/normal_map": 0, +"detect_3d": false, +"flags/anisotropic": false, +"flags/filter": false, +"flags/mipmaps": false, +"flags/repeat": 0, +"flags/srgb": 2, +"process/HDR_as_SRGB": false, +"process/fix_alpha_border": true, +"process/invert_color": false, +"process/premult_alpha": false, +"size_limit": 0, +"stream": false, +"svg/scale": 1.0 +} + [input] jump={ @@ -122,6 +145,11 @@ energy={ "events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"unicode":0,"echo":false,"script":null) ] } +attack={ +"deadzone": 0.5, +"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":70,"unicode":0,"echo":false,"script":null) + ] +} [layer_names] diff --git a/scenes/main.tscn b/scenes/main.tscn index 61ec30e..d248fe6 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=140 format=2] +[gd_scene load_steps=175 format=2] [ext_resource path="res://scripts/Player.cs" type="Script" id=1] +[ext_resource path="res://assets/textures/klas-layers/hand-left.png" type="Texture" id=2] [ext_resource path="res://assets/tilesets/cliffs.tres" type="TileSet" id=3] [ext_resource path="res://scripts/Cliffs.cs" type="Script" id=4] [ext_resource path="res://assets/tilesets/cliffs.png" type="Texture" id=5] @@ -9,6 +10,7 @@ [ext_resource path="res://assets/sounds/waterfall.wav" type="AudioStream" id=8] [ext_resource path="res://assets/music/music6.wav" type="AudioStream" id=9] [ext_resource path="res://scripts/Butterfly.cs" type="Script" id=10] +[ext_resource path="res://assets/textures/klas-layers/pants.png" type="Texture" id=11] [ext_resource path="res://assets/sounds/cliff_arresting.wav" type="AudioStream" id=12] [ext_resource path="res://assets/textures/goe.png" type="Texture" id=13] [ext_resource path="res://assets/textures/sign-arrow-right-blank.png" type="Texture" id=14] @@ -17,383 +19,2765 @@ [ext_resource path="res://assets/textures/sign-arrow-left-blank.png" type="Texture" id=17] [ext_resource path="res://scenes/ui.tscn" type="PackedScene" id=18] [ext_resource path="res://assets/textures/waterfall.png" type="Texture" id=19] - -[sub_resource type="AtlasTexture" id=71] -atlas = ExtResource( 7 ) -region = Rect2( 160, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=72] -atlas = ExtResource( 7 ) -region = Rect2( 176, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=73] -atlas = ExtResource( 7 ) -region = Rect2( 192, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=74] -atlas = ExtResource( 7 ) -region = Rect2( 208, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=75] -atlas = ExtResource( 7 ) -region = Rect2( 224, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=76] +[ext_resource path="res://assets/textures/klas-layers/hat-outline.png" type="Texture" id=20] +[ext_resource path="res://assets/textures/klas-layers/boot-right.png" type="Texture" id=21] +[ext_resource path="res://assets/textures/klas-layers/shirt.png" type="Texture" id=22] +[ext_resource path="res://assets/textures/klas-layers/head-outline-rear.png" type="Texture" id=23] +[ext_resource path="res://assets/textures/klas-layers/item-in-backpack.png" type="Texture" id=24] +[ext_resource path="res://assets/textures/klas-layers/boot-left.png" type="Texture" id=26] +[ext_resource path="res://assets/textures/klas-layers/head.png" type="Texture" id=27] +[ext_resource path="res://assets/textures/klas-layers/foot-right.png" type="Texture" id=28] +[ext_resource path="res://assets/textures/klas-layers/foot-left.png" type="Texture" id=29] +[ext_resource path="res://assets/textures/klas-layers/hat.png" type="Texture" id=30] +[ext_resource path="res://assets/textures/klas-layers/item-in-hand.png" type="Texture" id=31] +[ext_resource path="res://assets/textures/klas-layers/hair.png" type="Texture" id=32] +[ext_resource path="res://assets/textures/klas-layers/scarf.png" type="Texture" id=33] +[ext_resource path="res://assets/textures/klas-layers/backpack.png" type="Texture" id=34] +[ext_resource path="res://assets/textures/klas-layers/body.png" type="Texture" id=35] +[ext_resource path="res://assets/textures/klas-layers/hand-right.png" type="Texture" id=36] +[ext_resource path="res://assets/textures/klas-layers/belt.png" type="Texture" id=37] +[ext_resource path="res://assets/textures/klas-layers/glove-left.png" type="Texture" id=39] +[ext_resource path="res://assets/textures/klas-layers/arm-left.png" type="Texture" id=40] +[ext_resource path="res://assets/textures/klas-layers/shirt-sleeve-left.png" type="Texture" id=41] +[ext_resource path="res://assets/textures/klas-layers/shirt-sleeve-right.png" type="Texture" id=42] +[ext_resource path="res://assets/textures/klas-layers/arm-right.png" type="Texture" id=43] + +[sub_resource type="AtlasTexture" id=1] atlas = ExtResource( 7 ) -region = Rect2( 240, 0, 16, 16 ) +region = Rect2( 464, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=77] +[sub_resource type="AtlasTexture" id=2] atlas = ExtResource( 7 ) region = Rect2( 480, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=78] +[sub_resource type="AtlasTexture" id=3] atlas = ExtResource( 7 ) region = Rect2( 496, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=79] +[sub_resource type="AtlasTexture" id=4] atlas = ExtResource( 7 ) region = Rect2( 512, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=80] +[sub_resource type="AtlasTexture" id=5] atlas = ExtResource( 7 ) region = Rect2( 528, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=81] +[sub_resource type="AtlasTexture" id=6] atlas = ExtResource( 7 ) region = Rect2( 544, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=82] -atlas = ExtResource( 7 ) -region = Rect2( 560, 0, 16, 16 ) - -[sub_resource type="AtlasTexture" id=83] +[sub_resource type="AtlasTexture" id=7] atlas = ExtResource( 7 ) -region = Rect2( 80, 0, 16, 16 ) +region = Rect2( 144, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=84] +[sub_resource type="AtlasTexture" id=8] atlas = ExtResource( 7 ) -region = Rect2( 96, 0, 16, 16 ) +region = Rect2( 160, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=85] +[sub_resource type="AtlasTexture" id=9] atlas = ExtResource( 7 ) -region = Rect2( 112, 0, 16, 16 ) +region = Rect2( 176, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=86] +[sub_resource type="AtlasTexture" id=10] atlas = ExtResource( 7 ) -region = Rect2( 128, 0, 16, 16 ) +region = Rect2( 192, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=87] +[sub_resource type="AtlasTexture" id=11] atlas = ExtResource( 7 ) -region = Rect2( 144, 0, 16, 16 ) +region = Rect2( 208, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=88] +[sub_resource type="AtlasTexture" id=12] atlas = ExtResource( 7 ) -region = Rect2( 256, 0, 16, 16 ) +region = Rect2( 224, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=89] +[sub_resource type="AtlasTexture" id=13] atlas = ExtResource( 7 ) -region = Rect2( 272, 0, 16, 16 ) +region = Rect2( 0, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=90] +[sub_resource type="AtlasTexture" id=14] atlas = ExtResource( 7 ) -region = Rect2( 288, 0, 16, 16 ) +region = Rect2( 16, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=91] +[sub_resource type="AtlasTexture" id=15] atlas = ExtResource( 7 ) -region = Rect2( 304, 0, 16, 16 ) +region = Rect2( 32, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=92] +[sub_resource type="AtlasTexture" id=16] atlas = ExtResource( 7 ) -region = Rect2( 320, 0, 16, 16 ) +region = Rect2( 48, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=93] +[sub_resource type="AtlasTexture" id=17] atlas = ExtResource( 7 ) -region = Rect2( 336, 0, 16, 16 ) +region = Rect2( 0, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=94] +[sub_resource type="AtlasTexture" id=18] atlas = ExtResource( 7 ) -region = Rect2( 352, 0, 16, 16 ) +region = Rect2( 16, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=95] +[sub_resource type="AtlasTexture" id=19] atlas = ExtResource( 7 ) -region = Rect2( 368, 0, 16, 16 ) +region = Rect2( 32, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=96] +[sub_resource type="AtlasTexture" id=20] atlas = ExtResource( 7 ) -region = Rect2( 384, 0, 16, 16 ) +region = Rect2( 48, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=97] +[sub_resource type="AtlasTexture" id=21] atlas = ExtResource( 7 ) region = Rect2( 400, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=98] +[sub_resource type="AtlasTexture" id=22] atlas = ExtResource( 7 ) -region = Rect2( 16, 0, 16, 16 ) +region = Rect2( 416, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=99] +[sub_resource type="AtlasTexture" id=23] atlas = ExtResource( 7 ) -region = Rect2( 32, 0, 16, 16 ) +region = Rect2( 432, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=100] +[sub_resource type="AtlasTexture" id=24] atlas = ExtResource( 7 ) -region = Rect2( 48, 0, 16, 16 ) +region = Rect2( 448, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=101] +[sub_resource type="AtlasTexture" id=25] atlas = ExtResource( 7 ) -region = Rect2( 64, 0, 16, 16 ) +region = Rect2( 240, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=102] +[sub_resource type="AtlasTexture" id=26] atlas = ExtResource( 7 ) -region = Rect2( 16, 0, 16, 16 ) +region = Rect2( 272, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=103] +[sub_resource type="AtlasTexture" id=27] atlas = ExtResource( 7 ) -region = Rect2( 32, 0, 16, 16 ) +region = Rect2( 288, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=104] +[sub_resource type="AtlasTexture" id=28] atlas = ExtResource( 7 ) -region = Rect2( 48, 0, 16, 16 ) +region = Rect2( 304, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=105] +[sub_resource type="AtlasTexture" id=29] atlas = ExtResource( 7 ) -region = Rect2( 64, 0, 16, 16 ) +region = Rect2( 320, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=106] +[sub_resource type="AtlasTexture" id=30] atlas = ExtResource( 7 ) -region = Rect2( 416, 0, 16, 16 ) +region = Rect2( 352, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=107] +[sub_resource type="AtlasTexture" id=31] atlas = ExtResource( 7 ) -region = Rect2( 432, 0, 16, 16 ) +region = Rect2( 368, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=108] +[sub_resource type="AtlasTexture" id=32] atlas = ExtResource( 7 ) -region = Rect2( 448, 0, 16, 16 ) +region = Rect2( 384, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=109] +[sub_resource type="AtlasTexture" id=33] atlas = ExtResource( 7 ) -region = Rect2( 464, 0, 16, 16 ) +region = Rect2( 400, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=110] +[sub_resource type="AtlasTexture" id=34] atlas = ExtResource( 7 ) region = Rect2( 416, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=111] +[sub_resource type="AtlasTexture" id=35] atlas = ExtResource( 7 ) region = Rect2( 432, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=112] +[sub_resource type="AtlasTexture" id=36] atlas = ExtResource( 7 ) region = Rect2( 448, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=113] +[sub_resource type="AtlasTexture" id=37] atlas = ExtResource( 7 ) -region = Rect2( 464, 0, 16, 16 ) +region = Rect2( 64, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=114] +[sub_resource type="AtlasTexture" id=38] atlas = ExtResource( 7 ) -region = Rect2( 416, 0, 16, 16 ) +region = Rect2( 80, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=115] +[sub_resource type="AtlasTexture" id=39] atlas = ExtResource( 7 ) -region = Rect2( 432, 0, 16, 16 ) +region = Rect2( 96, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=116] +[sub_resource type="AtlasTexture" id=40] atlas = ExtResource( 7 ) -region = Rect2( 448, 0, 16, 16 ) +region = Rect2( 112, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=117] +[sub_resource type="AtlasTexture" id=41] atlas = ExtResource( 7 ) -region = Rect2( 464, 0, 16, 16 ) +region = Rect2( 128, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=42] +atlas = ExtResource( 7 ) +region = Rect2( 240, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=118] +[sub_resource type="AtlasTexture" id=43] atlas = ExtResource( 7 ) region = Rect2( 256, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=119] +[sub_resource type="AtlasTexture" id=44] atlas = ExtResource( 7 ) region = Rect2( 272, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=120] +[sub_resource type="AtlasTexture" id=45] atlas = ExtResource( 7 ) region = Rect2( 288, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=121] +[sub_resource type="AtlasTexture" id=46] atlas = ExtResource( 7 ) region = Rect2( 304, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=122] +[sub_resource type="AtlasTexture" id=47] atlas = ExtResource( 7 ) region = Rect2( 320, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=123] +[sub_resource type="AtlasTexture" id=48] atlas = ExtResource( 7 ) region = Rect2( 336, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=124] +[sub_resource type="AtlasTexture" id=49] atlas = ExtResource( 7 ) region = Rect2( 352, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=125] +[sub_resource type="AtlasTexture" id=50] atlas = ExtResource( 7 ) region = Rect2( 368, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=126] +[sub_resource type="AtlasTexture" id=51] atlas = ExtResource( 7 ) region = Rect2( 384, 0, 16, 16 ) -[sub_resource type="AtlasTexture" id=127] +[sub_resource type="AtlasTexture" id=52] atlas = ExtResource( 7 ) region = Rect2( 400, 0, 16, 16 ) -[sub_resource type="SpriteFrames" id=128] +[sub_resource type="AtlasTexture" id=53] +atlas = ExtResource( 7 ) +region = Rect2( 416, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=54] +atlas = ExtResource( 7 ) +region = Rect2( 432, 0, 16, 16 ) + +[sub_resource type="AtlasTexture" id=55] +atlas = ExtResource( 7 ) +region = Rect2( 448, 0, 16, 16 ) + +[sub_resource type="SpriteFrames" id=56] animations = [ { -"frames": [ SubResource( 71 ), SubResource( 72 ), SubResource( 73 ), SubResource( 74 ), SubResource( 75 ), SubResource( 76 ) ], +"frames": [ SubResource( 1 ), SubResource( 2 ), SubResource( 3 ), SubResource( 4 ), SubResource( 5 ), SubResource( 6 ) ], "loop": true, -"name": "player_walking", -"speed": 8.0 -}, { -"frames": [ SubResource( 77 ), SubResource( 78 ), SubResource( 79 ), SubResource( 80 ), SubResource( 81 ), SubResource( 82 ) ], -"loop": true, -"name": "player_running", +"name": "player_running_left", "speed": 10.0 }, { -"frames": [ SubResource( 83 ), SubResource( 84 ), SubResource( 85 ), SubResource( 86 ), SubResource( 87 ) ], -"loop": true, -"name": "player_idle_back", -"speed": 5.0 -}, { -"frames": [ SubResource( 88 ), SubResource( 89 ), SubResource( 90 ), SubResource( 91 ), SubResource( 92 ), SubResource( 93 ), SubResource( 94 ), SubResource( 95 ), SubResource( 96 ), SubResource( 97 ) ], +"frames": [ SubResource( 7 ), SubResource( 8 ), SubResource( 9 ), SubResource( 10 ), SubResource( 11 ), SubResource( 12 ) ], "loop": true, -"name": "player_climbing_up", +"name": "player_walking_left", "speed": 8.0 }, { -"frames": [ SubResource( 98 ), SubResource( 99 ), SubResource( 100 ), SubResource( 101 ) ], +"frames": [ SubResource( 13 ), SubResource( 14 ), SubResource( 15 ), SubResource( 16 ) ], "loop": true, "name": "player_falling", "speed": 5.0 }, { -"frames": [ SubResource( 102 ), SubResource( 103 ), SubResource( 104 ), SubResource( 105 ) ], +"frames": [ SubResource( 17 ), SubResource( 18 ), SubResource( 19 ), SubResource( 20 ) ], "loop": true, "name": "player_idle_left", "speed": 5.0 }, { -"frames": [ SubResource( 106 ), SubResource( 107 ), SubResource( 108 ), SubResource( 109 ) ], +"frames": [ SubResource( 21 ), SubResource( 22 ), SubResource( 23 ), SubResource( 24 ) ], "loop": true, -"name": "player_traversing", +"name": "player_cliff_arresting", "speed": 5.0 }, { -"frames": [ SubResource( 110 ), SubResource( 111 ), SubResource( 112 ), SubResource( 113 ) ], +"frames": [ SubResource( 25 ), SubResource( 26 ), SubResource( 26 ), SubResource( 27 ), SubResource( 28 ), SubResource( 29 ), SubResource( 30 ), SubResource( 30 ), SubResource( 31 ), SubResource( 32 ) ], "loop": true, -"name": "player_cliff_arresting", -"speed": 5.0 +"name": "player_climbing_up", +"speed": 8.0 }, { -"frames": [ SubResource( 114 ), SubResource( 115 ), SubResource( 116 ), SubResource( 117 ) ], +"frames": [ SubResource( 33 ), SubResource( 34 ), SubResource( 35 ), SubResource( 36 ) ], "loop": true, "name": "player_cliff_hanging", "speed": 5.0 }, { -"frames": [ SubResource( 118 ), SubResource( 119 ), SubResource( 120 ), SubResource( 121 ), SubResource( 122 ), SubResource( 123 ), SubResource( 124 ), SubResource( 125 ), SubResource( 126 ), SubResource( 127 ) ], +"frames": [ SubResource( 37 ), SubResource( 38 ), SubResource( 39 ), SubResource( 40 ), SubResource( 41 ) ], +"loop": true, +"name": "player_idle_back", +"speed": 5.0 +}, { +"frames": [ SubResource( 42 ), SubResource( 43 ), SubResource( 44 ), SubResource( 45 ), SubResource( 46 ), SubResource( 47 ), SubResource( 48 ), SubResource( 49 ), SubResource( 50 ), SubResource( 51 ) ], "loop": true, "name": "player_climbing_down", "speed": 8.0 +}, { +"frames": [ SubResource( 52 ), SubResource( 53 ), SubResource( 54 ), SubResource( 55 ) ], +"loop": true, +"name": "player_traversing", +"speed": 5.0 } ] -[sub_resource type="RectangleShape2D" id=129] +[sub_resource type="RectangleShape2D" id=57] extents = Vector2( 7.5, 7 ) -[sub_resource type="RectangleShape2D" id=130] +[sub_resource type="RectangleShape2D" id=58] extents = Vector2( 7, 7 ) -[sub_resource type="RectangleShape2D" id=131] +[sub_resource type="RectangleShape2D" id=59] extents = Vector2( 7, 7 ) -[sub_resource type="RectangleShape2D" id=132] +[sub_resource type="RectangleShape2D" id=60] extents = Vector2( 5.5, 7.5 ) -[sub_resource type="RectangleShape2D" id=133] +[sub_resource type="RectangleShape2D" id=61] extents = Vector2( 5.5, 7.5 ) -[sub_resource type="RectangleShape2D" id=134] +[sub_resource type="RectangleShape2D" id=62] extents = Vector2( 4.5, 7 ) -[sub_resource type="RectangleShape2D" id=135] +[sub_resource type="RectangleShape2D" id=63] extents = Vector2( 4.5, 7 ) -[sub_resource type="RectangleShape2D" id=136] +[sub_resource type="RectangleShape2D" id=64] extents = Vector2( 4.5, 7 ) -[sub_resource type="RectangleShape2D" id=137] +[sub_resource type="RectangleShape2D" id=65] extents = Vector2( 7, 7 ) -[sub_resource type="RectangleShape2D" id=138] +[sub_resource type="RectangleShape2D" id=66] extents = Vector2( 4.5, 7 ) -[sub_resource type="RectangleShape2D" id=139] +[sub_resource type="RectangleShape2D" id=67] extents = Vector2( 24, 56 ) -[sub_resource type="AtlasTexture" id=140] +[sub_resource type="Animation" id=68] +resource_name = "player_attacking" +step = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath("item-in-hand:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 0 ] +} + +[sub_resource type="Animation" id=69] +resource_name = "player_cliff_hanging" +length = 0.8 +loop = true +step = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath("foot-right:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("boot-right:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("body:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("foot-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("pants:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("boot-left:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("shirt:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("belt:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("head-outline-rear:frame") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("hat-outline:frame") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("backpack:frame") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("item-in-backpack:frame") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("head:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("hair:frame") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("hat:frame") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("scarf:frame") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("hand-right:frame") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("glove-right:frame") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("hand-left:frame") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("glove-left:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/20/type = "value" +tracks/20/path = NodePath("shirt-sleeve-left:frame") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/21/type = "value" +tracks/21/path = NodePath("arm-left:frame") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/22/type = "value" +tracks/22/path = NodePath("arm-right:frame") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} +tracks/23/type = "value" +tracks/23/path = NodePath("shirt-sleeve-right:frame") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 29, 30, 31, 32 ] +} + +[sub_resource type="Animation" id=70] +length = 2.0 +loop = true +step = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath("foot-right:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("boot-right:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("body:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("foot-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("pants:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("boot-left:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("shirt:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("belt:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("head-outline-rear:frame") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("hat-outline:frame") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("backpack:frame") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("item-in-backpack:frame") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("head:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("hair:frame") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("hat:frame") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("scarf:frame") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("hand-right:frame") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("glove-right:frame") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("hand-left:frame") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("glove-left:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/20/type = "value" +tracks/20/path = NodePath("shirt-sleeve-left:frame") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/21/type = "value" +tracks/21/path = NodePath("arm-left:frame") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/22/type = "value" +tracks/22/path = NodePath("item-in-hand:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/keys = { +"times": PoolRealArray( ), +"transitions": PoolRealArray( ), +"update": 1, +"values": [ ] +} +tracks/23/type = "value" +tracks/23/path = NodePath("item-in-hand:rotation_degrees") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/keys = { +"times": PoolRealArray( ), +"transitions": PoolRealArray( ), +"update": 1, +"values": [ ] +} +tracks/24/type = "value" +tracks/24/path = NodePath("shirt-sleeve-right:frame") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} +tracks/25/type = "value" +tracks/25/path = NodePath("arm-right:frame") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8, 1, 1.2, 1.4, 1.6, 1.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28 ] +} + +[sub_resource type="Animation" id=71] +loop = true +step = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath("foot-right:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("boot-right:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("body:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("foot-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("pants:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("boot-left:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("shirt:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("belt:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("head-outline-rear:frame") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("hat-outline:frame") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("backpack:frame") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("item-in-backpack:frame") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("head:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("hair:frame") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("hat:frame") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("scarf:frame") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("hand-right:frame") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("glove-right:frame") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("hand-left:frame") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("glove-left:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/20/type = "value" +tracks/20/path = NodePath("shirt-sleeve-left:frame") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/21/type = "value" +tracks/21/path = NodePath("arm-left:frame") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/22/type = "value" +tracks/22/path = NodePath("item-in-hand:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ Vector2( 0, -1 ), Vector2( 0, 0 ), Vector2( 0, 0 ), Vector2( 0, 0 ) ] +} +tracks/23/type = "value" +tracks/23/path = NodePath("item-in-hand:rotation_degrees") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0.0, 0.0, 0.0, 0.0 ] +} +tracks/24/type = "value" +tracks/24/path = NodePath("arm-right:frame") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/25/type = "value" +tracks/25/path = NodePath("shirt-sleeve-right:frame") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 8, 9, 10, 11, 12 ] +} +tracks/26/type = "value" +tracks/26/path = NodePath("item-in-hand:frame") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6, 0.8 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 41, 41, 41, 41, 41 ] +} + +[sub_resource type="Animation" id=72] +length = 0.8 +loop = true +step = 0.2 +tracks/0/type = "value" +tracks/0/path = NodePath("foot-right:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("boot-right:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("body:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("foot-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("pants:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("boot-left:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("shirt:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("belt:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("head-outline-rear:frame") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("hat-outline:frame") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("backpack:frame") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("item-in-backpack:frame") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("head:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("hair:frame") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("hat:frame") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("scarf:frame") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("hand-right:frame") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("glove-right:frame") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("hand-left:frame") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("glove-left:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/20/type = "value" +tracks/20/path = NodePath("shirt-sleeve-left:frame") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/21/type = "value" +tracks/21/path = NodePath("arm-left:frame") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/22/type = "value" +tracks/22/path = NodePath("item-in-hand:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ Vector2( 1, 2 ), Vector2( 1, 2 ), Vector2( 1, 3 ), Vector2( 1, 3 ) ] +} +tracks/23/type = "value" +tracks/23/path = NodePath("item-in-hand:rotation_degrees") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ -20.0, -20.0, -20.0, -20.0 ] +} +tracks/24/type = "value" +tracks/24/path = NodePath("shirt-sleeve-right:frame") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/25/type = "value" +tracks/25/path = NodePath("arm-right:frame") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 0, 1, 2, 3 ] +} +tracks/26/type = "value" +tracks/26/path = NodePath("item-in-hand:frame") +tracks/26/interp = 1 +tracks/26/loop_wrap = true +tracks/26/imported = false +tracks/26/enabled = true +tracks/26/keys = { +"times": PoolRealArray( 0, 0.2, 0.4, 0.6 ), +"transitions": PoolRealArray( 1, 1, 1, 1 ), +"update": 1, +"values": [ 7, 7, 7, 7 ] +} + +[sub_resource type="Animation" id=73] +length = 0.75 +loop = true +step = 0.125 +tracks/0/type = "value" +tracks/0/path = NodePath("foot-right:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("boot-right:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("body:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("foot-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("pants:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("boot-left:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("shirt:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("belt:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("head-outline-rear:frame") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("hat-outline:frame") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("backpack:frame") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("item-in-backpack:frame") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("head:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("hair:frame") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("hat:frame") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("scarf:frame") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("hand-right:frame") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("glove-right:frame") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("hand-left:frame") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("glove-left:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/20/type = "value" +tracks/20/path = NodePath("shirt-sleeve-left:frame") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/21/type = "value" +tracks/21/path = NodePath("arm-left:frame") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/22/type = "value" +tracks/22/path = NodePath("item-in-hand:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ Vector2( -0.375, 1 ), Vector2( 3.25, 4.375 ), Vector2( 2.875, -0.25 ), Vector2( 4.375, -0.5 ), Vector2( 2.375, 2.5 ), Vector2( -0.625, 0.5 ) ] +} +tracks/23/type = "value" +tracks/23/path = NodePath("item-in-hand:rotation_degrees") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ -24.0, -24.0, -66.0, -74.0, -52.0, -30.0 ] +} +tracks/24/type = "value" +tracks/24/path = NodePath("shirt-sleeve-right:frame") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} +tracks/25/type = "value" +tracks/25/path = NodePath("arm-right:frame") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 33, 34, 35, 36, 37, 38 ] +} + +[sub_resource type="Animation" id=74] +length = 0.75 +loop = true +step = 0.125 +tracks/0/type = "value" +tracks/0/path = NodePath("foot-right:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("boot-right:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("body:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("foot-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("pants:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("boot-left:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("shirt:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("belt:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("head-outline-rear:frame") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/9/type = "value" +tracks/9/path = NodePath("hat-outline:frame") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/10/type = "value" +tracks/10/path = NodePath("backpack:frame") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/11/type = "value" +tracks/11/path = NodePath("item-in-backpack:frame") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/12/type = "value" +tracks/12/path = NodePath("head:frame") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/13/type = "value" +tracks/13/path = NodePath("hair:frame") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/14/type = "value" +tracks/14/path = NodePath("hat:frame") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/15/type = "value" +tracks/15/path = NodePath("scarf:frame") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/16/type = "value" +tracks/16/path = NodePath("hand-right:frame") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/17/type = "value" +tracks/17/path = NodePath("glove-right:frame") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/18/type = "value" +tracks/18/path = NodePath("hand-left:frame") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/19/type = "value" +tracks/19/path = NodePath("glove-left:frame") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/20/type = "value" +tracks/20/path = NodePath("shirt-sleeve-left:frame") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/21/type = "value" +tracks/21/path = NodePath("arm-left:frame") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/22/type = "value" +tracks/22/path = NodePath("item-in-hand:position") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ Vector2( 3, 4 ), Vector2( 4, 0 ), Vector2( 4, 3 ), Vector2( 1, 3 ), Vector2( -1, 1 ), Vector2( -1, 2 ) ] +} +tracks/23/type = "value" +tracks/23/path = NodePath("item-in-hand:rotation_degrees") +tracks/23/interp = 1 +tracks/23/loop_wrap = true +tracks/23/imported = false +tracks/23/enabled = true +tracks/23/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ -20.0, -60.0, -40.0, -40.0, -20.0, -20.0 ] +} +tracks/24/type = "value" +tracks/24/path = NodePath("shirt-sleeve-right:frame") +tracks/24/interp = 1 +tracks/24/loop_wrap = true +tracks/24/imported = false +tracks/24/enabled = true +tracks/24/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} +tracks/25/type = "value" +tracks/25/path = NodePath("arm-right:frame") +tracks/25/interp = 1 +tracks/25/loop_wrap = true +tracks/25/imported = false +tracks/25/enabled = true +tracks/25/keys = { +"times": PoolRealArray( 0, 0.125, 0.25, 0.375, 0.5, 0.625 ), +"transitions": PoolRealArray( 1, 1, 1, 1, 1, 1 ), +"update": 1, +"values": [ 13, 14, 15, 16, 17, 18 ] +} + +[sub_resource type="Animation" id=75] +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath("item-equipping:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.1 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 40 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("item-equipping:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ false, true, false ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("item-in-backpack:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ true, false, false ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("item-in-hand:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ false, false, true ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("hand-right:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0, 0.1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 39, 40 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("glove-right:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0, 0.1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 39, 40 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("arm-right:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0, 0.1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 39, 40 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("shirt-sleeve-right:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0, 0.1 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 39, 40 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("item-equipping:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0.1 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ) ] +} + +[sub_resource type="Animation" id=76] +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("arm-left:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 5, 6, 7 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("shirt-sleeve-left:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 5, 6, 7 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("hand-left:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 5, 6, 7 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("glove-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 5, 6, 7 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("item-equipping:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 6, 7 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("item-equipping:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ Vector2( 0, -1.125 ), Vector2( -1, -1 ) ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("item-equipping:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0.2, 0.3, 0.4 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ true, true, false ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("item-in-backpack:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0.2 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("item-in-hand:visible") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0.4 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} + +[sub_resource type="Animation" id=77] +length = 0.3 +tracks/0/type = "value" +tracks/0/path = NodePath("item-equipping:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.1 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ 40 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("item-equipping:visible") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ false, true, false ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("item-in-backpack:visible") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ false, false, true ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("item-in-hand:visible") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0, 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ true, false, false ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("hand-right:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 40, 39 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("glove-right:frame") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 40, 39 ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("arm-right:frame") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 40, 39 ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("shirt-sleeve-right:frame") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 40, 39 ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("item-equipping:position") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0.1 ), +"transitions": PoolRealArray( 1 ), +"update": 0, +"values": [ Vector2( 0, 0 ) ] +} + +[sub_resource type="Animation" id=78] +length = 0.4 +tracks/0/type = "value" +tracks/0/path = NodePath("arm-left:frame") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 7, 6, 5 ] +} +tracks/1/type = "value" +tracks/1/path = NodePath("shirt-sleeve-left:frame") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 7, 6, 5 ] +} +tracks/2/type = "value" +tracks/2/path = NodePath("hand-left:frame") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 7, 6, 5 ] +} +tracks/3/type = "value" +tracks/3/path = NodePath("glove-left:frame") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ 7, 6, 5 ] +} +tracks/4/type = "value" +tracks/4/path = NodePath("item-equipping:frame") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/keys = { +"times": PoolRealArray( 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ 7, 6 ] +} +tracks/5/type = "value" +tracks/5/path = NodePath("item-equipping:position") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/keys = { +"times": PoolRealArray( 0.1, 0.2 ), +"transitions": PoolRealArray( 1, 1 ), +"update": 1, +"values": [ Vector2( -1, -1 ), Vector2( 0, -1.125 ) ] +} +tracks/6/type = "value" +tracks/6/path = NodePath("item-equipping:visible") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/keys = { +"times": PoolRealArray( 0.1, 0.2, 0.3 ), +"transitions": PoolRealArray( 1, 1, 1 ), +"update": 1, +"values": [ true, true, false ] +} +tracks/7/type = "value" +tracks/7/path = NodePath("item-in-backpack:visible") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/keys = { +"times": PoolRealArray( 0.3 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ true ] +} +tracks/8/type = "value" +tracks/8/path = NodePath("item-in-hand:visible") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/keys = { +"times": PoolRealArray( 0.1 ), +"transitions": PoolRealArray( 1 ), +"update": 1, +"values": [ false ] +} + +[sub_resource type="StreamTexture" id=79] +load_path = "res://.import/glove-right.png-5348e98a1b2f033c0540955484c04bd3.stex" + +[sub_resource type="StreamTexture" id=80] +load_path = "res://.import/item-in-hand.png-2256283a96ce3e3f7c09b46d62fce0ef.stex" + +[sub_resource type="AtlasTexture" id=81] atlas = ExtResource( 5 ) region = Rect2( 64, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=141] +[sub_resource type="AtlasTexture" id=82] atlas = ExtResource( 5 ) region = Rect2( 80, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=142] +[sub_resource type="AtlasTexture" id=83] atlas = ExtResource( 5 ) region = Rect2( 64, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=143] +[sub_resource type="AtlasTexture" id=84] atlas = ExtResource( 5 ) region = Rect2( 80, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=144] +[sub_resource type="AtlasTexture" id=85] atlas = ExtResource( 5 ) region = Rect2( 64, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=145] +[sub_resource type="AtlasTexture" id=86] atlas = ExtResource( 5 ) region = Rect2( 80, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=146] +[sub_resource type="AtlasTexture" id=87] atlas = ExtResource( 5 ) region = Rect2( 64, 80, 16, 16 ) -[sub_resource type="AtlasTexture" id=147] +[sub_resource type="AtlasTexture" id=88] atlas = ExtResource( 5 ) region = Rect2( 80, 80, 16, 16 ) -[sub_resource type="SpriteFrames" id=148] +[sub_resource type="SpriteFrames" id=89] animations = [ { -"frames": [ SubResource( 140 ), SubResource( 141 ) ], -"loop": true, -"name": "butterfly_perching", -"speed": 12.0 -}, { -"frames": [ SubResource( 142 ), SubResource( 143 ) ], -"loop": true, -"name": "butterfly_evading", -"speed": 12.0 -}, { -"frames": [ SubResource( 144 ), SubResource( 145 ) ], +"frames": [ SubResource( 81 ), SubResource( 82 ) ], "loop": true, "name": "butterfly_idle", "speed": 2.0 }, { -"frames": [ SubResource( 146 ), SubResource( 147 ) ], +"frames": [ SubResource( 83 ), SubResource( 84 ) ], "loop": true, "name": "butterfly_flying", "speed": 8.5 +}, { +"frames": [ SubResource( 85 ), SubResource( 86 ) ], +"loop": true, +"name": "butterfly_evading", +"speed": 12.0 +}, { +"frames": [ SubResource( 87 ), SubResource( 88 ) ], +"loop": true, +"name": "butterfly_perching", +"speed": 12.0 } ] -[sub_resource type="RectangleShape2D" id=149] +[sub_resource type="RectangleShape2D" id=90] extents = Vector2( 0.5, 0.5 ) -[sub_resource type="CircleShape2D" id=150] +[sub_resource type="CircleShape2D" id=91] radius = 7.0 -[sub_resource type="TileSet" id=151] +[sub_resource type="TileSet" id=92] 0/name = "A" 0/texture = ExtResource( 16 ) 0/tex_offset = Vector2( 0, 0 ) @@ -1375,147 +3759,147 @@ radius = 7.0 69/shapes = [ ] 69/z_index = 0 -[sub_resource type="RectangleShape2D" id=157] +[sub_resource type="RectangleShape2D" id=93] extents = Vector2( 172, 4 ) -[sub_resource type="RectangleShape2D" id=158] +[sub_resource type="RectangleShape2D" id=94] extents = Vector2( 172, 1920 ) -[sub_resource type="AtlasTexture" id=159] +[sub_resource type="AtlasTexture" id=95] atlas = ExtResource( 19 ) region = Rect2( 0, 48, 48, 48 ) -[sub_resource type="AtlasTexture" id=160] +[sub_resource type="AtlasTexture" id=96] atlas = ExtResource( 19 ) region = Rect2( 48, 48, 48, 48 ) -[sub_resource type="AtlasTexture" id=161] +[sub_resource type="AtlasTexture" id=97] atlas = ExtResource( 19 ) region = Rect2( 96, 48, 48, 48 ) -[sub_resource type="AtlasTexture" id=162] +[sub_resource type="AtlasTexture" id=98] atlas = ExtResource( 19 ) region = Rect2( 144, 48, 48, 48 ) -[sub_resource type="AtlasTexture" id=163] +[sub_resource type="AtlasTexture" id=99] atlas = ExtResource( 19 ) region = Rect2( 192, 48, 48, 48 ) -[sub_resource type="SpriteFrames" id=164] +[sub_resource type="SpriteFrames" id=100] animations = [ { -"frames": [ SubResource( 159 ), SubResource( 160 ), SubResource( 161 ), SubResource( 162 ), SubResource( 163 ) ], +"frames": [ SubResource( 95 ), SubResource( 96 ), SubResource( 97 ), SubResource( 98 ), SubResource( 99 ) ], "loop": true, "name": "default", "speed": 20.0 } ] -[sub_resource type="AtlasTexture" id=165] +[sub_resource type="AtlasTexture" id=101] atlas = ExtResource( 19 ) region = Rect2( 0, 0, 48, 48 ) -[sub_resource type="AtlasTexture" id=166] +[sub_resource type="AtlasTexture" id=102] atlas = ExtResource( 19 ) region = Rect2( 48, 0, 48, 48 ) -[sub_resource type="AtlasTexture" id=167] +[sub_resource type="AtlasTexture" id=103] atlas = ExtResource( 19 ) region = Rect2( 96, 0, 48, 48 ) -[sub_resource type="AtlasTexture" id=168] +[sub_resource type="AtlasTexture" id=104] atlas = ExtResource( 19 ) region = Rect2( 144, 0, 48, 48 ) -[sub_resource type="AtlasTexture" id=169] +[sub_resource type="AtlasTexture" id=105] atlas = ExtResource( 19 ) region = Rect2( 192, 0, 48, 48 ) -[sub_resource type="SpriteFrames" id=170] +[sub_resource type="SpriteFrames" id=106] animations = [ { -"frames": [ SubResource( 165 ), SubResource( 166 ), SubResource( 167 ), SubResource( 168 ), SubResource( 169 ) ], +"frames": [ SubResource( 101 ), SubResource( 102 ), SubResource( 103 ), SubResource( 104 ), SubResource( 105 ) ], "loop": true, "name": "default", "speed": 8.0 } ] -[sub_resource type="RectangleShape2D" id=152] +[sub_resource type="RectangleShape2D" id=107] extents = Vector2( 952, 1896 ) -[sub_resource type="RectangleShape2D" id=153] +[sub_resource type="RectangleShape2D" id=108] extents = Vector2( 632, 64 ) -[sub_resource type="RectangleShape2D" id=154] +[sub_resource type="RectangleShape2D" id=109] extents = Vector2( 120, 64 ) -[sub_resource type="RectangleShape2D" id=155] +[sub_resource type="RectangleShape2D" id=110] extents = Vector2( 960, 1980 ) -[sub_resource type="RectangleShape2D" id=156] +[sub_resource type="RectangleShape2D" id=111] extents = Vector2( 960, 148 ) -[sub_resource type="RectangleShape2D" id=171] +[sub_resource type="RectangleShape2D" id=112] extents = Vector2( 576, 4 ) -[sub_resource type="RectangleShape2D" id=172] +[sub_resource type="RectangleShape2D" id=113] extents = Vector2( 68, 4 ) -[sub_resource type="RectangleShape2D" id=173] +[sub_resource type="RectangleShape2D" id=114] extents = Vector2( 172, 4 ) -[sub_resource type="RectangleShape2D" id=174] +[sub_resource type="RectangleShape2D" id=115] extents = Vector2( 96, 4 ) -[sub_resource type="RectangleShape2D" id=175] +[sub_resource type="RectangleShape2D" id=116] extents = Vector2( 960, 4 ) -[sub_resource type="RectangleShape2D" id=176] +[sub_resource type="RectangleShape2D" id=117] extents = Vector2( 960, 4 ) -[sub_resource type="RectangleShape2D" id=177] +[sub_resource type="RectangleShape2D" id=118] extents = Vector2( 72, 64 ) -[sub_resource type="RectangleShape2D" id=178] +[sub_resource type="RectangleShape2D" id=119] extents = Vector2( 72, 64 ) -[sub_resource type="RectangleShape2D" id=179] +[sub_resource type="RectangleShape2D" id=120] extents = Vector2( 608, 64 ) -[sub_resource type="RectangleShape2D" id=180] +[sub_resource type="RectangleShape2D" id=121] extents = Vector2( 608, 64 ) -[sub_resource type="RectangleShape2D" id=181] +[sub_resource type="RectangleShape2D" id=122] extents = Vector2( 172, 64 ) -[sub_resource type="RectangleShape2D" id=182] +[sub_resource type="RectangleShape2D" id=123] extents = Vector2( 172, 64 ) -[sub_resource type="RectangleShape2D" id=183] +[sub_resource type="RectangleShape2D" id=124] extents = Vector2( 96, 64.0054 ) -[sub_resource type="RectangleShape2D" id=184] +[sub_resource type="RectangleShape2D" id=125] extents = Vector2( 96, 64 ) -[sub_resource type="RectangleShape2D" id=185] +[sub_resource type="RectangleShape2D" id=126] extents = Vector2( 960, 24 ) -[sub_resource type="RectangleShape2D" id=186] +[sub_resource type="RectangleShape2D" id=127] extents = Vector2( 960, 24 ) -[sub_resource type="RectangleShape2D" id=187] +[sub_resource type="RectangleShape2D" id=128] extents = Vector2( 960, 24 ) -[sub_resource type="RectangleShape2D" id=188] +[sub_resource type="RectangleShape2D" id=129] extents = Vector2( 960, 24 ) -[sub_resource type="RectangleShape2D" id=189] +[sub_resource type="RectangleShape2D" id=130] extents = Vector2( 64, 4352 ) -[sub_resource type="RectangleShape2D" id=190] +[sub_resource type="RectangleShape2D" id=131] extents = Vector2( 64, 4352 ) -[sub_resource type="RectangleShape2D" id=191] +[sub_resource type="RectangleShape2D" id=132] extents = Vector2( 63.9966, 960 ) -[sub_resource type="RectangleShape2D" id=192] +[sub_resource type="RectangleShape2D" id=133] extents = Vector2( 63.9966, 1088 ) [node name="Main Scene" type="Node2D"] @@ -1527,6 +3911,7 @@ __meta__ = { [node name="UI" type="CanvasLayer" parent="."] [node name="Control" parent="UI" instance=ExtResource( 18 )] +mouse_filter = 2 [node name="Player" type="KinematicBody2D" parent="." groups=[ "Perchable Parent", @@ -1536,17 +3921,15 @@ position = Vector2( 384, -208 ) collision_mask = 6 collision/safe_margin = 0.6 script = ExtResource( 1 ) -__meta__ = { -"_edit_lock_": true -} [node name="AnimatedSprite" type="AnimatedSprite" parent="Player" groups=[ "Perchable", "Player", ]] +visible = false scale = Vector2( 8, 8 ) -frames = SubResource( 128 ) -animation = "player_idle_left" +frames = SubResource( 56 ) +animation = "player_walking_left" [node name="Area2D" type="Area2D" parent="Player/AnimatedSprite" groups=[ "Player", @@ -1554,20 +3937,20 @@ animation = "player_idle_left" visible = false collision_mask = 6 -[node name="player_running" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ +[node name="player_running_left" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ "Player", ]] visible = false position = Vector2( 0.5, 0 ) -shape = SubResource( 129 ) +shape = SubResource( 57 ) disabled = true -[node name="player_walking" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ +[node name="player_walking_left" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ "Player", ]] visible = false position = Vector2( 1, 0 ) -shape = SubResource( 130 ) +shape = SubResource( 58 ) disabled = true [node name="player_idle_left" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1575,14 +3958,14 @@ disabled = true ]] visible = false position = Vector2( 1, 0 ) -shape = SubResource( 131 ) +shape = SubResource( 59 ) [node name="player_climbing_down" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ "Player", ]] visible = false position = Vector2( -0.5, -0.5 ) -shape = SubResource( 132 ) +shape = SubResource( 60 ) disabled = true [node name="player_climbing_up" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1590,7 +3973,7 @@ disabled = true ]] visible = false position = Vector2( -0.5, -0.5 ) -shape = SubResource( 133 ) +shape = SubResource( 61 ) disabled = true [node name="player_cliff_arresting" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1598,7 +3981,7 @@ disabled = true ]] visible = false position = Vector2( -0.5, -1 ) -shape = SubResource( 134 ) +shape = SubResource( 62 ) disabled = true [node name="player_traversing" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1606,7 +3989,7 @@ disabled = true ]] visible = false position = Vector2( -0.5, -1 ) -shape = SubResource( 135 ) +shape = SubResource( 63 ) disabled = true [node name="player_idle_back" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1614,7 +3997,7 @@ disabled = true ]] visible = false position = Vector2( -0.5, 0 ) -shape = SubResource( 136 ) +shape = SubResource( 64 ) disabled = true [node name="player_falling" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1622,7 +4005,7 @@ disabled = true ]] visible = false position = Vector2( 1, 0 ) -shape = SubResource( 137 ) +shape = SubResource( 65 ) disabled = true [node name="player_cliff_hanging" type="CollisionShape2D" parent="Player/AnimatedSprite/Area2D" groups=[ @@ -1630,7 +4013,7 @@ disabled = true ]] visible = false position = Vector2( -0.5, -1 ) -shape = SubResource( 138 ) +shape = SubResource( 66 ) disabled = true [node name="Camera2D" type="Camera2D" parent="Player" groups=[ @@ -1654,7 +4037,7 @@ drag_margin_bottom = 0.59 ]] visible = false position = Vector2( -8, 0 ) -shape = SubResource( 139 ) +shape = SubResource( 67 ) [node name="Chest" type="RayCast2D" parent="Player"] visible = false @@ -1682,12 +4065,240 @@ one_shot = true stream = ExtResource( 12 ) pitch_scale = 2.0 +[node name="Sprites" type="Node2D" parent="Player"] +scale = Vector2( 8, 8 ) + +[node name="AnimationPlayer1" type="AnimationPlayer" parent="Player/Sprites"] +anims/player_attacking = SubResource( 68 ) +anims/player_cliff_hanging = SubResource( 69 ) +anims/player_climbing_up = SubResource( 70 ) +anims/player_idle_back = SubResource( 71 ) +anims/player_idle_left = SubResource( 72 ) +anims/player_running_left = SubResource( 73 ) +anims/player_walking_left = SubResource( 74 ) + +[node name="AnimationPlayer2" type="AnimationPlayer" parent="Player/Sprites"] +anims/player_equipping_back = SubResource( 75 ) +anims/player_equipping_left = SubResource( 76 ) +anims/player_unequipping_back = SubResource( 77 ) +anims/player_unequipping_left = SubResource( 78 ) + +[node name="foot-right" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 28 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="boot-right" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 21 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="body" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 35 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="foot-left" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 29 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="pants" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 11 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="boot-left" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 26 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="shirt" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 22 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="belt" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 37 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="head-outline-rear" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 23 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="hat-outline" type="Sprite" parent="Player/Sprites"] +visible = false +texture = ExtResource( 20 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="backpack" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 34 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="head" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 27 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="hair" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 32 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="hat" type="Sprite" parent="Player/Sprites"] +visible = false +texture = ExtResource( 30 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="item-in-backpack" type="Sprite" parent="Player/Sprites"] +position = Vector2( -0.125, 0 ) +texture = ExtResource( 24 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="scarf" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 33 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="hand-right" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 36 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="glove-right" type="Sprite" parent="Player/Sprites"] +texture = SubResource( 79 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="item-in-hand" type="Sprite" parent="Player/Sprites"] +visible = false +position = Vector2( 1, 3 ) +rotation = -0.349066 +texture = ExtResource( 31 ) +hframes = 42 +frame = 7 + +[node name="item-equipping" type="Sprite" parent="Player/Sprites"] +visible = false +position = Vector2( 0, -1.125 ) +texture = SubResource( 80 ) +hframes = 42 +frame = 6 + +[node name="arm-left" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 40 ) +hframes = 42 +frame = 5 +__meta__ = { +"_edit_lock_": true +} + +[node name="shirt-sleeve-left" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 41 ) +hframes = 42 +frame = 5 +__meta__ = { +"_edit_lock_": true +} + +[node name="hand-left" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 2 ) +hframes = 42 +frame = 5 +__meta__ = { +"_edit_lock_": true +} + +[node name="glove-left" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 39 ) +hframes = 42 +frame = 5 +__meta__ = { +"_edit_lock_": true +} + +[node name="arm-right" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 43 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + +[node name="shirt-sleeve-right" type="Sprite" parent="Player/Sprites"] +texture = ExtResource( 42 ) +hframes = 42 +frame = 3 +__meta__ = { +"_edit_lock_": true +} + [node name="Butterfly 1" type="AnimatedSprite" parent="." groups=[ "Summer", ]] position = Vector2( 252, -12 ) scale = Vector2( 8, 8 ) -frames = SubResource( 148 ) +frames = SubResource( 89 ) animation = "butterfly_idle" offset = Vector2( 1, -1 ) script = ExtResource( 10 ) @@ -1704,7 +4315,7 @@ collision_layer = 4 collision_mask = 47 [node name="CollisionShape2D" type="CollisionShape2D" parent="Butterfly 1/PerchingCollider"] -shape = SubResource( 149 ) +shape = SubResource( 90 ) [node name="ObstacleCollider" type="Area2D" parent="Butterfly 1"] visible = false @@ -1713,7 +4324,7 @@ collision_layer = 4 collision_mask = 47 [node name="CollisionShape2D" type="CollisionShape2D" parent="Butterfly 1/ObstacleCollider"] -shape = SubResource( 150 ) +shape = SubResource( 91 ) [node name="FlightTimer" type="Timer" parent="Butterfly 1"] one_shot = true @@ -1726,7 +4337,7 @@ one_shot = true ]] position = Vector2( 360, -3896 ) scale = Vector2( 8, 8 ) -frames = SubResource( 148 ) +frames = SubResource( 89 ) animation = "butterfly_idle" offset = Vector2( 1, -1 ) script = ExtResource( 10 ) @@ -1743,7 +4354,7 @@ collision_layer = 4 collision_mask = 47 [node name="CollisionShape2D" type="CollisionShape2D" parent="Butterfly 2/PerchingCollider"] -shape = SubResource( 149 ) +shape = SubResource( 90 ) [node name="ObstacleCollider" type="Area2D" parent="Butterfly 2"] visible = false @@ -1752,7 +4363,7 @@ collision_layer = 4 collision_mask = 47 [node name="CollisionShape2D" type="CollisionShape2D" parent="Butterfly 2/ObstacleCollider"] -shape = SubResource( 150 ) +shape = SubResource( 91 ) [node name="FlightTimer" type="Timer" parent="Butterfly 2"] one_shot = true @@ -1765,7 +4376,7 @@ one_shot = true ]] position = Vector2( 1272, 3952 ) scale = Vector2( 8, 8 ) -frames = SubResource( 148 ) +frames = SubResource( 89 ) animation = "butterfly_idle" offset = Vector2( 1, -1 ) script = ExtResource( 10 ) @@ -1782,7 +4393,7 @@ collision_layer = 4 collision_mask = 47 [node name="CollisionShape2D" type="CollisionShape2D" parent="Butterfly 3/PerchingCollider"] -shape = SubResource( 149 ) +shape = SubResource( 90 ) [node name="ObstacleCollider" type="Area2D" parent="Butterfly 3"] visible = false @@ -1791,7 +4402,7 @@ collision_layer = 4 collision_mask = 47 [node name="CollisionShape2D" type="CollisionShape2D" parent="Butterfly 3/ObstacleCollider"] -shape = SubResource( 150 ) +shape = SubResource( 91 ) [node name="FlightTimer" type="Timer" parent="Butterfly 3"] one_shot = true @@ -1806,6 +4417,9 @@ z_index = -2 collision_layer = 2 collision_mask = 13 script = ExtResource( 4 ) +__meta__ = { +"_edit_lock_": true +} [node name="Rock" type="TileMap" parent="Cliffs" groups=[ "Cliffs", @@ -1916,7 +4530,7 @@ texture = ExtResource( 15 ) position = Vector2( -2145, 3500 ) scale = Vector2( 1.25027, 0.892843 ) z_index = 4 -tile_set = SubResource( 151 ) +tile_set = SubResource( 92 ) cell_size = Vector2( 1, 1 ) cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 ) collision_layer = 0 @@ -1935,7 +4549,7 @@ texture = ExtResource( 14 ) [node name="Text" type="TileMap" parent="Cliffs/Readable Sign (8, -9)"] position = Vector2( -5, 0 ) -tile_set = SubResource( 151 ) +tile_set = SubResource( 92 ) cell_size = Vector2( 1, 1 ) cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 ) collision_layer = 0 @@ -1954,7 +4568,7 @@ texture = ExtResource( 15 ) [node name="Text" type="TileMap" parent="Cliffs/Readable Sign (221, -7)"] position = Vector2( 4, -4 ) -tile_set = SubResource( 151 ) +tile_set = SubResource( 92 ) cell_size = Vector2( 1, 1 ) cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 ) collision_layer = 0 @@ -1978,7 +4592,7 @@ texture = ExtResource( 17 ) [node name="Text" type="TileMap" parent="Cliffs/Readable Sign (24, 487)"] position = Vector2( -10, -3.22583 ) scale = Vector2( 1.2, 1.2 ) -tile_set = SubResource( 151 ) +tile_set = SubResource( 92 ) cell_size = Vector2( 1, 1 ) cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 ) collision_layer = 0 @@ -1989,7 +4603,7 @@ tile_data = PoolIntArray( -544075464, 2, 0, -544075456, 11, 0, -544075448, 8, 0, [node name="Text 2" type="TileMap" parent="Cliffs/Readable Sign (24, 487)"] position = Vector2( -10, 6.45215 ) scale = Vector2( 0.5, 0.4 ) -tile_set = SubResource( 151 ) +tile_set = SubResource( 92 ) cell_size = Vector2( 1, 1 ) cell_custom_transform = Transform2D( 0, 0, 0, 0, 0, 0 ) collision_layer = 0 @@ -2008,7 +4622,7 @@ texture = ExtResource( 15 ) [node name="Waterfall" type="Area2D" parent="Cliffs"] position = Vector2( 1532, -3544 ) -z_index = 1 +z_index = 32 collision_layer = 34 collision_mask = 5 __meta__ = { @@ -2030,17 +4644,17 @@ collision_mask = 29 "Ground", "Winter", ]] -shape = SubResource( 157 ) +shape = SubResource( 93 ) [node name="CollisionShape2D" type="CollisionShape2D" parent="Cliffs/Waterfall"] visible = false position = Vector2( 0, 1704 ) -shape = SubResource( 158 ) +shape = SubResource( 94 ) one_way_collision = true [node name="Water 1" type="AnimatedSprite" parent="Cliffs/Waterfall"] scale = Vector2( 8.16667, 9 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 1"] scale = Vector2( 0.125, 0.125 ) @@ -2053,7 +4667,7 @@ attenuation = 8.28211 [node name="Water 2" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 408 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 2"] scale = Vector2( 0.125, 0.125 ) @@ -2065,7 +4679,7 @@ attenuation = 8.28211 [node name="Water 3" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 792 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 3"] scale = Vector2( 0.125, 0.125 ) @@ -2078,7 +4692,7 @@ attenuation = 8.28211 [node name="Water 4" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 1176 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 4"] scale = Vector2( 0.125, 0.125 ) @@ -2091,7 +4705,7 @@ attenuation = 8.28211 [node name="Water 5" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 1560 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 5"] scale = Vector2( 0.125, 0.125 ) @@ -2104,7 +4718,7 @@ attenuation = 8.28211 [node name="Water 6" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 1944 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 6"] scale = Vector2( 0.125, 0.125 ) @@ -2117,7 +4731,7 @@ attenuation = 8.28211 [node name="Water 7" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 2328 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 7"] scale = Vector2( 0.125, 0.125 ) @@ -2130,7 +4744,7 @@ attenuation = 8.28211 [node name="Water 8" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 2712 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 8"] scale = Vector2( 0.125, 0.125 ) @@ -2143,7 +4757,7 @@ attenuation = 8.28211 [node name="Water 9" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 3096 ) scale = Vector2( 8.16667, 8 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 9"] scale = Vector2( 0.125, 0.125 ) @@ -2156,7 +4770,7 @@ attenuation = 8.28211 [node name="Water 10" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 0, 3456 ) scale = Vector2( 8.167, 7 ) -frames = SubResource( 164 ) +frames = SubResource( 100 ) [node name="AudioStreamPlayer2D" type="AudioStreamPlayer2D" parent="Cliffs/Waterfall/Water 10"] scale = Vector2( 0.125, 0.125 ) @@ -2170,54 +4784,54 @@ attenuation = 8.28211 position = Vector2( -220, 3488 ) scale = Vector2( 16, 16 ) z_index = 1 -frames = SubResource( 170 ) +frames = SubResource( 106 ) [node name="Mist 2" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( -12, 3464 ) scale = Vector2( 16, 16 ) z_index = 1 -frames = SubResource( 170 ) +frames = SubResource( 106 ) [node name="Mist 3" type="AnimatedSprite" parent="Cliffs/Waterfall"] position = Vector2( 172, 3488 ) scale = Vector2( 16, 16 ) z_index = 1 -frames = SubResource( 170 ) +frames = SubResource( 106 ) [node name="Extents 1" type="CollisionShape2D" parent="Cliffs" groups=[ "Cliffs", ]] visible = false position = Vector2( 960, -1816 ) -shape = SubResource( 152 ) +shape = SubResource( 107 ) [node name="Extents 2" type="CollisionShape2D" parent="Cliffs" groups=[ "Cliffs", ]] visible = false position = Vector2( 768, -3776 ) -shape = SubResource( 153 ) +shape = SubResource( 108 ) [node name="Extents 3" type="CollisionShape2D" parent="Cliffs" groups=[ "Cliffs", ]] visible = false position = Vector2( 1792, -3776 ) -shape = SubResource( 154 ) +shape = SubResource( 109 ) [node name="Extents 4" type="CollisionShape2D" parent="Cliffs" groups=[ "Cliffs", ]] visible = false position = Vector2( 960, 2068 ) -shape = SubResource( 155 ) +shape = SubResource( 110 ) [node name="Extents 5" type="CollisionShape2D" parent="Cliffs" groups=[ "Cliffs", ]] visible = false position = Vector2( 960, 4204 ) -shape = SubResource( 156 ) +shape = SubResource( 111 ) [node name="Edge 1" type="Area2D" parent="Cliffs" groups=[ "Cliffs", @@ -2230,7 +4844,7 @@ collision_mask = 29 [node name="CollisionShape2D" type="CollisionShape2D" parent="Cliffs/Edge 1" groups=[ "Cliffs", ]] -shape = SubResource( 171 ) +shape = SubResource( 112 ) [node name="Edge 2" type="Area2D" parent="Cliffs" groups=[ "Cliffs", @@ -2243,7 +4857,7 @@ collision_mask = 29 [node name="CollisionShape2D" type="CollisionShape2D" parent="Cliffs/Edge 2" groups=[ "Cliffs", ]] -shape = SubResource( 172 ) +shape = SubResource( 113 ) [node name="Edge 3" type="Area2D" parent="Cliffs" groups=[ "Cliffs", @@ -2256,7 +4870,7 @@ collision_mask = 29 [node name="CollisionShape2D" type="CollisionShape2D" parent="Cliffs/Edge 3" groups=[ "Cliffs", ]] -shape = SubResource( 173 ) +shape = SubResource( 114 ) [node name="Edge 4" type="Area2D" parent="Cliffs" groups=[ "Cliffs", @@ -2269,7 +4883,7 @@ collision_mask = 29 [node name="CollisionShape2D" type="CollisionShape2D" parent="Cliffs/Edge 4" groups=[ "Cliffs", ]] -shape = SubResource( 174 ) +shape = SubResource( 115 ) [node name="Edge 5" type="Area2D" parent="Cliffs" groups=[ "Cliffs", @@ -2282,7 +4896,7 @@ collision_mask = 29 [node name="CollisionShape2D" type="CollisionShape2D" parent="Cliffs/Edge 5" groups=[ "Cliffs", ]] -shape = SubResource( 175 ) +shape = SubResource( 116 ) [node name="Edge 6" type="Area2D" parent="Cliffs" groups=[ "Cliffs", @@ -2296,7 +4910,7 @@ collision_mask = 29 "Cliffs", ]] position = Vector2( -960, 3868 ) -shape = SubResource( 176 ) +shape = SubResource( 117 ) [node name="Ground 1" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2313,7 +4927,7 @@ collision_mask = 29 "Dropdownable", "Ground", ]] -shape = SubResource( 177 ) +shape = SubResource( 118 ) one_way_collision = true [node name="Area2D" type="Area2D" parent="Cliffs/Ground 1" groups=[ @@ -2327,7 +4941,7 @@ collision_mask = 29 "Cliffs", "Ground", ]] -shape = SubResource( 178 ) +shape = SubResource( 119 ) [node name="Ground 2" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2344,7 +4958,7 @@ collision_mask = 29 "Dropdownable", "Ground", ]] -shape = SubResource( 179 ) +shape = SubResource( 120 ) one_way_collision = true [node name="Area2D" type="Area2D" parent="Cliffs/Ground 2" groups=[ @@ -2358,7 +4972,7 @@ collision_mask = 29 "Cliffs", "Ground", ]] -shape = SubResource( 180 ) +shape = SubResource( 121 ) [node name="Ground 3" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2375,7 +4989,7 @@ collision_mask = 29 "Dropdownable", "Ground", ]] -shape = SubResource( 181 ) +shape = SubResource( 122 ) one_way_collision = true [node name="Area2D" type="Area2D" parent="Cliffs/Ground 3" groups=[ @@ -2389,7 +5003,7 @@ collision_mask = 29 "Cliffs", "Ground", ]] -shape = SubResource( 182 ) +shape = SubResource( 123 ) [node name="Ground 4" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2406,7 +5020,7 @@ collision_mask = 29 "Dropdownable", "Ground", ]] -shape = SubResource( 183 ) +shape = SubResource( 124 ) one_way_collision = true [node name="Area2D" type="Area2D" parent="Cliffs/Ground 4" groups=[ @@ -2420,7 +5034,7 @@ collision_mask = 29 "Cliffs", "Ground", ]] -shape = SubResource( 184 ) +shape = SubResource( 125 ) [node name="Ground 5" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2439,7 +5053,7 @@ collision_mask = 29 "Ground", ]] rotation = 6.28319 -shape = SubResource( 185 ) +shape = SubResource( 126 ) one_way_collision = true [node name="Area2D" type="Area2D" parent="Cliffs/Ground 5" groups=[ @@ -2453,7 +5067,7 @@ collision_mask = 29 "Cliffs", "Ground", ]] -shape = SubResource( 186 ) +shape = SubResource( 127 ) [node name="Ground 6" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2469,7 +5083,7 @@ collision_mask = 29 "Ground", ]] position = Vector2( 0, 20 ) -shape = SubResource( 187 ) +shape = SubResource( 128 ) one_way_collision = true [node name="Area2D" type="Area2D" parent="Cliffs/Ground 6" groups=[ @@ -2484,7 +5098,7 @@ collision_mask = 29 "Ground", ]] position = Vector2( 0, 20 ) -shape = SubResource( 188 ) +shape = SubResource( 129 ) [node name="Rock 1" type="StaticBody2D" parent="Cliffs" groups=[ "Cliffs", @@ -2571,7 +5185,7 @@ __meta__ = { } [node name="CollisionShape2D" type="CollisionShape2D" parent="Scene Boundary - Left"] -shape = SubResource( 189 ) +shape = SubResource( 130 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -2590,7 +5204,7 @@ __meta__ = { } [node name="CollisionShape2D" type="CollisionShape2D" parent="Scene Boundary - Right"] -shape = SubResource( 190 ) +shape = SubResource( 131 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -2608,7 +5222,7 @@ __meta__ = { [node name="CollisionShape2D" type="CollisionShape2D" parent="Scene Boundary - Top"] rotation = 1.5708 -shape = SubResource( 191 ) +shape = SubResource( 132 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -2626,7 +5240,7 @@ __meta__ = { [node name="CollisionShape2D" type="CollisionShape2D" parent="Scene Boundary - Bottom"] rotation = 1.5708 -shape = SubResource( 192 ) +shape = SubResource( 133 ) __meta__ = { "_edit_group_": true, "_edit_lock_": true @@ -2643,6 +5257,10 @@ volume_db = -15.273 [connection signal="body_entered" from="Player/AnimatedSprite/Area2D" to="Player" method="_OnPlayerAreaColliderBodyEntered"] [connection signal="body_exited" from="Player/AnimatedSprite/Area2D" to="Player" method="_OnPlayerAreaColliderBodyExited"] [connection signal="timeout" from="Player/EnergyTimer" to="Player" method="_OnEnergyTimerTimeout"] +[connection signal="animation_finished" from="Player/Sprites/AnimationPlayer1" to="Player" method="_OnAnimationFinished"] +[connection signal="animation_started" from="Player/Sprites/AnimationPlayer1" to="Player" method="_OnAnimationStarted"] +[connection signal="animation_finished" from="Player/Sprites/AnimationPlayer2" to="Player" method="_OnAnimationFinished"] +[connection signal="animation_started" from="Player/Sprites/AnimationPlayer2" to="Player" method="_OnAnimationStarted"] [connection signal="area_entered" from="Butterfly 1/PerchingCollider" to="Butterfly 1" method="_OnPerchingColliderAreaEntered"] [connection signal="body_entered" from="Butterfly 1/PerchingCollider" to="Butterfly 1" method="_OnPerchingColliderBodyEntered"] [connection signal="body_entered" from="Butterfly 1/ObstacleCollider" to="Butterfly 1" method="_OnObstacleColliderBodyEntered"] diff --git a/scenes/ui.tscn b/scenes/ui.tscn index fb02c9a..5b2bb6d 100644 --- a/scenes/ui.tscn +++ b/scenes/ui.tscn @@ -42,6 +42,7 @@ margin_left = 200.0 margin_top = -500.0 margin_right = 584.0 margin_bottom = -244.0 +mouse_filter = 2 bbcode_enabled = true fit_content_height = true scroll_active = false diff --git a/scripts/Cliffs.cs b/scripts/Cliffs.cs index af592ee..ebf97d7 100644 --- a/scripts/Cliffs.cs +++ b/scripts/Cliffs.cs @@ -30,6 +30,7 @@ public enum Season private AudioStreamPlayer _musicPlayer; private TileMap _iceTileMap; private readonly Dictionary _waterfallZIndex = new(); + private readonly Dictionary _waterfallMistZIndex = new(); private readonly Dictionary _music = new(); private readonly Dictionary _ambience = new(); private readonly Dictionary _musicVolumes = new(); @@ -52,8 +53,10 @@ public override void _Ready() _log = new Log (Name); _clearColor = InitialClearColor; VisualServer.SetDefaultClearColor (_clearColor); - _waterfallZIndex.Add (Season.Summer, 2); + _waterfallZIndex.Add (Season.Summer, 33); _waterfallZIndex.Add (Season.Winter, 1); + _waterfallMistZIndex.Add (Season.Summer, 33); + _waterfallMistZIndex.Add (Season.Winter, 33); _ambience.Add (Season.Summer, ResourceLoader.Load ("res://assets/sounds/ambience_summer.wav")); _ambience.Add (Season.Winter, ResourceLoader.Load ("res://assets/sounds/ambience_winter.wav")); _ambienceVolumes.Add (Season.Summer, -10); @@ -137,6 +140,12 @@ private void UpdateWaterfall (Season season, float delta) waterfall.Visible = true; waterfall.ZIndex = _waterfallZIndex[season]; + for (var i = 1; i <= 3; ++i) + { + var mist = waterfall.GetNode ("Mist " + i); + mist.ZIndex = _waterfallMistZIndex[season]; + } + foreach (Node node1 in waterfall.GetChildren()) { if (node1 is StaticBody2D body) UpdateFrozenWaterfallTopGround (body, season, delta); diff --git a/scripts/Player.cs b/scripts/Player.cs index b350fc4..8773792 100644 --- a/scripts/Player.cs +++ b/scripts/Player.cs @@ -1,4 +1,6 @@ +using System; using System.Collections.Generic; +using System.Linq; using Godot; using static Tools; using Input = Tools.Input; @@ -38,12 +40,11 @@ public class Player : KinematicBody2D [Export] public string ClimbingPrepAnimation = "player_idle_back"; [Export] public string FreeFallingAnimation = "player_falling"; [Export] public string ClimbingUpAnimation = "player_climbing_up"; - [Export] public string ClimbingDownAnimation = "player_climbing_down"; [Export] public string CliffHangingAnimation = "player_cliff_hanging"; [Export] public string TraversingAnimation = "player_traversing"; [Export] public string CliffArrestingAnimation = "player_cliff_arresting"; - [Export] public string WalkAnimation = "player_walking"; - [Export] public string RunAnimation = "player_running"; + [Export] public string WalkLeftAnimation = "player_walking_left"; + [Export] public string RunLeftAnimation = "player_running_left"; [Export] public string CliffArrestingSoundFile = "res://assets/sounds/cliff_arresting.wav"; [Export] public bool CliffArrestingSoundLooping = true; [Export] public float CliffArrestingSoundLoopBeginSeconds = 0.5f; @@ -81,9 +82,11 @@ public enum State FreeFalling, } + private readonly RandomNumberGenerator _rng = new(); private Vector2 _velocity; private RichTextLabel _label = null!; private AnimatedSprite _sprite = null!; + private AnimationPlayer _animationPlayer = null!; private Area2D _area = null!; private TextureProgress _energyMeter = null!; private AudioStreamPlayer _audio = null!; @@ -112,9 +115,37 @@ public enum State private TileMap _signsTileMap; private Cliffs _cliffs; private Area2D _waterfall; + private Weapon _weapon; private volatile string _currentAnimation; private volatile bool _isDroppingDown; private volatile bool _isResting; + private ClothingClickMode _clothingClickMode = ClothingClickMode.Remove; + private Sprite _shirtSprite; + private Sprite _scarfSprite; + private Sprite _pantsSprite; + private Sprite _itemInHandSprite; + private Sprite _itemInBackpackSprite; + private Sprite _headSprite; + private Sprite _headOutlineRearSprite; + private Sprite _hatSprite; + private Sprite _hatOutlineSprite; + private Sprite _handRightSprite; + private Sprite _handLeftSprite; + private Sprite _hairSprite; + private Sprite _gloveLeftSprite; + private Sprite _gloveRightSprite; + private Sprite _footRightSprite; + private Sprite _footLeftSprite; + private Sprite _bootRightSprite; + private Sprite _bootLeftSprite; + private Sprite _bodySprite; + private Sprite _beltSprite; + private Sprite _shirtSleeveLeftSprite; + private Sprite _shirtSleeveRightSprite; + private Sprite _armLeftSprite; + private Sprite _armRightSprite; + private Sprite _backpackSprite; + private List _clothes; private Log _log; // @formatter:off @@ -142,12 +173,317 @@ public enum State { State.ReadingSign, new[] { State.Idle, State.Walking, State.Running }} }; + private static readonly Dictionary > SpriteZIndices = new() + { + { "player_idle_left", new Dictionary { + { "item-in-backpack", 0 }, + { "backpack", 1 }, + { "shirt-sleeve-right", 2 }, + { "foot-right", 3 }, + { "boot-right", 4 }, + { "arm-right", 5 }, + { "hand-right", 5 }, + { "glove-right", 6 }, + { "foot-left", 7 }, + { "body", 8 }, + { "shirt", 9 }, + { "head", 10 }, + { "head-outline-rear", 10 }, + { "boot-left", 11 }, + { "pants", 12 }, + { "belt", 13 }, + { "hair", 14 }, + { "scarf", 15 }, + { "hat", 16 }, + { "hat-outline", 16 }, + { "item-in-hand", 17 }, + { "arm-left", 18 }, + { "hand-left", 18 }, + { "shirt-sleeve-left", 19 }, + { "glove-left", 19 }}}, + { "player_idle_back", new Dictionary { + { "item-in-hand", 0 }, + { "body", 1 }, + { "head", 2 }, + { "head-outline-rear", 2 }, + { "foot-left", 3 }, + { "foot-right", 3 }, + { "boot-left", 4 }, + { "boot-right", 4 }, + { "pants", 5 }, + { "shirt", 6 }, + { "belt", 7 }, + { "arm-left", 8 }, + { "arm-right", 8 }, + { "shirt-sleeve-left", 9 }, + { "shirt-sleeve-right", 9 }, + { "hand-left", 10 }, + { "hand-right", 10 }, + { "glove-left", 11 }, + { "glove-right", 11 }, + { "scarf", 12 }, + { "backpack", 13 }, + { "hair", 14 }, + { "hat-outline", 15 }, + { "hat", 16 }, + { "item-in-backpack", 17 }}}, + { "player_cliff_hanging", new Dictionary { + { "item-in-hand", 0 }, + { "body", 1 }, + { "head", 2 }, + { "head-outline-rear", 2 }, + { "foot-left", 3 }, + { "foot-right", 3 }, + { "boot-left", 4 }, + { "boot-right", 4 }, + { "pants", 5 }, + { "shirt", 6 }, + { "belt", 7 }, + { "arm-left", 8 }, + { "arm-right", 8 }, + { "shirt-sleeve-left", 9 }, + { "shirt-sleeve-right", 9 }, + { "hand-left", 10 }, + { "hand-right", 10 }, + { "glove-left", 11 }, + { "glove-right", 11 }, + { "scarf", 12 }, + { "backpack", 13 }, + { "hair", 14 }, + { "hat-outline", 15 }, + { "hat", 16 }, + { "item-in-backpack", 17 }}}, + { "player_equipping_left", new Dictionary { + { "item-in-backpack", 0 }, + { "backpack", 1 }, + { "shirt-sleeve-right", 2 }, + { "foot-right", 3 }, + { "boot-right", 4 }, + { "arm-right", 5 }, + { "hand-right", 5 }, + { "glove-right", 6 }, + { "foot-left", 7 }, + { "body", 8 }, + { "shirt", 9 }, + { "head", 10 }, + { "head-outline-rear", 10 }, + { "boot-left", 11 }, + { "pants", 12 }, + { "belt", 13 }, + { "hair", 14 }, + { "scarf", 15 }, + { "hat", 16 }, + { "hat-outline", 16 }, + { "item-in-hand", 17 }, + { "arm-left", 18 }, + { "hand-left", 18 }, + { "shirt-sleeve-left", 19 }, + { "glove-left", 19 }}}, + { "player_unequipping_left", new Dictionary { + { "item-in-backpack", 0 }, + { "backpack", 1 }, + { "shirt-sleeve-right", 2 }, + { "foot-right", 3 }, + { "boot-right", 4 }, + { "arm-right", 5 }, + { "hand-right", 5 }, + { "glove-right", 6 }, + { "foot-left", 7 }, + { "body", 8 }, + { "shirt", 9 }, + { "head", 10 }, + { "head-outline-rear", 10 }, + { "boot-left", 11 }, + { "pants", 12 }, + { "belt", 13 }, + { "hair", 14 }, + { "scarf", 15 }, + { "hat", 16 }, + { "hat-outline", 16 }, + { "item-in-hand", 17 }, + { "arm-left", 18 }, + { "hand-left", 18 }, + { "shirt-sleeve-left", 19 }, + { "glove-left", 19 }}}, + { "player_equipping_back", new Dictionary { + { "item-in-hand", 0 }, + { "body", 1 }, + { "head", 2 }, + { "head-outline-rear", 2 }, + { "foot-left", 3 }, + { "foot-right", 3 }, + { "boot-left", 4 }, + { "boot-right", 4 }, + { "pants", 5 }, + { "shirt", 6 }, + { "belt", 7 }, + { "arm-left", 8 }, + { "shirt-sleeve-left", 9 }, + { "hand-left", 10 }, + { "glove-left", 11 }, + { "scarf", 12 }, + { "backpack", 13 }, + { "hair", 14 }, + { "hat-outline", 15 }, + { "hat", 16 }, + { "item-in-backpack", 17 }, + { "arm-right", 18 }, + { "shirt-sleeve-right", 19 }, + { "hand-right", 20 }, + { "glove-right", 21 }}}, + { "player_unequipping_back", new Dictionary { + { "item-in-hand", 0 }, + { "body", 1 }, + { "head", 2 }, + { "head-outline-rear", 2 }, + { "foot-left", 3 }, + { "foot-right", 3 }, + { "boot-left", 4 }, + { "boot-right", 4 }, + { "pants", 5 }, + { "shirt", 6 }, + { "belt", 7 }, + { "arm-left", 8 }, + { "shirt-sleeve-left", 9 }, + { "hand-left", 10 }, + { "glove-left", 11 }, + { "scarf", 12 }, + { "backpack", 13 }, + { "hair", 14 }, + { "hat-outline", 15 }, + { "hat", 16 }, + { "item-in-backpack", 17 }, + { "arm-right", 18 }, + { "shirt-sleeve-right", 19 }, + { "hand-right", 20 }, + { "glove-right", 21 }}}, + { "player_walking_left", new Dictionary { + { "item-in-backpack", 0 }, + { "backpack", 1 }, + { "shirt-sleeve-right", 2 }, + { "foot-right", 3 }, + { "boot-right", 4 }, + { "arm-right", 5 }, + { "hand-right", 5 }, + { "glove-right", 6 }, + { "foot-left", 7 }, + { "body", 8 }, + { "shirt", 9 }, + { "head", 10 }, + { "head-outline-rear", 10 }, + { "boot-left", 11 }, + { "pants", 12 }, + { "belt", 13 }, + { "hair", 14 }, + { "scarf", 15 }, + { "hat", 16 }, + { "hat-outline", 16 }, + { "item-in-hand", 17 }, + { "arm-left", 18 }, + { "hand-left", 18 }, + { "shirt-sleeve-left", 19 }, + { "glove-left", 19 }}}, + { "player_running_left", new Dictionary { + { "item-in-backpack", 0 }, + { "backpack", 1 }, + { "shirt-sleeve-right", 2 }, + { "foot-right", 3 }, + { "boot-right", 4 }, + { "arm-right", 5 }, + { "hand-right", 5 }, + { "glove-right", 6 }, + { "foot-left", 7 }, + { "body", 8 }, + { "shirt", 9 }, + { "head", 10 }, + { "head-outline-rear", 10 }, + { "boot-left", 11 }, + { "pants", 12 }, + { "belt", 13 }, + { "hair", 14 }, + { "scarf", 15 }, + { "hat", 16 }, + { "hat-outline", 16 }, + { "item-in-hand", 17 }, + { "arm-left", 18 }, + { "hand-left", 18 }, + { "shirt-sleeve-left", 19 }, + { "glove-left", 19 }}}, + { "player_attacking", new Dictionary { + { "item-in-backpack", 0 }, + { "backpack", 1 }, + { "shirt-sleeve-right", 2 }, + { "foot-right", 3 }, + { "boot-right", 4 }, + { "arm-right", 5 }, + { "hand-right", 5 }, + { "glove-right", 6 }, + { "foot-left", 7 }, + { "body", 8 }, + { "shirt", 9 }, + { "head", 10 }, + { "head-outline-rear", 10 }, + { "boot-left", 11 }, + { "pants", 12 }, + { "belt", 13 }, + { "hair", 14 }, + { "scarf", 15 }, + { "hat", 16 }, + { "hat-outline", 16 }, + { "item-in-hand", 17 }, + { "arm-left", 18 }, + { "hand-left", 18 }, + { "shirt-sleeve-left", 19 }, + { "glove-left", 19 }}}, + { "player_climbing_up", new Dictionary { + { "item-in-hand", 0 }, + { "body", 1 }, + { "head", 2 }, + { "head-outline-rear", 2 }, + { "foot-left", 3 }, + { "foot-right", 3 }, + { "boot-left", 4 }, + { "boot-right", 4 }, + { "pants", 5 }, + { "shirt", 6 }, + { "belt", 7 }, + { "arm-left", 8 }, + { "arm-right", 8 }, + { "shirt-sleeve-left", 9 }, + { "shirt-sleeve-right", 9 }, + { "hand-left", 10 }, + { "hand-right", 10 }, + { "glove-left", 11 }, + { "glove-right", 11 }, + { "scarf", 12 }, + { "backpack", 13 }, + { "hair", 14 }, + { "hat-outline", 15 }, + { "hat", 16 }, + { "item-in-backpack", 17 }}} + }; + // @formatter:on + private enum AnimationStatus + { + Started, + Finished, + Unknown + } + + private enum ClothingClickMode + { + Add, + Remove + } + public override void _Ready() { // ReSharper disable once ExplicitCallerInfoArgument _log = new Log (Name); + _rng.Randomize(); + _weapon = new Weapon (this); _camera = GetNode ("Camera2D"); _rayChest = GetNode ("Chest"); _rayFeet = GetNode ("Feet"); @@ -166,6 +502,51 @@ public override void _Ready() _climbingPrepTimer = GetNode ("ClimbingReadyTimer"); _energyMeterReplenishRatePerUnit = (float)EnergyMeterReplenishTimeSeconds / EnergyMeterUnits; _energyMeterDepletionRatePerUnit = (float)EnergyMeterDepletionTimeSeconds / EnergyMeterUnits; + _shirtSprite = GetNode ("Sprites/shirt"); + _scarfSprite = GetNode ("Sprites/scarf"); + _pantsSprite = GetNode ("Sprites/pants"); + _itemInHandSprite = GetNode ("Sprites/item-in-hand"); + _itemInBackpackSprite = GetNode ("Sprites/item-in-backpack"); + _headSprite = GetNode ("Sprites/head"); + _headOutlineRearSprite = GetNode ("Sprites/head-outline-rear"); + _hatSprite = GetNode ("Sprites/hat"); + _hatOutlineSprite = GetNode ("Sprites/hat-outline"); + _handRightSprite = GetNode ("Sprites/hand-right"); + _handLeftSprite = GetNode ("Sprites/hand-left"); + _hairSprite = GetNode ("Sprites/hair"); + _gloveLeftSprite = GetNode ("Sprites/glove-left"); + _gloveRightSprite = GetNode ("Sprites/glove-right"); + _footRightSprite = GetNode ("Sprites/foot-right"); + _footLeftSprite = GetNode ("Sprites/foot-left"); + _bootRightSprite = GetNode ("Sprites/boot-right"); + _bootLeftSprite = GetNode ("Sprites/boot-left"); + _bodySprite = GetNode ("Sprites/body"); + _beltSprite = GetNode ("Sprites/belt"); + _shirtSleeveLeftSprite = GetNode ("Sprites/shirt-sleeve-left"); + _shirtSleeveRightSprite = GetNode ("Sprites/shirt-sleeve-right"); + _armLeftSprite = GetNode ("Sprites/arm-left"); + _armRightSprite = GetNode ("Sprites/arm-right"); + _backpackSprite = GetNode ("Sprites/backpack"); + + _clothes = new List + { + _gloveLeftSprite, + _gloveRightSprite, + _scarfSprite, + _hatSprite, + _backpackSprite, + _beltSprite, + _shirtSprite, + _shirtSleeveLeftSprite, + _shirtSleeveRightSprite, + _bootLeftSprite, + _pantsSprite, + _bootRightSprite, + _itemInBackpackSprite, + }; + + _animationPlayer = GetNode ("Sprites/AnimationPlayer1"); + _animationPlayer.Play (IdleLeftAnimation); _sprite.Animation = IdleLeftAnimation; _sprite.Play(); InitializeStateMachine(); @@ -175,6 +556,7 @@ public override void _Ready() public override void _PhysicsProcess (float delta) { _stateMachine.Update(); + _weapon.Update (delta); HorizontalVelocity(); VerticalVelocity(); Animations(); @@ -186,13 +568,13 @@ public override void _PhysicsProcess (float delta) PrintLine (DumpState()); Print(); - if (_stateMachine.Is (State.ClimbingUp) && IsDepletingEnergy() && + if ((_stateMachine.Is (State.ClimbingUp) || _stateMachine.Is (State.ClimbingDown)) && IsDepletingEnergy() && !Mathf.IsEqualApprox (_energyTimer.WaitTime, _energyMeterDepletionRatePerUnit)) { _energyTimer.Start (_energyMeterDepletionRatePerUnit); } - if (_stateMachine.Is (State.ClimbingUp) && IsReplenishingEnergy() && + if ((_stateMachine.Is (State.ClimbingUp) || _stateMachine.Is (State.ClimbingDown)) && IsReplenishingEnergy() && !Mathf.IsEqualApprox (_energyTimer.WaitTime, _energyMeterReplenishRatePerUnit)) { _energyTimer.Start (_energyMeterReplenishRatePerUnit); @@ -204,6 +586,7 @@ public override void _UnhandledInput (InputEvent @event) if (IsReleased (Input.Text, @event)) _label.Visible = !_label.Visible; if (IsReleased (Input.Respawn, @event)) Respawn(); if (IsDownArrowPressed()) CheckDropDownThrough(); + if (WasMouseLeftClicked (@event)) UpdateClothing(); } // ReSharper disable once UnusedMember.Global @@ -278,6 +661,56 @@ public void _OnPlayerAreaColliderBodyExited (Node body) if (_stateMachine.Is (State.ReadingSign)) _stateMachine.To (State.Idle); } + // ReSharper disable once UnusedMember.Global + public void _OnAnimationStarted (string animationName) + { + foreach (var (name, zIndex) in SpriteZIndices[animationName]) GetNode ("Sprites/" + name).ZIndex = zIndex; + + switch (animationName) + { + case "player_equipping_left": + case "player_equipping_back": + { + _weapon.OnEquipAnimationStarted(); + + break; + } + case "player_unequipping_left": + case "player_unequipping_back": + { + _weapon.OnUnequipAnimationStarted(); + + break; + } + } + + UpdateSecondaryClothing (animationName, AnimationStatus.Started); + } + + // ReSharper disable once UnusedMember.Global + public void _OnAnimationFinished (string animationName) + { + switch (animationName) + { + case "player_equipping_left": + case "player_equipping_back": + { + _weapon.OnEquipAnimationFinished(); + + break; + } + case "player_unequipping_left": + case "player_unequipping_back": + { + _weapon.OnUnequipAnimationFinished(); + + break; + } + } + + UpdateSecondaryClothing (animationName, AnimationStatus.Finished); + } + private void CheckDropDownThrough() { for (var i = 0; i < GetSlideCount(); ++i) @@ -370,7 +803,6 @@ private void ReadSign() _camera.Zoom = Vector2.One / 10; _readableSign.Position = _camera.GetCameraScreenCenter(); Visible = false; - _sprite.Animation = IdleBackAnimation; } private void StopReadingSign() @@ -391,15 +823,101 @@ private void StopReadingSign() for (var i = 1; i <= 3; ++i) { var mist = _waterfall.GetNode ("Mist " + i); - mist.ZIndex = 1; + mist.ZIndex = 33; mist.Modulate = new Color (Modulate.r, Modulate.g, Modulate.b); } } + private Sprite GetClickedClothingItemForRemoving() => + _clothes.OrderByDescending (clothes => SpriteZIndices[_animationPlayer.CurrentAnimation][clothes.Name]) + .Where (clothing => MouseInSprite (clothing, GetMousePositionInSpriteSpace (clothing))) + .OrderByDescending (clothing => clothing.Visible).FirstOrDefault(); + + private Sprite GetClickedClothingItemForAdding() => + _clothes.OrderBy (clothes => SpriteZIndices[_animationPlayer.CurrentAnimation][clothes.Name]) + .Where (clothing => MouseInSprite (clothing, GetMousePositionInSpriteSpace (clothing))) + .OrderByDescending (clothing => !clothing.Visible).FirstOrDefault(); + + private void UpdateClothing() + { + Sprite clothingItem; + + switch (_clothingClickMode) + { + case ClothingClickMode.Remove: + { + clothingItem = GetClickedClothingItemForRemoving(); + + if (clothingItem == null) return; + + if (!clothingItem.Visible) + { + _clothingClickMode = ClothingClickMode.Add; + clothingItem = GetClickedClothingItemForAdding(); + } + + break; + } + case ClothingClickMode.Add: + { + clothingItem = GetClickedClothingItemForAdding(); + + if (clothingItem == null) return; + + if (clothingItem.Visible) + { + _clothingClickMode = ClothingClickMode.Remove; + clothingItem = GetClickedClothingItemForRemoving(); + } + + break; + } + default: + { + throw new ArgumentOutOfRangeException(); + } + } + + if (clothingItem == null) return; + + ToggleVisibility (clothingItem); + UpdateSecondaryClothing(); + } + + private void UpdateSecondaryClothing (string animationName = "", AnimationStatus animationStatus = AnimationStatus.Unknown) + { + _shirtSprite.Visible = _clothingClickMode switch + { + ClothingClickMode.Add => _shirtSprite.Visible || _shirtSleeveLeftSprite.Visible || _shirtSleeveRightSprite.Visible, + ClothingClickMode.Remove => _shirtSprite.Visible && _shirtSleeveLeftSprite.Visible && _shirtSleeveRightSprite.Visible, + _ => throw new ArgumentOutOfRangeException() + }; + + _itemInBackpackSprite.Visible = _clothingClickMode switch + { + ClothingClickMode.Add => !_itemInHandSprite.Visible && (_itemInBackpackSprite.Visible || _backpackSprite.Visible), + ClothingClickMode.Remove => _itemInBackpackSprite.Visible && _backpackSprite.Visible, + _ => throw new ArgumentOutOfRangeException() + }; + + _backpackSprite.Visible = _backpackSprite.Visible || _itemInBackpackSprite.Visible; + _shirtSleeveLeftSprite.Visible = _shirtSprite.Visible; + _shirtSleeveRightSprite.Visible = _shirtSprite.Visible; + _armLeftSprite.Visible = !_shirtSleeveLeftSprite.Visible; + _armRightSprite.Visible = !_shirtSleeveRightSprite.Visible; + _handLeftSprite.Visible = !_gloveLeftSprite.Visible; + _handRightSprite.Visible = !_gloveRightSprite.Visible; + _footLeftSprite.Visible = !_bootLeftSprite.Visible; + _footRightSprite.Visible = !_bootRightSprite.Visible; + _hatOutlineSprite.Visible = _hatSprite.Visible; + _hairSprite.Visible = !_hatSprite.Visible; + } + private void Respawn() { _stateMachine.Reset (IStateMachine .ResetOption.ExecuteTransitionActions); GlobalPosition = new Vector2 (952, -4032); + _animationPlayer.Play (IdleLeftAnimation); _sprite.Animation = IdleLeftAnimation; _justRespawned = true; } @@ -410,7 +928,7 @@ private void Respawn() private string GetReadableSignName() => GetReadableSignName (GetIntersectingTileCell (_area, _sprite.Animation, _signsTileMap)); private static string GetReadableSignName (Vector2 tileSignCell) => "Readable Sign (" + tileSignCell.x + ", " + tileSignCell.y + ")"; private Sprite GetReadableSign (string name) => _signsTileMap?.GetNode ("../" + name); - private bool IsSpeedClimbing() => _stateMachine.Is (State.ClimbingUp) && IsEnergyKeyPressed(); + private bool IsSpeedClimbing() => (_stateMachine.Is (State.ClimbingUp) || _stateMachine.Is (State.ClimbingDown)) && IsEnergyKeyPressed(); private static int GetClimbingSpeedBoost() => IsEnergyKeyPressed() ? 2 : 1; private bool IsDepletingEnergy() => _energy > 0 && IsEnergyKeyPressed(); private bool JustDepletedAllEnergy() => _energy == 0 && IsEnergyKeyPressed(); @@ -501,8 +1019,8 @@ private void VerticalVelocity() // (Holding down jump continuously allows gravity to take over.) // @formatter:off if (_stateMachine.Is (State.Jumping) && WasJumpKeyReleased() && IsMovingUp()) _velocity.y = 0.0f; - if (_stateMachine.Is (State.ClimbingUp)) _velocity.y = _sprite.Frame is 3 or 8 ? -VerticalClimbingSpeed * GetClimbingSpeedBoost() : 0.0f; - if (_stateMachine.Is (State.ClimbingDown)) _velocity.y = _sprite.Frame is 3 or 8 ? VerticalClimbingSpeed * GetClimbingSpeedBoost() : 0.0f; + if (_stateMachine.Is (State.ClimbingUp)) _velocity.y = AreAlmostEqual (_animationPlayer.CurrentAnimationPosition, 4 * 0.2f, 0.1f) || AreAlmostEqual (_animationPlayer.CurrentAnimationPosition, 9 * 0.2f, 0.1f) ? -VerticalClimbingSpeed * GetClimbingSpeedBoost() : 0.0f; + if (_stateMachine.Is (State.ClimbingDown)) _velocity.y = AreAlmostEqual (_animationPlayer.CurrentAnimationPosition, 6 * 0.2f, 0.1f) || AreAlmostEqual (_animationPlayer.CurrentAnimationPosition, 1 * 0.2f, 0.1f) ? VerticalClimbingSpeed * GetClimbingSpeedBoost() : 0.0f; if (_stateMachine.Is (State.Traversing)) _velocity.y = 0.0f; if (_stateMachine.Is (State.CliffHanging)) _velocity.y = 0.0f; // @formatter:on @@ -604,6 +1122,8 @@ private void Print() private string DumpState() => "\nState: " + _stateMachine.GetState() + + "\nWeapon state: " + _weapon.GetState() + + "\nAnimation: " + _animationPlayer.CurrentAnimation + "\nSeason: " + _cliffs.CurrentSeason + "\nIdle: " + _stateMachine.Is (State.Idle) + "\nWalking: " + _stateMachine.Is (State.Walking) + @@ -658,17 +1178,11 @@ private void InitializeStateMachine() { // @formatter:off _stateMachine = new StateMachine (TransitionTable, InitialState); - _stateMachine.OnTransition (State.Walking, State.Idle, () => _sprite.Animation = IdleLeftAnimation); - _stateMachine.OnTransition (State.Running, State.Idle, () => _sprite.Animation = IdleLeftAnimation); - _stateMachine.OnTransition (State.CliffArresting, State.Idle, () => _sprite.Animation = IdleLeftAnimation); - _stateMachine.OnTransition (State.ClimbingDown, State.Idle, () => _sprite.Animation = IdleLeftAnimation); - _stateMachine.OnTransition (State.FreeFalling, State.Idle, () => _sprite.Animation = IdleLeftAnimation); - _stateMachine.OnTransition (State.ReadingSign, State.Idle, () => _sprite.Animation = IdleLeftAnimation); _stateMachine.OnTransitionFrom (State.ReadingSign, StopReadingSign); _stateMachine.OnTransitionTo (State.ReadingSign, ReadSign); - _stateMachine.OnTransitionFrom (State.ClimbingPrep, () => _climbingPrepTimer.Stop()); _stateMachine.OnTransitionTo (State.Traversing, () => _sprite.Animation = TraversingAnimation); _stateMachine.OnTransitionTo (State.FreeFalling, () => _sprite.Animation = FreeFallingAnimation); + _stateMachine.OnTransitionFrom (State.ClimbingPrep, () => _climbingPrepTimer.Stop()); // @formatter:on _stateMachine.OnTransitionFrom (State.Idle, () => @@ -684,6 +1198,42 @@ private void InitializeStateMachine() _wasRunning = false; }); + _stateMachine.OnTransition (State.ReadingSign, State.Idle, () => + { + _animationPlayer.Play (IdleLeftAnimation); + _sprite.Animation = IdleLeftAnimation; + }); + + _stateMachine.OnTransition (State.Walking, State.Idle, () => + { + _animationPlayer.Play (IdleLeftAnimation); + _sprite.Animation = IdleLeftAnimation; + }); + + _stateMachine.OnTransition (State.Running, State.Idle, () => + { + _animationPlayer.Play (IdleLeftAnimation); + _sprite.Animation = IdleLeftAnimation; + }); + + _stateMachine.OnTransition (State.CliffArresting, State.Idle, () => + { + _animationPlayer.Play (IdleLeftAnimation); + _sprite.Animation = IdleLeftAnimation; + }); + + _stateMachine.OnTransition (State.ClimbingDown, State.Idle, () => + { + _animationPlayer.Play (IdleLeftAnimation); + _sprite.Animation = IdleLeftAnimation; + }); + + _stateMachine.OnTransition (State.FreeFalling, State.Idle, () => + { + _animationPlayer.Play (IdleLeftAnimation); + _sprite.Animation = IdleLeftAnimation; + }); + _stateMachine.OnTransitionFrom (State.CliffHanging, () => { if (IsInGroup ("Perchable Parent")) RemoveFromGroup ("Perchable Parent"); @@ -692,19 +1242,23 @@ private void InitializeStateMachine() _stateMachine.OnTransitionTo (State.CliffHanging, () => { + _animationPlayer.Play (CliffHangingAnimation); _sprite.Animation = CliffHangingAnimation; + _weapon.Unequip(); if (!IsInGroup ("Perchable Parent")) AddToGroup ("Perchable Parent"); if (!_sprite.IsInGroup ("Perchable")) _sprite.AddToGroup ("Perchable"); }); _stateMachine.OnTransitionTo (State.Walking, () => { - _sprite.Animation = WalkAnimation; + _animationPlayer.Play (WalkLeftAnimation); + _sprite.Animation = WalkLeftAnimation; _wasRunning = false; }); _stateMachine.OnTransitionTo (State.Jumping, () => { + _animationPlayer.Play (IdleLeftAnimation); _sprite.Animation = IdleLeftAnimation; _velocity.y -= JumpPower; }); @@ -719,6 +1273,7 @@ private void InitializeStateMachine() _stateMachine.OnTransitionTo (State.CliffArresting, () => { + _weapon.Unequip(); _sprite.Animation = CliffArrestingAnimation; if (_audio.Playing) return; @@ -729,13 +1284,16 @@ private void InitializeStateMachine() _stateMachine.OnTransition (State.ClimbingPrep, State.Idle, () => { + _animationPlayer.Play (IdleLeftAnimation); _sprite.Animation = IdleLeftAnimation; FlipHorizontally (_wasFlippedHorizontally); }); _stateMachine.OnTransitionTo (State.ClimbingPrep, () => { + _animationPlayer.Play (ClimbingPrepAnimation); _sprite.Animation = ClimbingPrepAnimation; + _weapon.Unequip(); _wasFlippedHorizontally = _isFlippedHorizontally; FlipHorizontally (false); _climbingPrepTimer.Start(); @@ -754,7 +1312,8 @@ private void InitializeStateMachine() _stateMachine.OnTransitionTo (State.Running, () => { - _sprite.Animation = RunAnimation; + _animationPlayer.Play (RunLeftAnimation); + _sprite.Animation = RunLeftAnimation; _energyTimer.Start (_energyMeterDepletionRatePerUnit); _wasRunning = true; }); @@ -764,15 +1323,30 @@ private void InitializeStateMachine() if (_energy < MaxEnergy) _energyTimer.Start (_energyMeterReplenishRatePerUnit); }); + _stateMachine.OnTransitionFrom (State.ClimbingDown, () => + { + if (_energy < MaxEnergy) _energyTimer.Start (_energyMeterReplenishRatePerUnit); + }); + _stateMachine.OnTransitionTo (State.ClimbingUp, () => { + _weapon.Unequip(); + var startFrame = new[] { 1, 6 }[_rng.RandiRange (0, 1)]; + var startTime = startFrame * _animationPlayer.GetAnimation (ClimbingUpAnimation).Step; + _animationPlayer.Play (ClimbingUpAnimation); + _animationPlayer.Seek (startTime); _sprite.Animation = ClimbingUpAnimation; FlipHorizontally (false); }); _stateMachine.OnTransitionTo (State.ClimbingDown, () => { - _sprite.Animation = ClimbingDownAnimation; + _weapon.Unequip(); + var startFrame = new[] { 3, 8 }[_rng.RandiRange (0, 1)]; + var startTime = startFrame * _animationPlayer.GetAnimation (ClimbingUpAnimation).Step; + _animationPlayer.PlayBackwards (ClimbingUpAnimation); + _animationPlayer.Seek (startTime); + _sprite.Animation = ClimbingUpAnimation; FlipHorizontally (false); }); diff --git a/scripts/Tools.cs b/scripts/Tools.cs index 91b3b89..6ee21f9 100644 --- a/scripts/Tools.cs +++ b/scripts/Tools.cs @@ -20,7 +20,8 @@ public enum Input Left, Right, Jump, - Energy + Energy, + Attack } private static readonly Dictionary Inputs = new() @@ -28,6 +29,7 @@ public enum Input { Input.Horizontal, new[] { "move_left", "move_right" } }, { Input.Vertical, new[] { "move_up", "move_down" } }, { Input.Item, new[] { "use_item" } }, + { Input.Attack, new[] { "attack" } }, { Input.Text, new[] { "show_text" } }, { Input.Respawn, new[] { "respawn" } }, { Input.Season, new[] { "season" } }, @@ -40,6 +42,8 @@ public enum Input { Input.Energy, new[] { "energy" } } }; + // @formatter:off + public delegate bool Condition(); public delegate void DrawPrimitive (Vector2[] points, Color[] colors, Vector2[] uvs); public delegate void DrawRect (Rect2 rect, Color color, bool filled); public delegate Transform GetLocalTransform(); @@ -49,6 +53,7 @@ public enum Input public static bool IsPressed (Input i, InputEvent e) => e is InputEventKey k && Inputs[i].Any (x => k.IsActionPressed (x)); public static bool IsOneActiveOf (Input i) => Inputs[i].Where (Godot.Input.IsActionPressed).Take (2).Count() == 1; public static bool IsAnyActiveOf (Input i) => Inputs[i].Any (Godot.Input.IsActionPressed); + public static bool WasMouseLeftClicked (InputEvent e) => e is InputEventMouseButton { ButtonIndex: (int)ButtonList.Left, Pressed: true }; public static bool IsLeftArrowPressed() => Godot.Input.IsActionPressed (Inputs[Input.Left][0]); public static bool WasLeftArrowPressedOnce() => Godot.Input.IsActionJustPressed (Inputs[Input.Left][0]); public static bool IsRightArrowPressed() => Godot.Input.IsActionPressed (Inputs[Input.Right][0]); @@ -65,8 +70,12 @@ public enum Input public static bool IsEveryVerticalArrowPressed() => IsUpArrowPressed() && IsDownArrowPressed(); public static bool IsAnyArrowKeyPressed() => IsAnyHorizontalArrowPressed() || IsAnyVerticalArrowPressed(); public static bool IsItemKeyPressed() => Godot.Input.IsActionPressed (Inputs[Input.Item][0]); - public static bool IsEnergyKeyPressed() => Godot.Input.IsActionPressed (Inputs[Input.Energy][0]); + public static bool WasAttackKeyPressedOnce() => Godot.Input.IsActionJustPressed (Inputs[Input.Attack][0]); + public static bool IsAttackKeyPressed() => Godot.Input.IsActionPressed (Inputs[Input.Attack][0]); + public static bool WasAttackKeyReleased() => Godot.Input.IsActionJustReleased (Inputs[Input.Attack][0]); public static bool WasItemKeyReleased() => Godot.Input.IsActionJustReleased (Inputs[Input.Item][0]); + public static bool WasItemKeyPressedOnce() => Godot.Input.IsActionJustPressed (Inputs[Input.Item][0]); + public static bool IsEnergyKeyPressed() => Godot.Input.IsActionPressed (Inputs[Input.Energy][0]); public static bool WasJumpKeyPressed() => Godot.Input.IsActionJustPressed (Inputs[Input.Jump][0]); public static bool WasJumpKeyReleased() => Godot.Input.IsActionJustReleased (Inputs[Input.Jump][0]); public static float SafelyClampMin (float f, float min) => IsSafelyLessThan (f, min) ? min : f; @@ -74,6 +83,7 @@ public enum Input public static float SafelyClamp (float f, float min, float max) => SafelyClampMin (SafelyClampMax (f, max), min); public static bool IsSafelyLessThan (float f1, float f2) => f1 < f2 && !Mathf.IsEqualApprox (f1, f2); public static bool IsSafelyGreaterThan (float f1, float f2) => f1 > f2 && !Mathf.IsEqualApprox (f1, f2); + // @formatter:on public static bool IsAnyArrowKeyPressedExcept (Input arrow) { @@ -255,8 +265,27 @@ public static Vector2 GetIntersectingTileCell (Area2D area, CollisionShape2D col public static Vector2 GetIntersectingTileCell (Area2D area, string colliderName, TileMap t) => GetIntersectingTileCell (area, area.GetNode (colliderName), t); public static Vector2 GetTileCellGlobalPosition (Vector2 cell, TileMap t) => t.ToGlobal (t.MapToWorld (cell)); public static Vector2 GetIntersectingTileCellGlobalPosition (Area2D area, CollisionShape2D collider, TileMap t) => GetTileCellGlobalPosition (GetIntersectingTileCell (area, collider, t), t); + public static bool MouseInSprite (Sprite sprite, Vector2 spriteLocalMousePos) => sprite.GetRect().HasPoint (spriteLocalMousePos) && sprite.IsPixelOpaque (spriteLocalMousePos); + public static Vector2 GetMousePositionInSpriteSpace (Sprite sprite) => sprite.GetLocalMousePosition(); + public static void ToggleVisibility (CanvasItem sprite) => sprite.Visible = !sprite.Visible; + public static void ToggleVisibility (CanvasItem sprite, Condition condition) => sprite.Visible = condition() && !sprite.Visible; // @formatter:on + public static async void PlaySyncedAnimation (string animationName, AnimationPlayer playOn, AnimationPlayer syncTo, float delta) + { + await playOn.ToSignal (playOn.GetTree().CreateTimer (NextAnimationFrameDelaySecs (syncTo) - delta, false), "timeout"); + playOn.Play (animationName); + } + + public static float NextAnimationFrameDelaySecs (AnimationPlayer player) => + player.CurrentAnimationPosition < player.CurrentAnimationLength + ? RoundUpToNextMultiple (player.CurrentAnimationPosition, player.GetAnimation (player.CurrentAnimation).Step) - + player.CurrentAnimationPosition + : 0; + + public static float RoundUpToNextMultiple (float value, float multiple) => + (float)Math.Ceiling ((decimal)value / (decimal)multiple) * multiple; + public static string ToString (IEnumerable e, string sep = ", ", string prepend = "", string append = "", Func f = null) { diff --git a/scripts/Weapon.cs b/scripts/Weapon.cs new file mode 100644 index 0000000..b4d5e29 --- /dev/null +++ b/scripts/Weapon.cs @@ -0,0 +1,123 @@ +using System.Collections.Generic; +using Godot; +using static Tools; + +public class Weapon +{ + public enum State + { + Unequipped, + Equipped, + Attacking + } + + private StateMachine _sm; + private readonly Sprite _backpackSprite; + private readonly Sprite _itemInBackpackSprite; + private readonly AnimationPlayer _playerAnimator1; + private readonly AnimationPlayer _playerAnimator2; + private bool _isUnequipping; + private bool _isEquipping; + private float _delta; + + // @formatter:off + + private static readonly Dictionary TransitionTable = new() + { + { State.Unequipped, new[] { State.Equipped }}, + { State.Equipped, new[] { State.Attacking, State.Unequipped }}, + { State.Attacking, new[] { State.Equipped }}, + }; + + // @formatter:on + + public Weapon (Node player) + { + _playerAnimator1 = player.GetNode ("Sprites/AnimationPlayer1"); + _playerAnimator2 = player.GetNode ("Sprites/AnimationPlayer2"); + _backpackSprite = player.GetNode ("Sprites/backpack"); + _itemInBackpackSprite = player.GetNode ("Sprites/item-in-backpack"); + InitializeStateMachine(); + } + + // ReSharper disable once MemberCanBeMadeStatic.Global + public void Update (float delta) + { + _delta = delta; + _sm.Update(); + } + + public State GetState() => _sm.GetState(); + public void Unequip() => _sm.ToIf (State.Unequipped, _sm.Is (State.Equipped)); + public void OnEquipAnimationStarted() => _isEquipping = true; + public void OnEquipAnimationFinished() => _isEquipping = false; + public void OnUnequipAnimationStarted() => _isUnequipping = true; + public void OnUnequipAnimationFinished() => _isUnequipping = false; + + private bool ShouldEquip() + { + return WasItemKeyPressedOnce() && _backpackSprite.Visible && _itemInBackpackSprite.Visible && !_isUnequipping && + _playerAnimator1.AssignedAnimation != "player_cliff_hanging" && _playerAnimator1.AssignedAnimation != "player_climbing_up"; + } + + private bool ShouldUnequip() + { + return WasItemKeyPressedOnce() && _backpackSprite.Visible && !_itemInBackpackSprite.Visible && !_isEquipping; + } + + private void StartEquipping() + { + switch (_playerAnimator1.AssignedAnimation) + { + case "player_idle_left": + case "player_walking_left": + case "player_running_left": + { + PlaySyncedAnimation ("player_equipping_left", _playerAnimator2, _playerAnimator1, _delta); + + break; + } + case "player_idle_back": + case "player_cliff_hanging": + case "player_falling": + { + PlaySyncedAnimation ("player_equipping_back", _playerAnimator2, _playerAnimator1, _delta); + + break; + } + } + } + + private void StartUnequipping() + { + switch (_playerAnimator1.AssignedAnimation) + { + case "player_idle_left": + case "player_walking_left": + case "player_running_left": + { + PlaySyncedAnimation ("player_unequipping_left", _playerAnimator2, _playerAnimator1, _delta); + + break; + } + case "player_idle_back": + case "player_cliff_hanging": + { + PlaySyncedAnimation ("player_unequipping_back", _playerAnimator2, _playerAnimator1, _delta); + + break; + } + } + } + + private void InitializeStateMachine() + { + _sm = new StateMachine (TransitionTable, State.Unequipped); + _sm.OnTransition (State.Unequipped, State.Equipped, StartEquipping); + _sm.OnTransition (State.Equipped, State.Unequipped, StartUnequipping); + _sm.AddTrigger (State.Unequipped, State.Equipped, ShouldEquip); + _sm.AddTrigger (State.Equipped, State.Unequipped, ShouldUnequip); + // _sm.AddTrigger (State.Equipped, State.Attacking, WasAttackKeyPressedOnce); + // _sm.AddTrigger (State.Attacking, State.Equipped, IsAttackFinished); + } +} \ No newline at end of file