From 81009436c019bb6ee5585855ec4e95bff808c68b Mon Sep 17 00:00:00 2001 From: D L Date: Sun, 29 Jan 2023 14:46:06 -0800 Subject: [PATCH] update obstacle NPCs (Cirno + Sanae) --- Graphics/Letty.mdp | Bin 10815 -> 11110 bytes Graphics/ObstacleNPC.mdp | Bin 0 -> 9075 bytes Graphics/Units/Freestanding_Cirno.png | Bin 0 -> 2283 bytes Graphics/Units/Freestanding_Cirno.png.import | 35 ++++++++ Graphics/Units/Freestanding_Sanae.png | Bin 0 -> 2458 bytes Graphics/Units/Freestanding_Sanae.png.import | 35 ++++++++ Scenes/DownhillAutoscroller.tscn | 8 +- Scripts/Constants.gd | 75 ++++++++++++------ Scripts/GameScene.gd | 3 +- Units/DownhillAutoscrollerNPC.gd | 10 +++ Units/DownhillAutoscrollerNPC.tscn | 39 --------- Units/DownhillAutoscrollerNPCCirno.tscn | 21 +++++ Units/DownhillAutoscrollerNPCSanae.tscn | 21 +++++ ...cn => DownhillAutoscrollerRivalLetty.tscn} | 21 +++-- ...n => DownhillAutoscrollerRivalMystia.tscn} | 2 +- 15 files changed, 188 insertions(+), 82 deletions(-) create mode 100644 Graphics/ObstacleNPC.mdp create mode 100644 Graphics/Units/Freestanding_Cirno.png create mode 100644 Graphics/Units/Freestanding_Cirno.png.import create mode 100644 Graphics/Units/Freestanding_Sanae.png create mode 100644 Graphics/Units/Freestanding_Sanae.png.import delete mode 100644 Units/DownhillAutoscrollerNPC.tscn create mode 100644 Units/DownhillAutoscrollerNPCCirno.tscn create mode 100644 Units/DownhillAutoscrollerNPCSanae.tscn rename Units/{DownhillAutoscrollerRival2.tscn => DownhillAutoscrollerRivalLetty.tscn} (90%) rename Units/{DownhillAutoscrollerRival.tscn => DownhillAutoscrollerRivalMystia.tscn} (99%) diff --git a/Graphics/Letty.mdp b/Graphics/Letty.mdp index 38b6cd2eb1eda053a6f7296ac3264e9e9af76615..ab4ba7d4294577cbdca85bbe558ed2add2666891 100644 GIT binary patch delta 2399 zcmX|@YgiLk8pnfa#d}1zPt_KpU?0{C(nAc^(Vj|4>>(sMqxA z=d0g4&~SZ5t=EjR(@7*RB5T_8^E+qdfftRwogi#u72A5DLp`38Kkbfbc2#p{+Yi#g)BelOor{Gw@;0q?c6i7m>XQ9?(-`^xTFqjy z4o{t1fG=5vMYEBDW;^B8N`Z#abrqZn9Bjcya62W-M17`Wu$8ZQ&6_Lt3ZE`OK*1X4 z?a~8?+a10x9zEPHimJeuR8$0&SiGyvQe9}1-=;V?w~UB2T-t8};m*F<{X~)NIlLE_ zk~3;jsE@`X9XynDV}Q|h%P}o$kL72b{g{GB z{gE-Xc?G6WF^Vm@y(`0#Y{QySsV`E%GI3y6HNfVxnBtajfyhr3(iFT>N>4#aN3RlL zO$E*k!d!aB((Z&Yb7hc5*Fbsfee4JVs)0XPHr`QX`)Y%WnPwx?%&v&w6Cp-8-iidC z9I`fD>MLASIjU9jQHM1$BJKcolaSEfNHG&PI&z10odV)H;Py6 z5CEnXN$Gi&|JAx`p|6~B_Qzz%K7mizl{+&WdKJ2x6(ScF4tw+a^r?)KDRwcC0BbzV zMGS}3mu$HejQysY-5GofnF!c98=-b^D7`;OC$cE^7WrY&tc2TqgV5u6%REeC60eVc zGTsk1+~ELJ*JG>?F1eww@K}K^MkkhYvse*{x+yZ5JQoj)7XKxRQh0s(d#Xo zL{Mwat_GUXY_q}Xi*e%+4u=I}GGpNM2#D z2Th79bZBdn+HJPMTWk5&Gnq6*!^o1`#XmJv7t+zFLsGXULFZ~#PZNC!k-$}+ejh;V zE>0}R4)@Y{jEj5@p6t>V;|>;xNaJyyfU(xRdo;ubCYObm>R5Kxdqlzd8`ur!rhBg?c{)q zt1*nG-jYC7y&9?~W+r*$z#22$?tYa!o+sz7$`FD%5AIqW%1V_2Kb;-}=^}?_^zvF} z_%$BJ_4e$_Bd!6JP^POy#J_KE5AIe!S22>V0W4Z1Tue*5@c-nl+|Ga;Xl+n376$3e z;0o_^7s*=IW?UW0Vu}@3z6Xh$cWVy@t(K}YU-Z&tB~RpXF;*d~SJ_?05l*bOkRN!=e<}S~5GGM?cPb9%b$n=~A}U5# z;sBQ zLKG=EP*rs~&IHD}?~}0Tn1EqhNOtf(6EIJFJMJA*MRb^1m;R3=Gcae>ARH?>^C;2A zSN42g%W|x2IhIUzdRf>1PnE}HAX}!dgziV^njgJ zXs)c=RdTy+ayX&)05hTw+BClhK}J%or+ti7VhdAo|1G0 zBD|;l)r<6t1Vy^IBjO#;jTp&~XfTT{Kv+Ay*@*+~_{cWm!$4MsL)Zh}revTuEI45E`W~Mg2Xyu?gdOmZ0gD9nS!2bbs z?wEVe-sYrXW&2t(Ol(4Tk0tks$ zw<@BcVDu3Z@dd^W^PCn@{i6VsT2HaGNb%EA#A#K~bxqouBjq}9Pe1Q%~(i*Juj;}aF_n4;&vcxm7`TyC89$tt9&Uoi`wZNX0)0Spu zD1zPspxHVMdN3ke;-S0_J^a|4ZGLVg4EBt$^VPTy)57wPz*fU5BJ$=U-s2bOK@R1p zQSmZztl};ay~_hYgO`#0iTNYNh%J}ng^?Bf7r3N;uTuZvxBKjruVq?(uO1s><*8(6qlLUFq1{xyhT=^%sBBGA)P_CZQV8K zh8W&0CQSGpq49Hg92+tVYu#?r?++N@W*YUcEs+`(p@#*CcL(llTZv5#?lUxL)XV2S!5=0xG1>#~=RN#I=*&tKEI3zl zD%4e;c)Ps7NOkrTp55|u+^j2ok9)_cecYS|q=3iCcl7?5mD50v6B)=d58zAPJbQ4* z8^cKImY)JR0Y>*5gUhF=#?zI@SR55Gd`*aI@}N>MQrPH~l$A5n$NTM%6Y)BqJ8Rao S&Jv6|W3ZvNq2VuQKlm>jAANfO delta 2058 zcmXYxeNaeTSWv+6(x%)Dux&!#tU^S zq9}uQQL!XlFs3Xd?1~T*NJ5JuQzS8oCW84;5Rw?Y=#p@Ud%gGUjob6*`<~~V^PYKr z&%_@6*B=!fDm;E5pGOIDpgYF|k0KcRDD89YdRi^Jhu zXzl{e2Vp;W>7$XuyM|8h=yqDgnLcWfKfIW%mF-Dn;PNq#eNkiZ;MR1d+ExGuDzz|Q z^(^$88$?XK);2-c5=}EWHOY;8fAne=T_?B3F1(m4Y}Gd)bLvqe?F{iE9JR5E85&^a zzjG2f2vr18>pWm=%*?8L2t!k1U31#tyZQJTLKPinceKHD6Sf~{v0ik^bEO}A3AUbi znbcvLNxC32+TwGLw8D~7TNUN8Xh}+$#^tT#E zbY%PCwH)wcB{AqX=DiNMEZAs9qC!063{5kz4zj-6>F3;n;Ozi9jJl6@HPB}_Lnh0M zb6CyOP`}aP(Mt$*tHRbK(nyD)!Khdic-hdiCiA!WJsfcFi3KV&NY-DP43TwORpT0Zu_8jb1)y=C;Xdizeb}+<)2r~Q zq0SQh-f}ijh~NyeC*cZQBM<~@P7NiY95Ah)%;@HLq+$Mc=-@D#N1NTmxDD(Ab*H~e z>*UAAX$ch)6{1WDN);|kPz^?R;&Mm4D~o?I!Vo-DnT^xEx^>{c0dqhd*c;{5pZqqU zN2b5;2-+bI5p5iO*CWtblfM#4L)LYOaEQM*Tx%2k8StkunkfySOy^_tFz)V>BZK6uzz$!d-^J<5@-Zo}7b;Pf_ z7!UUE;~)~E+r4D@TJjBvs7q5|+h}#;GB^F z$%5r8LR;)NVFwi5LGN{V_V?V+m>ho`4uig+ujlH>z`*eq;9T{{4ZeL#}^a)#;u* zItSPKlbV249ID(7&?<%uRvq;vKVW78Ss=jv0CjQZugE5>IvH5XKopI3)CVeRxrlJKPNn7a^;Z&yxD}?XmR#BA`mY0=-q2xNe0N@UnziWge7R2Prz{*kr{+#6k^U1W}`2c^jK_<@ka*VHI3-AwPepxMSqwnveen D6R*n> diff --git a/Graphics/ObstacleNPC.mdp b/Graphics/ObstacleNPC.mdp new file mode 100644 index 0000000000000000000000000000000000000000..9ca7129eab7dfd56ef5181f8ede114696db54c05 GIT binary patch literal 9075 zcmds63se)=)`p7}Z56ay9~BddTH7i{K~#hglonc1Db=DPg1n6(1PJc{1J#O8QdeA`|Q2X zp6}adpJ5<}5o3ZwNoJ;Y$C zO~%`y#GyAS<2QduGMN&F`iQ2)kxf$sN5$+5o?tPNNF}22{}ydb93?(HG=9S?m5FDH zqM(WK504l{jENa%ablbtOeMXhzda=eb&LiW8AnNo!Q0udva= zjEkoH5k8K8JwC7M;$KmF&|Tr*=g+p_=wQ?S_uBHa`VZl8#l0%p=&p-CbpOur($a=3B9Nk@+26}csN^( zp|Na~V0AT5+>m1N&vU%4HynT<{f6c_F)Q@h)CJwce7#YFEz8|yZg@nveRZ{3%x=_$ z$T~(Zg=5^Yu!k#AflV7$C3LoCu?+G;%ck|PM*vaG3{2OCRA|7xTpC75`u56JFvCZ# zY3!*ZFNOPxBeKMkA9w-1xVE#J)k)*0=_z?F{dE{+K$A^of}Tf+l>~v?Khh{{Ee!K{ zEjl?n!D_h>aIAyi##Zy9LPX;eP^(i@gghUE;-r+o^KbjPmLgSUJ|t_n*E`tAkutHS z5wl3o?k&jEN=TeGeB{S?&(s37@Y#@>2|XvWswvw+ZKC%cUdA33e^1>eoi~j~;BEx^ zrIqoN`YumCM2{CTq}Ri7?1baF2q|!GD_s7x++^JSvhfC>bfmI;T4*U%oHLzl=cZkz zh&vxa6(wW4cw<^MyGJbG3HR*a+B}%>n$LqD?urp45Zm@;#Dm>bci`#>OBpv!9`{S2 zM6RQOA`1kco`v99KHfU|AX|+<+!P76?;-j;rKJYE0h`h*l+~8@>eOt_O}%(<+*Ah9 z2S^4AzUC{Sg+IN3TJwAjl(91zWSzYM&YyoRVZplfripU8Ag)3@zaw2X_M^O**6wL~ z)?zi=OQ$m?mG|QC*mVnj4Jb7pu-No^wXt5qg8SZzEH$|;)-z#4f#eeyQT8~&LNG!~ zEFom8rRpcco7G@M{9Q%`RMcIJK1Q0XXKqP*joycT+AZ%=E$++-ga={tOTQ`BF^a_e zT3o80i?`nC*D{nj&K8M_Pymux#}4$1W(Tb=y@QA8$#S#EV$-y{^gi60M0zE3?-3h0 zmtduC{U#rw^14s8d#GZtridfdj6jj#Arx)(IFMHcT{1dL5EfjMmW%TT zXo}tWhKBO=z`?RQ725$0Clbb5gnhdrC2r(&@~w~1#CzOe^@NIdm)Xqgrg2y0ssy{Y zCsV{YJN)Jn4!xc|6>GSJ>I(E+W%ITZ9u@S&u9Ay%kXeNaL`|Epa_ecQX zbFG$hJ}UI7H0**Qy@barq2+8wDJ#mCN4hQj+`uG;mVqkJs9w*m=nN&oiS~>y9=Ld! z5@1KAG9PaUq}nc(vBN&qNyyX+W(R(Jh}Q>;bA&2aTaCiUt+Dd!)4Z`lFRx4aQpW=;kC~R=A_GptUvJr!rtHY( z{g~L8#!3TzsaqwaWQi!Zuel(lZHDVNsG@7FJW|7Oi^*EVf?rxaEy13ThADleN zM4hKrNF{sgcNMbqOiB8H(=RcTeqH}g=K-yf$mj-qr%9>VH71CDI z(q@k4{^7_l6{%O#Iu&kqQ(G&K^A)8mZTmE;nYI`@92%yeX$WyvgN%FQfR@qVX5}E7 zr;gVRH(F+1FHY+F$pVd9%1G7@27;K)zp{~_mMbJen@k52YwdifW%&a_Il3T&BXo2* zblX(s(Co~f4|9K7Lens5cBU#!@+@$l$&hb#xq!e_Yq4p#<7{yHURnX4*g9 zqqm%cufSA5XX&O#v2gNC405!LtAVweB;1^p3?%C_{xjM8t7dKD@CdHCD0O_d-31F% zmhZJf38TLRhM)}A3b7?9E)n9 z+Lx;4WM%197zhbBEWVm`7;XYF7CT6c-UXyoqKM`lqr>JF7%5F*%=s z89TNV>(oI8MH8a7j_n+3(^zxAK&9S5Xp~y>I%z$E&bU{Rd1sgS0hNeRDJ??sLN9PW zvEPdl6@X5$2`*`?Zq4F{{+R1*Mnz}&xjS3zze3YZ4d7br4boeB>MqmPS;H1J@o&dU zu&>*upU%s$`0A%$q^4Jud#3jkw0(+RP3N1o-~K>*Q^N^;)0CP2V!Ip_qOUL=SErhN zU^eNNf>3iz(R}U3B#&E#2ku)Z8mZHZGz$|ASbZ_!-yKjPLe|$vgcqTL|DKydeZlGR z)@=}QVz$+oc(k2(Jv;L^Gc(iqrfr-@(;t#=YB-_)Ivx+Aag6gwwpcl1(uN;j+Vxx{ zeIJ^AXwq`ZZS$XiJ(ezVm0AQ|Ni%$$yI_Sd<7oe(mKsJ#?XwYC>CWhze@gt^8L4Eu zRR~LE=}XULUpZ%YW7eAO2NQoebo9a2CtuFwPhIfIMweiZ&-N{ix-><0aQb`a3jbdz z^^d7wCm5pxK_`I_2B-czp6Z|Icve^h(xh%=MLk?2Bq~zd;+p#fK398U#+GS87@xlP1-HbEuj3&YHoIb(=ysf0IwZpZp2U>jCiEP<#n+B4;V@vT?lWb|q}-?WYAfazn& zn;K5&zb*%YOtGAio!O8hS~J5;=Uv-Bbwj3&D$C4p$aRtRl<%nWZo<%#(r(Ka)jZeW zzokC9F6)c9{_)B4%XgR`j9h+#d^LaQ;ss@W((7Uh9UDeUcL@BT57$}6B4awHY_sx; z9%klI`SKO1$su!8G8tu>Smaec_s zykZ}!^egA!x9aY?tJn9fr+TN|+UYq)cdhA(tY*qf%dRDCjxe$_^cDQn=aYbHo`fK6 zT>9ZKArGJ8oZnnCstYj#)cY^QeF5ywbbBj5T}P+nMApo{7HQ8%>~}`4cQbEvrpJe0 zOGvGuok&62*nJVA4dg|W2fnZ1)c5cj@~@H$7I@rlice(;Yp;biIL_T3y5Wu$LO&<& zX$#a{p10CaA!jV}En{BOG)>Vx*NB9SX#1n)M*3&^HQPkrrmX*2`aF6%Gi?*dtv#i@-)kn|Cj=wmDGw?7XHh;mVT9=i#H&flSd!x3)Uw7&k}R<pNE?Xl%0p~-P zKWmuR1d`*~5&IGUKJETBTy`Q87SvwK1Y=J!I^C*|r{jWlD!vza*S9R&zwoOo31$dK zG}h~&CCN2)fixacK{H}G%Yg&q*bb#+3`d_sS(piwPwM(qJ5@m~h8jN8p{RI3Ch9y~ zW*FLZTnqdRz=sYoyPx>?2JI;JQ+1A{w6OyXyL2?8ch1gUpB>>BAR=aWucMe7eh6Zc zwOkn5c3-axIol7Fsa$lUj7_MyUylfZx$GYQK@8Z|Eg~GvI&Sc5lHk7VseELFF;Iva-vVi=X zIQlaB+{O@2J>I%lY%bd)x|5mQB@Zt!Ht3%)3MqH%mq>)i%wq#E-phECs-XMkS8^}_ zFRy|YTGZVaR>%)T7UxSXz>$SjZGw`J*Okl-6q5?2 zM;cu&^g{{QJ*Q_PvYYh%u13Zzmm->6cLhy4&Ye1PZB11W>4Z4tE^t0FV4>)%_iN;U z(5s!Gs}>8y%`F<=z`$t>NmQZXNETHzM(NM`Xvb3! zd&#*y2QG)4Ex!e-2QEzdFxM$lldO{uIteklYrREDUEt)-8A(>}cjT8JGb5E7C0QD#4N z!J<*Z+9WaUhfqRXelJB6+dQ`%VivU|%U*TtfHv^Ed*l~Egc^PFGxVDwca0Ko7+AUg zGOwpbK8XJ^^uX1pp!OD^&O&j}Tt1ObS%5IT?y}Q3a}nmZ;=X~5 zo}j#3$gmK)-BfkhRRs9S8Du$=ywnQAXr0HrV@ACtn$-zcr8m4E+$qjZ594X8R34+~ zze)e4WnNcdPZeTQ$7}!M$*)GwqV?8vzG)k;{iZL$Z)!N9|GL_LXrlJl=PdkehCBS$ z!Gl|;ocZ2hx%{BVyBoi=@SZc(oMFCrF=FxVyYDXMq&3-{TxYkz%4iZH_Z=tx~ zD6nY)^IU;_(Qc!cTuGSBO=m((C>x|4>CufcB?hAIB*et6)2}alZ$IFd_d`bv0R>rr zysH^nUAiqU=q2uX1}#^wh{eM8wB^Ojw)b{EXGg49o5ZGvsGVxxWg#rx@M3k(Rk;+5 zAq>Ok7s&mkQ7-z_fD=oQMPhzMVl>>6_|WrST?g;QrgDj}E54l_ZSmD$e=+m^kAq5_ zykt*J0?u~?duNaox1>vp?OctBOPnmr!R)SdCg|WjKl)f-!{9zd60DvyB1Om}5G2YE zn2xh7H+&CK&eY^VaQCU%q`-o*r~U5gl=gejeZ?_cW8EEpc}0>D*IdB8EVEFj`gAxd z#3@THb7!{Q9~cYi#4dGrEG}`-6oqjjl_$H%1>h zyVmkyhCOn5OeRs{1T9aPA6mblbm~h7bm#6uk0&p-PPJ~`=x&?xL$rn|Q(gq-b}Ji) z#4Jl&YUU^-`yM+mPpU&jT8dD03#6SgO4sB1Gf&)O53L<(cm_2X*n0(I{x={Pu|~wj zcc9rtkTRN+G0L!}VBCDA!efsCFUwGSA@|Hjni@uGuphL%bm%x2V6_ zQO`XBW0Kq1NXBR%XR2T?!#op^o{d3pi)lx!59y$K_y2PD1 ui62F?Y=*1vldU;TU01c`g`R?r$u^AlOK%bg|NEUE-6C*{i)&lW%>D=J1)}8u literal 0 HcmV?d00001 diff --git a/Graphics/Units/Freestanding_Cirno.png b/Graphics/Units/Freestanding_Cirno.png new file mode 100644 index 0000000000000000000000000000000000000000..a9573fb986b40234b8868488410ba5baa21eeae2 GIT binary patch literal 2283 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 Y0xBe%lH7EjyZ`_I07*qoM6N<$g2wr_l>h($ literal 0 HcmV?d00001 diff --git a/Graphics/Units/Freestanding_Sanae.png.import b/Graphics/Units/Freestanding_Sanae.png.import new file mode 100644 index 0000000..0c8f6ac --- /dev/null +++ b/Graphics/Units/Freestanding_Sanae.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/Freestanding_Sanae.png-e457e5023b505a8a0c1a98c9720063a1.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Graphics/Units/Freestanding_Sanae.png" +dest_files=[ "res://.import/Freestanding_Sanae.png-e457e5023b505a8a0c1a98c9720063a1.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 +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=false +svg/scale=1.0 diff --git a/Scenes/DownhillAutoscroller.tscn b/Scenes/DownhillAutoscroller.tscn index 0caf17f..2b68397 100644 --- a/Scenes/DownhillAutoscroller.tscn +++ b/Scenes/DownhillAutoscroller.tscn @@ -5,7 +5,7 @@ [ext_resource path="res://Tile Sets/SnowySlopesExtra.tres" type="TileSet" id=3] [ext_resource path="res://Graphics/Animations/Background.tres" type="Texture" id=4] [ext_resource path="res://Scripts/GameScene.gd" type="Script" id=5] -[ext_resource path="res://Units/DownhillAutoscrollerRival.tscn" type="PackedScene" id=6] +[ext_resource path="res://Units/DownhillAutoscrollerRivalMystia.tscn" type="PackedScene" id=6] [sub_resource type="Animation" id=1] resource_name = "PitTransition" @@ -61,9 +61,9 @@ __meta__ = { tile_set_name = "SnowySlopes" camera_h_offset = 2.5 spawning = { -Vector2( 45, -6 ): "NPC", -Vector2( 80, -7 ): "NPC", -Vector2( 218, -29 ): "NPC" +Vector2( 45, -6 ): "CIRNO", +Vector2( 80, -7 ): "SANAE", +Vector2( 218, -29 ): "CIRNO" } [node name="CanvasLayerBG" type="CanvasLayer" parent="."] diff --git a/Scripts/Constants.gd b/Scripts/Constants.gd index f9ddb2a..36ee686 100644 --- a/Scripts/Constants.gd +++ b/Scripts/Constants.gd @@ -1,7 +1,8 @@ enum UnitType { PLAYER, - NPC, RIVAL, + CIRNO, + SANAE, } enum ActionType { @@ -74,13 +75,12 @@ const UNIT_TYPE_ACTIONS = { ActionType.RECOIL, ActionType.SPIN, ], - UnitType.NPC: [ - ActionType.MOVE, - ], UnitType.RIVAL: [ ActionType.JUMP, ActionType.MOVE, ], + UnitType.CIRNO: [], + UnitType.SANAE: [], } const UNIT_TYPE_CURRENT_ACTIONS = { @@ -90,13 +90,16 @@ const UNIT_TYPE_CURRENT_ACTIONS = { UnitCurrentAction.RECOILING, UnitCurrentAction.SPINNING, ], - UnitType.NPC: [ - UnitCurrentAction.IDLE, - ], UnitType.RIVAL: [ UnitCurrentAction.IDLE, UnitCurrentAction.JUMPING, ], + UnitType.CIRNO: [ + UnitCurrentAction.IDLE, + ], + UnitType.SANAE: [ + UnitCurrentAction.IDLE, + ], } # default conditions @@ -107,12 +110,17 @@ const UNIT_TYPE_CONDITIONS = { UnitCondition.MOVING_STATUS: UnitMovingStatus.IDLE, UnitCondition.IS_INVINCIBLE: false, }, - UnitType.NPC: { + UnitType.RIVAL: { UnitCondition.CURRENT_ACTION: UnitCurrentAction.IDLE, UnitCondition.IS_ON_GROUND: false, UnitCondition.MOVING_STATUS: UnitMovingStatus.IDLE, }, - UnitType.RIVAL: { + UnitType.CIRNO: { + UnitCondition.CURRENT_ACTION: UnitCurrentAction.IDLE, + UnitCondition.IS_ON_GROUND: false, + UnitCondition.MOVING_STATUS: UnitMovingStatus.IDLE, + }, + UnitType.SANAE: { UnitCondition.CURRENT_ACTION: UnitCurrentAction.IDLE, UnitCondition.IS_ON_GROUND: false, UnitCondition.MOVING_STATUS: UnitMovingStatus.IDLE, @@ -125,9 +133,11 @@ const CURRENT_ACTION_TIMERS = { UnitCurrentAction.JUMPING: 0.4, UnitCurrentAction.RECOILING: 0.67, }, - UnitType.NPC: { + UnitType.RIVAL: { UnitCurrentAction.JUMPING: 0.4, }, + UnitType.CIRNO: {}, + UnitType.SANAE: {}, } const UNIT_CONDITION_TIMERS = { @@ -135,8 +145,9 @@ const UNIT_CONDITION_TIMERS = { UnitType.PLAYER: { UnitCondition.IS_INVINCIBLE: [2.5, true, false], }, - UnitType.NPC: {}, UnitType.RIVAL: {}, + UnitType.CIRNO: {}, + UnitType.SANAE: {}, } # Position relative to player's origin, list of directions to check for collision @@ -150,14 +161,6 @@ const ENV_COLLIDERS = { # contact with ground is at (0, 0) [Vector2(0, 0), [Direction.LEFT, Direction.DOWN, Direction.RIGHT]], ], - UnitType.NPC: [ - [Vector2(0, 1.5), [Direction.LEFT, Direction.UP, Direction.RIGHT]], - [Vector2(-.25, .25), [Direction.LEFT]], - [Vector2(.25, .25), [Direction.RIGHT]], - [Vector2(-.25, 1.25), [Direction.LEFT]], - [Vector2(.25, 1.25), [Direction.RIGHT]], - [Vector2(0, 0), [Direction.LEFT, Direction.DOWN, Direction.RIGHT]], - ], UnitType.RIVAL: [ [Vector2(0, 1.5), [Direction.LEFT, Direction.UP, Direction.RIGHT]], [Vector2(-.25, .25), [Direction.LEFT]], @@ -167,6 +170,22 @@ const ENV_COLLIDERS = { # contact with ground is at (0, 0) [Vector2(0, 0), [Direction.LEFT, Direction.DOWN, Direction.RIGHT]], ], + UnitType.CIRNO: [ + [Vector2(0, 1.5), [Direction.LEFT, Direction.UP, Direction.RIGHT]], + [Vector2(-.25, .25), [Direction.LEFT]], + [Vector2(.25, .25), [Direction.RIGHT]], + [Vector2(-.25, 1.25), [Direction.LEFT]], + [Vector2(.25, 1.25), [Direction.RIGHT]], + [Vector2(0, 0), [Direction.LEFT, Direction.DOWN, Direction.RIGHT]], + ], + UnitType.SANAE: [ + [Vector2(0, 1.5), [Direction.LEFT, Direction.UP, Direction.RIGHT]], + [Vector2(-.25, .25), [Direction.LEFT]], + [Vector2(.25, .25), [Direction.RIGHT]], + [Vector2(-.25, 1.25), [Direction.LEFT]], + [Vector2(.25, 1.25), [Direction.RIGHT]], + [Vector2(0, 0), [Direction.LEFT, Direction.DOWN, Direction.RIGHT]], + ], } const INPUT_MAP = { @@ -213,27 +232,31 @@ const UNIT_SPRITES = { SpriteClass.JUMP: [false, ["Jump1", "Jump2"]], SpriteClass.RECOIL: [false, ["Recoil"]], }, - UnitType.NPC: { - SpriteClass.IDLE: [false, ["Idle"]], - SpriteClass.WALK: [true, ["Walk"]], - SpriteClass.JUMP: [false, ["Jump2"]], - }, UnitType.RIVAL: { SpriteClass.IDLE: [false, ["Idle"]], SpriteClass.WALK: [false, ["Move0", "Move-1", "Move-2", "Move+1", "Move+2"]], SpriteClass.JUMP: [false, ["Move0"]], }, + UnitType.CIRNO: { + SpriteClass.IDLE: [false, ["Idle"]], + SpriteClass.JUMP: [false, ["Idle"]], + }, + UnitType.SANAE: { + SpriteClass.IDLE: [false, ["Idle"]], + SpriteClass.JUMP: [false, ["Idle"]], + }, } const UNIT_TYPE_MOVE_SPEEDS = { UnitType.PLAYER: 5, - UnitType.NPC: 3, UnitType.RIVAL: 5, + UnitType.CIRNO: 0, + UnitType.SANAE: 0, } const UNIT_TYPE_JUMP_SPEEDS = { - UnitType.PLAYER: 4.5, UnitType.RIVAL: 4.5, + UnitType.PLAYER: 4.5, } const SCALE_FACTOR = 1 diff --git a/Scripts/GameScene.gd b/Scripts/GameScene.gd index 930d86a..06b8822 100644 --- a/Scripts/GameScene.gd +++ b/Scripts/GameScene.gd @@ -13,7 +13,8 @@ export var camera_h_offset : float = 1 const Constants = preload("res://Scripts/Constants.gd") const Unit = preload("res://Scripts/Unit.gd") const UNIT_DIRECTORY = { - Constants.UnitType.NPC: preload("res://Units/DownhillAutoscrollerNPC.tscn"), + Constants.UnitType.CIRNO: preload("res://Units/DownhillAutoscrollerNPCCirno.tscn"), + Constants.UnitType.SANAE: preload("res://Units/DownhillAutoscrollerNPCSanae.tscn"), } # positions to unit string diff --git a/Units/DownhillAutoscrollerNPC.gd b/Units/DownhillAutoscrollerNPC.gd index f4e7bbb..388aa6f 100644 --- a/Units/DownhillAutoscrollerNPC.gd +++ b/Units/DownhillAutoscrollerNPC.gd @@ -1,5 +1,15 @@ extends NPCExample +func _ready(): + ._ready() + facing = Constants.Direction.LEFT + func before_tick(): pass + +func reset_current_action(): + # process CURRENT_ACTION + if get_current_action() == Constants.UnitCurrentAction.JUMPING: + if not actions[Constants.ActionType.JUMP]: + set_current_action(Constants.UnitCurrentAction.IDLE) diff --git a/Units/DownhillAutoscrollerNPC.tscn b/Units/DownhillAutoscrollerNPC.tscn deleted file mode 100644 index 2e9b016..0000000 --- a/Units/DownhillAutoscrollerNPC.tscn +++ /dev/null @@ -1,39 +0,0 @@ -[gd_scene load_steps=7 format=2] - -[ext_resource path="res://Units/DownhillAutoscrollerNPC.gd" type="Script" id=1] -[ext_resource path="res://Graphics/Units/NPC.png" type="Texture" id=2] -[ext_resource path="res://Graphics/Animations/NPCWalk.tres" type="SpriteFrames" id=3] -[ext_resource path="res://Graphics/Units/NPCJump2.png" type="Texture" id=4] -[ext_resource path="res://Graphics/Units/NPCJump1.png" type="Texture" id=5] - -[sub_resource type="RectangleShape2D" id=1] -extents = Vector2( 6, 14 ) - -[node name="NPC" type="Area2D"] -collision_mask = 2 -script = ExtResource( 1 ) -unit_type = 1 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="."] -position = Vector2( 0, -14 ) -shape = SubResource( 1 ) - -[node name="Idle" type="Sprite" parent="."] -visible = false -texture = ExtResource( 2 ) -offset = Vector2( 0, -15 ) - -[node name="Jump1" type="Sprite" parent="."] -visible = false -texture = ExtResource( 5 ) -offset = Vector2( 0, -15 ) - -[node name="Jump2" type="Sprite" parent="."] -visible = false -texture = ExtResource( 4 ) -offset = Vector2( 0, -15 ) - -[node name="Walk" type="AnimatedSprite" parent="."] -visible = false -frames = ExtResource( 3 ) -offset = Vector2( 0, -15 ) diff --git a/Units/DownhillAutoscrollerNPCCirno.tscn b/Units/DownhillAutoscrollerNPCCirno.tscn new file mode 100644 index 0000000..e093a08 --- /dev/null +++ b/Units/DownhillAutoscrollerNPCCirno.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Units/DownhillAutoscrollerNPC.gd" type="Script" id=1] +[ext_resource path="res://Graphics/Units/Freestanding_Cirno.png" type="Texture" id=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 8, 36 ) + +[node name="NPC" type="Area2D"] +collision_mask = 2 +script = ExtResource( 1 ) +unit_type = 2 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( 0, -36 ) +shape = SubResource( 1 ) + +[node name="Idle" type="Sprite" parent="."] +visible = false +texture = ExtResource( 2 ) +offset = Vector2( 0, -48 ) diff --git a/Units/DownhillAutoscrollerNPCSanae.tscn b/Units/DownhillAutoscrollerNPCSanae.tscn new file mode 100644 index 0000000..7dec760 --- /dev/null +++ b/Units/DownhillAutoscrollerNPCSanae.tscn @@ -0,0 +1,21 @@ +[gd_scene load_steps=4 format=2] + +[ext_resource path="res://Units/DownhillAutoscrollerNPC.gd" type="Script" id=1] +[ext_resource path="res://Graphics/Units/Freestanding_Sanae.png" type="Texture" id=2] + +[sub_resource type="RectangleShape2D" id=1] +extents = Vector2( 8, 36 ) + +[node name="NPC" type="Area2D"] +collision_mask = 2 +script = ExtResource( 1 ) +unit_type = 3 + +[node name="CollisionShape2D" type="CollisionShape2D" parent="."] +position = Vector2( 0, -36 ) +shape = SubResource( 1 ) + +[node name="Idle" type="Sprite" parent="."] +visible = false +texture = ExtResource( 2 ) +offset = Vector2( 0, -48 ) diff --git a/Units/DownhillAutoscrollerRival2.tscn b/Units/DownhillAutoscrollerRivalLetty.tscn similarity index 90% rename from Units/DownhillAutoscrollerRival2.tscn rename to Units/DownhillAutoscrollerRivalLetty.tscn index 786e4f2..34f3f53 100644 --- a/Units/DownhillAutoscrollerRival2.tscn +++ b/Units/DownhillAutoscrollerRivalLetty.tscn @@ -1,11 +1,12 @@ -[gd_scene load_steps=8 format=2] +[gd_scene load_steps=9 format=2] [ext_resource path="res://Scripts/Units/NPCUnit.gd" type="Script" id=1] [ext_resource path="res://Graphics/Units/Letty/Move0.png" type="Texture" id=2] -[ext_resource path="res://Graphics/Units/Letty/Move-1.png" type="Texture" id=3] -[ext_resource path="res://Graphics/Units/Letty/Move+2.png" type="Texture" id=4] +[ext_resource path="res://Graphics/Units/Letty/Move+2.png" type="Texture" id=3] +[ext_resource path="res://Graphics/Units/Letty/Move-2.png" type="Texture" id=4] [ext_resource path="res://Graphics/Units/Letty/Move+1.png" type="Texture" id=5] -[ext_resource path="res://Graphics/Units/Letty/Move-2.png" type="Texture" id=6] +[ext_resource path="res://Graphics/Units/Mystia/Move0.png" type="Texture" id=6] +[ext_resource path="res://Graphics/Units/Letty/Move-1.png" type="Texture" id=7] [sub_resource type="RectangleShape2D" id=1] extents = Vector2( 9, 34 ) @@ -14,7 +15,7 @@ extents = Vector2( 9, 34 ) z_index = 1 collision_layer = 0 script = ExtResource( 1 ) -unit_type = 2 +unit_type = 1 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2( 0, -36 ) @@ -22,7 +23,7 @@ shape = SubResource( 1 ) [node name="Idle" type="Sprite" parent="."] visible = false -texture = ExtResource( 2 ) +texture = ExtResource( 6 ) offset = Vector2( 0, -48 ) [node name="Move0" type="Sprite" parent="."] @@ -37,19 +38,17 @@ offset = Vector2( 0, -48 ) [node name="Move+2" type="Sprite" parent="."] visible = false -texture = ExtResource( 4 ) +texture = ExtResource( 3 ) offset = Vector2( 0, -48 ) [node name="Move-1" type="Sprite" parent="."] visible = false -texture = ExtResource( 3 ) +texture = ExtResource( 7 ) offset = Vector2( 0, -48 ) [node name="Move-2" type="Sprite" parent="."] visible = false -texture = ExtResource( 6 ) +texture = ExtResource( 4 ) offset = Vector2( 0, -48 ) -script = ExtResource( 1 ) -unit_type = 2 [connection signal="area_entered" from="." to="." method="_on_Player_area_entered"] diff --git a/Units/DownhillAutoscrollerRival.tscn b/Units/DownhillAutoscrollerRivalMystia.tscn similarity index 99% rename from Units/DownhillAutoscrollerRival.tscn rename to Units/DownhillAutoscrollerRivalMystia.tscn index 2eeba4a..0f8dc16 100644 --- a/Units/DownhillAutoscrollerRival.tscn +++ b/Units/DownhillAutoscrollerRivalMystia.tscn @@ -14,7 +14,7 @@ extents = Vector2( 9, 34 ) z_index = 1 collision_layer = 0 script = ExtResource( 1 ) -unit_type = 2 +unit_type = 1 [node name="CollisionShape2D" type="CollisionShape2D" parent="."] position = Vector2( 0, -36 )