From c7fe3bf4e56902a066ffc4cc6b26b1e35534c489 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E1=84=8B=E1=85=A2=E1=84=91=E1=85=B3=E1=86=AF=20=E1=84=82?= =?UTF-8?q?=E1=85=A9=E1=84=90=E1=85=B3=E1=84=87=E1=85=AE=E1=86=A8?= Date: Tue, 28 Aug 2018 16:36:38 +0900 Subject: [PATCH] Add: show animals for practice, test stage and result Fix: change animal graphic resources --- resources/image/character/animal/cat/run1.png | Bin 0 -> 1807 bytes resources/image/character/animal/cat/run2.png | Bin 0 -> 1826 bytes .../image/character/animal/cheetah/run1.png | Bin 0 -> 2054 bytes .../image/character/animal/cheetah/run2.png | Bin 0 -> 2153 bytes resources/image/character/animal/dog/run1.png | Bin 0 -> 1788 bytes resources/image/character/animal/dog/run2.png | Bin 0 -> 1795 bytes .../image/character/animal/eagle/run1.png | Bin 0 -> 1962 bytes .../image/character/animal/eagle/run2.png | Bin 0 -> 2041 bytes .../image/character/animal/horse/run1.png | Bin 0 -> 2441 bytes .../image/character/animal/horse/run2.png | Bin 0 -> 2511 bytes .../image/character/animal/lion/run1.png | Bin 0 -> 2258 bytes .../image/character/animal/lion/run2.png | Bin 0 -> 2294 bytes .../image/character/animal/ostrich/run1.png | Bin 0 -> 2097 bytes .../image/character/animal/ostrich/run2.png | Bin 0 -> 2099 bytes .../image/character/animal/rabbit/run1.png | Bin 0 -> 1545 bytes .../image/character/animal/rabbit/run2.png | Bin 0 -> 1533 bytes .../image/character/animal/snail/run1.png | Bin 0 -> 1178 bytes .../image/character/animal/snail/run2.png | Bin 0 -> 1169 bytes .../image/character/animal/turtle/run1.png | Bin 0 -> 1660 bytes .../image/character/animal/turtle/run2.png | Bin 0 -> 1635 bytes src/game/lib/animal.js | 131 ++++++++++++++++++ src/game/result/result.js | 61 +++++++- src/game/typing/practice/game.js | 20 +++ src/game/typing/practice/loading.js | 41 ++++++ src/game/typing/test/average_typing_speed.js | 10 +- src/game/typing/test/game.js | 18 ++- src/game/typing/test/loading.js | 42 ++++++ src/web/client/result.html | 1 + src/web/client/typing_practice.html | 1 + src/web/client/typing_test.html | 1 + 30 files changed, 317 insertions(+), 9 deletions(-) create mode 100755 resources/image/character/animal/cat/run1.png create mode 100755 resources/image/character/animal/cat/run2.png create mode 100755 resources/image/character/animal/cheetah/run1.png create mode 100755 resources/image/character/animal/cheetah/run2.png create mode 100755 resources/image/character/animal/dog/run1.png create mode 100755 resources/image/character/animal/dog/run2.png create mode 100755 resources/image/character/animal/eagle/run1.png create mode 100755 resources/image/character/animal/eagle/run2.png create mode 100755 resources/image/character/animal/horse/run1.png create mode 100755 resources/image/character/animal/horse/run2.png create mode 100755 resources/image/character/animal/lion/run1.png create mode 100755 resources/image/character/animal/lion/run2.png create mode 100755 resources/image/character/animal/ostrich/run1.png create mode 100755 resources/image/character/animal/ostrich/run2.png create mode 100755 resources/image/character/animal/rabbit/run1.png create mode 100755 resources/image/character/animal/rabbit/run2.png create mode 100755 resources/image/character/animal/snail/run1.png create mode 100755 resources/image/character/animal/snail/run2.png create mode 100755 resources/image/character/animal/turtle/run1.png create mode 100755 resources/image/character/animal/turtle/run2.png create mode 100644 src/game/lib/animal.js diff --git a/resources/image/character/animal/cat/run1.png b/resources/image/character/animal/cat/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..75106e188cf2a7b9b820d6dfb4f1024bd73b8b27 GIT binary patch literal 1807 zcmeAS@N?(olHy`uVBq!ia0vp^sz5Bo!3HD^HchPtQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{&CLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}t-3#_`hBq$Z(46Le)Ln;eW^@CE2 z^Gl18f$@>14ATq@JNy=b6armi`gLD2*8txIZAW?5>ATTyF!N5XwGgdIidRyrmx zTsA9f%hHXON5qyUo&UG6$=sIXsJx2!#mQamaf>pto1Y~39}QM*|EA#4&CWVep=*(& zz#54w*SIvVy6Kwu{yiAhvg3YA`tMCQPwJ^2RW}Uz9`(E?>xDJVL+jCDncK$D! z=a&&ZIo$7a|FL~LwDv|`*6J^)s485z=B<>U#)ib$tDzaZ>r7AF)M9lCHjdo&Ip@-~ z$xm0YIQcy|blSaaYlo*Q=f{A#R$C4SsM&t>?Rost@@d?=tTwK5S$)ssRgS&5cGmdO z%?lrb4cVOQChq=Nz23Xyq2s?hjoVgfs49ObtBTY3{ORa|kH1}B?R320vu2qT*T+9E z>wnBE=rFLa{L}Q&Z$+)TYqhe-yF1P{d)$6J;M8V!HPGMi$%j>7Qo~=5`&SPg+1)x( znd^0`$F0)Y{n|^Pe==%OxU$jK;q6-8XMaCw6-6}5FikqSM56!eG0lkIl`oh68#}{Rx0na``a3D=rfg$6&&g-Oc;uJRp_3UkOJ)ePt1O#1<=cadi9re~ zyv}oloYZbE{`KDA#6+q2OFXVSCLZnzNIo8DnC6zhTH8wG@;cF9zy6w+#=qIZHT{;i zZRSqqi1nKae|oJEn037F@oq`&8{g-BEtR`<=Z$K;^WM@MV(HxS{p$^mckJYwZ|`t( zroXGV!SUk9eRsFdE}GdNGCj_7<@~&?ycG)@Ul&U4``=Y`Gyco-!hp^X-?-63)eX^PbwQRZ&rVV$7kK zbUKKu8#?8I<$J=w4}M)!N39cQvlZlB6Ky3PB-s!aw7 zt~~Sl_stY?pSQZf_v}{RfBVeuYOL7Cmi<74spuLPPX;86W=d>`b$jG-D9S! zy|emkUM<>lR?k9dnGUCd(r(5%LUY7wM0)MH))&qSS=BISvOV9lB|DB6ITz2)PMxuS x^6cgrAtzF<7ydYPFk|-V){6(NxBXB*z`(I_ivQkwlOBVrC{I^Emvv4FO#mYD#2)|v literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/cat/run2.png b/resources/image/character/animal/cat/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..59f94fade6abde4d1ae831610f45e5ff667ef875 GIT binary patch literal 1826 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 literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/cheetah/run2.png b/resources/image/character/animal/cheetah/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..78470b612d01e8f235888c6f1fd3cc1e515eff6d GIT binary patch literal 2153 zcmbVNX;c&E8cv8TvQ&D7Vx>ZeU@3)c5VEj2WC0{WgjDcQfshO&g=CV+0AaC2Dy=Ar z7HmQGYP2k+NX-=rW$`E!LEu2$unGcJD3`6mL27I7pyIthJiX`KIWzMu^E}VHeD8ZE zH#8)`!gQ-C27|E(3gm>LBN2TFCPwHRpE1Knhqn=KBoYqABdH=7!~hZ~4#Wq^MG0US zD3YY9dO&Xs1{W_AMk0{{K1&SAiJ~NJ*j)$t1aaEw1Ni zH4+B?$Boyb)xtC-ND2ehP%1lo6Z3MCWk`d zG8h1l$3_*{WFD7H2I%YDAcYzcDa7EqT^VZkC71oTToxM!MF<27At-6R0z#z_0;#2t z63-6z#5+gG6cQ*^{odN~yoi{&{{`ve(%E-*La-O8%dmkx*wyYsK+j z#j?JIR^Zz7Rq3OPSIq+|(2jx8);N|$w!mOE6bEqtp=RW#$f(54fR%6UVrNb4fre=3 zal>5eBx~yt7mb6}a?llH9mx>jFF1rQ1EJfWd}Rm(?X=9?_`6wMVfF_N)*KJhy(cRJ zxp~em`e>J?IeJTiI)znow%Uf;(9_rdum04w$7SyBUdKw|N_~G9mnI}&O7m!%>)8iZ z=OSv~((XR9)$PsCL?dr)t7VRz$dNZi*oLW)`ufwKn|^Fr+Pl}2smEp`A5|+^b;TFA zJTNVKRsr9+C>3ZMydb+MYi#=nts(^)-AO9n^w)4^^pZ0APu~pvW%^kwjs27B2{B(c ztBU$pY@X%z>l`m}6ONX*#vCP9n>mHvzj!rxpYP341Gmm>k1yUI$Un3wmGGB~l^h8U zmMKbg)V>ExT9yAQ{HFa)2_PUBkq86@9bIV(f>L zdWxVnWj1u>)7?a~JXQF2Q9JR!3>D{3k?vXCv``;q zaj#GcMJ#uA0_px`HOEtT-RxB)CfiH{XM?rCW!px#hX($az0+p2PNvGo@p{df%vTuQ2r1MU$_c zZOt^T>cWQZU|Z#P%MLdpI`tIwo({PSqrSiAWA z6Q=^7q?g~lRZTU?zuMknsM3!P4f*fi#z|B&TU?b=y;Wt;mK~j1;773Ge9p+o$j_Pg zBl_Gp5(ZuSGY={+2kO;#g2sRpp>dn_SeF zJ^D%A%@nIWSl6mf7*uWiwSxH@F z!kI1J+M^Hy`%mmv?H&h3}>s3ax&18P@-3nm|;58vE znVFcFIQVqlZy@}1-BbOM-|Tr`C$Aeo}i)Wi|sDs`-%rnUJ?fcT(i5eYp#2FKf&16#>fKS{9y>! zYi3xe;kR5`SvW4Sn%B&19`EWct?@Mx#74!mRo&o^8uT1-`{W1^XFWOQe{XW5QN3|( zz!92L*Q(={=@8s(78YlcbZBYZFhYy*-B7!-RQ-uEwpZC^UwnQE+w3}VPVfb`)o*V> z*w{N}6JG`Yb};-OAq#!qx0!uYxZ2p+Lo|FU8pGCKS+NwiZy?#cJFleb*x%1?sG61D oZXbL$Y=2Pm2Juw?Vw4t(`81%L(>ZzDa_#3I#0}xp`^RSg8(EiZ0ssI2 literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/dog/run1.png b/resources/image/character/animal/dog/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..aaf7692536041f21b7bb8d282b6ffa6611b25575 GIT binary patch literal 1788 zcmeAS@N?(olHy`uVBq!ia0vp^`amqh!3HEho_w|*NJ*BsMwA5Sr$m42dX-@b$4u&d=3L1gX)h$SnZsW?-r5%(GQ`zk9!uLS~AsQn;zFfp39xYDT62(s|s5su(?)1Hb_`sNdc^+B->UA;;0DU00rm#qErP_J!9Qu14BavGc!Fy z6H_xYLmdSp14AQy10XWfH8im@HM24@SAYT~plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OOP2xM!G;1y2X`wC5aWfdBw^w6I@b@lZ!G7N;32F6hI~>Cgqow z*eU^C3h_d2fv+#z;JjjJKmmhHzap_f-%!s$KQ|ZTFR<$3lAu(CGq9>I4yi0i)elN7 z&Mz%W2F6F4GE6ft?C@IzQV4X7m48ttFj5k8T=J7kb5rw5JY8&+fHHb1nJHH0CdNh< z1{S847LJat7KVnF7RIiwCZ=w#M&@SD7Dk3JGqCA(aWb-WaWOJ4r>GjMjE=kNwPKDW<3A7ig*8s0xE9aur#FG4?ko^1{SPBTp$S=t+ z&d4uNa1J(8&@ABWdyD=S^Cu5uu}Sb*`9fk z>!rJUo~Ugtzy5x2t+93IV$0)mrC&?_|NnRTT#J%C8~qE?t7Dm~ifc_@>BX9SXKO!x zF`+`lM`@mT0pG3O03pNpg367d*|%r0)&0BE^!MNE@ABSGho?L^|7mI1w-4X8{$Ez% z(ZIox7aObn)Rl3M?48IEb~DbJ>U8^Ge{#=joMz7QUii>!;jg>1rJv0|tu6a{>$1kf zlUVLNFYjbH=Cvcpj`LOWY_*A*c8j$hy4BYUWG6Gqykgw(a~`vLzi`4W&Q6Jy=L?tG z9L^LHw6L(+xWGan>dZOQRZ~0#GsIg&*4x+g*8F71QHT$yo3mu1n?m@a1@l&LZM*t$ z{ptl@=7_Kt2(fT<5JVmF@DxS^S)2eW3Las z;Z2`P4_xu|=_$@#%y`+O;6Z`Mgilf@1eh*KWV1FhG7E=9e-4-%z-~MpA`mOWmRts-R-qDMeG*C!znI1FaPOI z-?wwK+pQ~3QRc6Lq*{L{hqftfAF%c$7Nx{KN3nr&}cS=iUf zs~G1nyf=F-m$oN)iP&tNr_+wkJm}0@A*tUmeW8TEm(0f>oRVG*9x9Lbo4ITFzsrx~ zj9WeJ)3MEyx%D+7GK$_`Y>u9)|Fq?zTmm0Qf^O9BHG#LYZzTPD&9-*k>%Xhm)@S); c{1HxI_`6GD!a>vN>7e?^)78&qol`;+0C1tNivR!s literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/dog/run2.png b/resources/image/character/animal/dog/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..873d2590408d3daab376a5e02dac9db8a223f569 GIT binary patch literal 1795 zcmbVNc~BE~6b_(hy#~}Oq*b>GrBKPSxk%Ck3^^p$1PrNAO2v>YB!pz+W+ed?L$#iu zh$xOQU{yrCAsl76;@OJg0Vp7NjkhA8k=7}7>_))$52u~!&hGw>ec$)J_kQoqZj6-A zpF9CS0f)m)mWGQI*hs>jPse*=??E0b7aM$0aSR#-C!!V=0^tN2H~|8r22~QIfK-~a zW#=It4(E}mQ^ue%vV~kVY#^&#He{>8grRXbUZ~ZiQtKfUNPv=bMn0jxu89EXG<-rd zQ%04UgpgJjo{m6K>2jqyU9aY72%#YW&&tIJ3=paUtcDb$nQP?}-tls=xoew30N$CP zdOl&;sTf%#AcPSJV3O%1H5CK_7K;orm@F0;1kk7;jY7q4771iQx< z|rzE)E)vgjtZxX+~6KB^k}cQ3erYRwFtS zs)LPyi&2#TFGu+V%+uiz3?`ZEJ+aX|k|-=?6syWa0m)Q~!QhJPowXTNK!3aOL2I)z z%>+>tkQrW%sIl`%B#wfy-2JFil zF(nfAC{}7Tqbj2s8r9Wdx+7THzhb#U1X7_eqJ-g;(F%yv!YFLk!X`i%#R3ANbw&+r zF$cPiXE<6Bgy>QsjRb)Wz`Oi%bsy0G@3@Dtn*WnC3g!&ORUH2)meDP&0$tPhrH?J% zHxFdQItIa7qwQ7T4y@zoQjtJuy>TZ0raVgE^-Dy-K6eEk4=hT!X4@FI5g%`R?bEpB z@|`*@A^4W>vr;kRlyC~&OZ`b9M=!or3T}IK}_DDbR8*?#Xj(dd8F<&2i6L%cnEj`>ulHu7~RT;ML9w`SZ zR^IJi(jP~dq_6(Uf6WHJn&PI6!~J2uD=Pe3ozbP{`FDdHPJ7!F_JO3yJ>h4Qd7b>Q z+0H}x2hMLO8cW?fcB!-5efv6H$fo*-UgClae*D1FOP{nV>_qudo zy`#U;uYBR#drw|(>l+*@xhy=Xji95XFM>Z|CJbK7PBb!0DWMIrruHIsLxPA(<=0%A?A{;F=i^r#5!3U231OOP{Zw zCFly}A?Z_~wUoj3AM5)vH%wc3(DX7a`Rckc+Mesi;4;cJUZnf|s#E!?_4MkWy{LP6 zIhmsDj)th~RozpX-?;Qdq4Q^Sdr z%Ov+BVTZT*F7YryiIuf(Y)a9xyCo8TMY1?^xwiTd5aaW_u`utziM(h}T#i?cZ{LNi z!jhV#8GF0gSDQ7=y0>qBwYj;Ml?wZ!_lqiHZFvJ#4DfLfv6Sstv*Ve-)U&#~=fzHK z?$_P}0Sy06tF@!R=4e?j*uz8~jW4v|k8DDE!gilqds^yQP8r9u*A9M0pPQYrT4}3} h5ylHj%bVOM;WjrC1!uosAL05fNyT!}v9P5-`~|XM!9V~2 literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/eagle/run1.png b/resources/image/character/animal/eagle/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..f234adf071111166ac4e53b2a57c7e18680b1281 GIT binary patch literal 1962 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 literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/horse/run1.png b/resources/image/character/animal/horse/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..1b9e9f55d6806c3f0d397b046963847a97db5d69 GIT binary patch literal 2441 zcmbVOc{r5&9v_KocXJ9kof<>3&OT#iYRX_RCnA(Vr7`njViq&6W~>cPMWtx5bqBX7 zQKGoAG)fDJMCpVqb(P4{NhPXrUX||sqvzb`x$pD7zxDh1eD~*hQ@u91>S~#2!C)|5 zhMTiDG_Qj`TMcz+BwP26K+|%N&IEk~A)tgM0$?FQ!PTh%dYpXgz<7LcqU>fZ6$qQHpUktMNY+ykz7t;F;OZZDH#YqIPK!M0tAc$C~0Ix6sC=iDUgm5PxBHYrC z%jXCrVypS|eD&5D5OH?{92b#*2mcaZ3ik*4|F_>?v7G-WW+=!Q)O>OLSFtP{K@~W^ z{9gLd=6mx1e5hkYP;0bDl2|a9S`EXQ<}2-a65tW`%a)~z>O+BnM%KSM_L_I?tr%@Y z&W_=h9E4wqzQ1>?rlFP+G)hkjc(Bu9@7Rt$jVfB8q+3JnTy|kDvKI5G)~i3Z;_oY& zMpeitO#h@J)*|#?-Bgx)<2rpEF-{WF|9N6sE^e>p* zwIV+&RpVBJu;!06z?l$Il&@xNg2# z__Oi8n&Yq1sG}V{s)qMJB)Xo8g_$Vb$8%oDi}hPirfLkxgI;4Vl&U|5X}9N1sEp5? z@&3s(sQjACw(@7h%ISo6jj6v!#C{%LIo0swQ^%$heb9?;ReDB+7cVij2-WoM>2GQ} zwObNjQ+qUX$;`tiF6FiV684tIqL;n2&r+l?Ee4xn+SYSlm9!XV7`^X)SkhK}^jhPN z{Ht!0oAcw|?mjfqzG3~UWADpKnvFXQ2Mvdf5akRP6>Z|4nc7+YL^*F&>5*G;-8*9c z@F%S8*03=f(IpRD4!2?+9=dCw6>PLK`saOjPFW_rYq>POCUbnIMHCfh9KI$C_qa%G za=Cns-l|JY`F#WI>A}GS-OM}r$=1!wH~TNoyqBkVl^xZ6B4BK4yRR##>#%A?k3fHs zU3ZqP-|hWP`zN}I+3IyE_nyEGlvv0t9AF2Mvx{EA^fHT3(0$FEW9P;`!j@3(>O_Y{ zi|&&+SjVxCndso?KoxckV@!N#ktIgEAf+=MI~$stQct)pva#0pcski@`EqJzx_{Oo z{=*1)ttqWL!c^mrfB1zkcujh{m>;a3w=69#JYHn#r%WhXraCMO|6T9gWSadE*Nsc% z$)E1J_-2h3COka9rb+)cZ1$)c?2N6JEHW>9OwHPzDgRWqK2yu2!3=0k{I{Y>j|wC< zh+ovFEu-ZwHMK#K!+lCCGz*l&XZVl(SC=#Vmy~%bL^qq?)y{-VhR)tZcDng)*w%6q z&%>f|j}BI(YQ!n`MOB2x2B*S!rEaHV@Y=TavVBL|@Pb>iBUcK{(=Jvif)SdPlSyj7 zj^yAcd~RASp9wOot1N7$O${cU$}?}xAHI7Cr5Rb5S@SAM#>Xe?$vv%WvX)l)SQKh7 z^Hz#-*3>xU7`n~sUPChs5eM={rZd8{D4k% zTiV^Bf$77xk0d&1wZoM|@{Pn1<$24r_giUMDopW)U7@lJReqfaH6jQyKMSN0ha?6< zx73ZUIuu6I%NvVL{a>2H+5&b-soOv^kxiF(bAvkUrqHq0wJYs>L@Unpoa&@W2zRwZ z+7*;eWu58v;;`S4fTxY7Ij{rP8+ks)xFezw@j7n%^FShR>j(BTG(%dZ@t~;dhN34c zu2toZNqPw1;Oc&v!DXqDp0|^?=E}YA06WvjS%NR{aNSr&^)| zMcg+uXFrAV1>w^Tt-O4B1Scel9#{PqNd4Q2*?y<%+N#)O?I|6-_NUR0J?;6k#*Y*y z3Jkgo?1z(c+~L+!jyLEdoeFl=opN2$N~_VvpTz!qgHQc>d2X>W%tKji8e2N4GyikM Mpl@<6bKIHqCkYt=q5uE@ literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/horse/run2.png b/resources/image/character/animal/horse/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..a5d7cecfec6dc26ccc626c55da0d6e7b77fc1ee0 GIT binary patch literal 2511 zcmbVOdpuM9A76xSQc;qyMo%f**~Vs;@!MR7Q7)mV&34#cvz@g~cIm>r=oOEjddO2z zQ55mhjp*VQUFeAra)}fvJ)%i^Bz{Mw-|vrJ&+qm6o!2?%d;7fKpZj^8!&|-GbQi5z zgg_v4>F&3=;@IDGMnRL<%Kj83px~mkiHmw*eILtB90O zL47kSh_Myv1c^Z;0b`A3V{tenk%+M;favIGOtduy5=Q_yJ3G5s4m=(WOQ0okp_C;<3nk`r49=j0 zE#`@&JV=O~Wn_gxQBn#Dw)C3|0uh7pgIFl}9w<0ufQ%&qa2PBg5X}1ZRazqT1^;8l zPo*XPauEplf)Xf7%!cz3ZaxQwWB2!pW(8qu$Ub5ooD^21GsKP(fI=zVnSz2(FdQC- zY-?kUCt*nhI}(-ZLc-zfNY*YcHUw7}ye-j*gvZTs{0vLArCE~*ws+0 zSUZ{v7H8{3q|s=EIV@c$k+Otra854|*83fc`&%s8Ner^2kk}uBBIhb#D;JVN5-ub{ zI{6Wi8v}Vl4iqi1oK4R+Z=FFgZ!gGk6+;5#*Z7ioKhgic{r-mK{68@RU}J#U;`py( zncIRZaCZ8m^x?&i<^hFp$B5z9FiX!dLm;$f=+0DsS!eeNDtB$b>ifM(eg?I_Z1Z1m z_x!DV(_dRn|Ez8$EKfqp7JkSIP{pe{do+CW+Ey>gJJQvbw9L48e3c%Jx+&bxSZ~*g zLesQo=UXo`DYgFgd588)LxULy#)dOGI_j(%CabZ~;G>3yk^M6x%3kH$JkzV@?37!i z#z5fBo96QKgkhmrt1a?nmu`Fqfflt5J)6#tnW&_<}fv-(0^)M3+UV* zJW)SVOUq9=&yD;Tvx=RBxG>FV^(KD6`znSNkdT9B zqUHIY;B?l@(uJjc_wsk9&IO2J|FQqT}_MDYr4` zdewQ&=VC|QLfb%fh2=2Xy8TX9Y+7&=b(c04s=+eTo&lM=iC_8!5{JsnOULhZ*XQa2 zEp`nxmk;UvX?-6`F347jMoEWCEh|plb~oG;KZ@4 z`6`swa}uYTw&^kh>K`tmvDYLHPf!*IsjsUMXMa9_+>JPpYub@6@nqc$xaBKR$M|-`aFHcJ+HJOWx9y z&!*j_y;YS5UKH1vcxPIz127b}A3vL#HGScH1;O02YTGgWP@O-#w9I?WYSD6|^&7S` zLfR}D%3~)dDk5lceNSKLNy1ySY4I9@M)z|ikz1GxeRidd=FGR-D#rW*NO&89=`U2V zxp?n2DS&#D(cQ2uK#PCP?#}H}CObx34EVICY+FB(tJ?cVmQ*7$ zu4=H((3C%~X56CwP3>AsO}*yi-`qUUI3o8YawD$(+OO&48t?i9(S*z%@!+rUEYT{w zyS)8ESF8)2JY>2w^49OAmi%b^>rhK4!RegIGLy2xQ-T&#`ElAJWnZw2e5~#U-s7H( zci_^nL)RE*_2@{H`giYk!?oM~u_6&Lc+E8|7&o|*X=zi=47t)cU>tSOVD)ZBUGG$5 zmOP}j3qc=g{{o_Hp=`4ql=tH}51*5bEsD?S0=2eZP-O)}cWJk%T ztnIO38)oLL!_J)n1%U^Je=Rk6-Q~FN46pai_{^S{z!+s;!Xey)nz-nwkTlMf(Ec!= z#J20Qqbkt+v@&SBPfv7+??Ot_!_ul%`W6v44{lNKZC0$3oSR}HnlkCl7C|?rQsec^ z5UQj}w;HwgP5$GlN{bU)AG-kpWz&4$wEdXVp$2^Mbfj-W^cnugj+^ry4d^V;NY-?1 ze*c-AOnFoetmORluiEF{tAaBcuBGZ{M3!ZnCz9Yi`0;k4a^4YY(RX5TmRxRv@3>=(G6tu=A?Y_wBmpMm1#PPo+Z^ z`PbA}y`)CU&ViN20WrK@M{6HHE1enSX+L49#V+?7@*|)Z|G_)>3pKRzVSUTV_JL5W i;DyY%XW-){geD?u^uG6T?qvAvFBaX!+qsCwRQ($)<0|n0 literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/lion/run1.png b/resources/image/character/animal/lion/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..4f6602d1ccd7e80a514cea0d52c7051d692da135 GIT binary patch literal 2258 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 Z9A)xkeUGuu(rormgu~jxEOXzL_-|st$@l;O literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/ostrich/run1.png b/resources/image/character/animal/ostrich/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..05f73a059a137a3e570eb0f3ab5e538582b9f029 GIT binary patch literal 2097 zcmbVNc~}#78V*-DEP{^#VGCsli#2GDNk~W{i3Ac3cg*{~-|_pt zXNn@jgKTa7WP`)uY(s*DVr=xp9;y`{dn+u=AZ&0(MKNd;l89!=G!RapKoTGzL?ugt z#E?vpnSK@W#o^2nm68}VCM=XIM^qG<5kt|d)EFCw^WCIZ%jBsL3M4>DN|;BS`Ldk| zC>1>7Hf9(tOdS9vD}(oFpr}3J68WA~IY&X<#0Px!TueX(p)x?PN`tjrJ&*W8my6Af z+f*X(0)nRUh%cRr35x^*5Df${DGail27&;KMFG8;EEc!{pwmD)m4@9cGU&}^vbb~~ z;MGOMtZ5X9T(L0ll`U+=BPOG$noFf-WMoh>7!*X4L(SM-NmZh!`op@>F;AZg1L5Sfgih&CBf z0|8MiVBIz)tUxlfB;)bCj8+I~l)E8CpaxL^FY?P(zQO+gj{7B7@&DwEiaA3y7RP@T z%kmahfyU|U(#ICBn+Jlij?rMPk^Ix`Z8)5{EJP@f=!d$icLo!-626(Cm?gjsj=|;+ z^XtdsoGtM4r7{1=C#)*7<2$Uf*={~~?VqKBUrja(FEt&vH@_E<5FIg^S8nG{*j(B+ zm|x{qb8KDcQv0;?jU6+OZlr-(yQ&9kzR1d1$m!!O+_APgMwb7`s%SkM&-ds%_)Z4? zw~Z$4hS+y*eVErt{5c-g_nh5<#4M*$XFgN>;x8+@*|fK{I{0v>0UNa_%cqPF+M&!Qsw?j17zU zf-Azfpa`I)B>a?!>Gzd?3z=$}a%1PmwCc9GfJW%n{fT|TA={NBKP=sHadQK6e*bN4 zpKnmTZqfJPUN@(zkrd~L*P>R-&u{8@Hf9$teQ%cB=7lRMmnHq7p_U@*_%`fcCm(+fd$ zYY+PEjQh1-T5MM4f6@`UC#0FvX*_b^8b_98MJ@T1jm`M{FOSYt7m*C9JFVsU{ZGqE zj!HJh??@}Te%-3pD|fJ}hV((pnI6XFG6+%>W@S(ZPnizq+P>@5dqHAZ=4NkS;11AN z2A-!j4DGw}sde`0xxITCwho0oQvjRK6}!)+_uQUNP*ps3g`KYVJf56uJN@bQxb&fi zBn?_@?lAZG%fe)2<};lYAoTi6N#_xlYXxX;`hcSkYdlkzJ&Z39)VZx+)F;nPb!}NE z<=E>wvti8#@p;YslTl=a)9o6T?F0FTby2hRPa5OEs{_rsQt6S(By(#LJ}BJ0+tT9L z#no^{@xXxe-QB2Zr&X}~v!Yfr{yto%mcK9D&>=M=IL{|ND2KWZM6cgl8+h7mGhVPi z?ck(ShhJJp?r4f?t4%HNWUh7t>1&e#--*h@`mESJXR^|zH>X8Eyv?aM`=rwTu84P@ z_dcoPxiDouD1M6$v_A^ydYk&v?JgUDL1&wyxr@H3BCEBh9d9~W1_pXG{G4xDaK%GO+^u6 zA-2$%dUy^j!3JN!RPF_tuF+0@=NwmWviWJ8X|%4GKA%;;*kWA@(!O6&Jxld!_IrO# z_m6|K;jcSix l(O-cnixxsMK!jvsGMW$pL6Ae= zvlCLn`R5vY-+$W;tY0Q5$efz6HE z1PFWsL6ZZZw@wMeBS99Tgh2}4$6HJ!kw7XHPx7TusU$CuOeB#BMC_(|lYAKzDue6? zzPljIno^R$;Il*C*}_%Mh!CA8$)=jQst;f<1JUY ztthZzl~^fNpi)E*8WlzH$N@9}!aRK&f=m$}{$5zFdY33HWdw~#K_KCY1ewej*Bi77 z<-@QkhNN`&rW4ZfvLq;Ix4I@G+#STT3!bZdgWUw6Numd3M z3tl3XF#LRd$TT92LZ>mA!88(yPV)&4_N9abll`bH8kw}B@gZ&yk>wjip^}+QI-5ia zrUjAwh%{dskwppdqtIEb6)s1vLPc^hykb|1*?q?){VJEiQoQ3?Rk@5bQAq{+rnDk?cedmnQAN!vM0r+Wgd$zC!&>SxMu`gT>W5 ztkaT_WUhs^6W`>c_W2ljW;=kY$M?G_!hmh5n!PRQbAu0DdqoPvGwOY-OW?ZGeamI# zRMW2d4uv%*GxNR`G`rgI%fc$NkM8_lASs^?bJzJ-O?rZ9gum!qPTJKtT<^VS78-Y# z#i~N$A0VT}UTbj|{^*~vmEjqZbMm=?>l^BEAfqnXslKWDGVRt@GKA_)OhY`o6t;&OHs;R?vVcWt2y8)PrKb@Ymm-W z_uF_k;fR*M<#j{P?C>eW$Hj*(pWWZ;Fx@x$ucd|CR>MF3W&=%ds_y!=*skwe56SES z0J4osiuqFovRKKBZZM2J`Fc3wA6JEO8&|be^R9StXLSWNJ*>^+bTGYW=}E_n%VtsO zk+u8W?a0r4f4bt=Z()P0U>x?ZFhGqHak%m3u?@`7V-T?nNOikEaK=#jRTYJDdMeb# zCf{CnL{mSN-SUG;{zS_UldF!OvkD_O_B>?Hj-@Z|sV*Tu8N6=t=WM7mDQ6-nQq2WA z==JmnPMV#YX>2s;K|fy_I;nI!T%OCF8!j_wrkKgKXx5bAitBo3pG*I=ZtuFJ`=XIH zU6T;{vP9r&J!%1C!`hF*!QAcd{3<8Ac2G5ER4z=<9D);W@p+0Z?;(<`%y)Evx@P?ha;%u-a; zsGLgje~vaA@6NW^+jqm!A-*mB6N5{GUe}(NXPaQMgXQ`2`mCz{U1v&`OLQ*RE%Aj9 z=@F3h-*T<{VfDdQCGNthm6S+3TgP#~ED1ta>_6DDKFA00{z4rvLx| literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/rabbit/run1.png b/resources/image/character/animal/rabbit/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..3a277673704c40d1d69dd24916cda6ebd685d9f6 GIT binary patch literal 1545 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}s!3HGR;=b(xQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{&CLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}t-3#_`hBq$Z(46Le)Ln;eW^@CE2 z^Gl18f$@>14ATq@JNy=b6armi@vTd0QD#|cid#{Bt^zoGtunFLPuSlOy(#2`nLf}l z`k=&tlvrRwz!V5#!jnFb1J69EdB7Y~1k4&Gzvi?tFfdtqx;TbZ+*%X1-`gorWZ(I? z3-?5v>K&rB&MPuaXKSCfZH`cpK}MGGtVPo@fUFfOw@qtno2H;NDI}xd+R|lh3k-Ms zwEY|RJa)caZP~*|)z9x1?S-oodaqGEpXPuU; zo?4qNB)w5%p4H4$)3aSHzwXwB?PgbXSuOB(iAi)|ag^Tl(ABoj86TI&%zC>*04`HAY~}tlVqA@eu~9R`TjZ8H4XuOGpqK#b2V6{p3U$3erHisfcWxd3o7qM?f6m=?$ML!1_pLldl3^z&1^qlX#iPuj(rT*I-Q_we zo`x$M4I@>AE=+l>lQZW@8k@}BTWPUe=|g6n%_snjO-ttA2U5 zS4q#si;`s>t&*p`EizX0|5oSiJIJRs<)`un%Rjl3H+kwOUc4{mqY!1_zF|SazrWL_ gPvqx*6yCtdkQzSc>7+w0OF@ORr>mdKI;Vst0Cq$=?*IS* literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/rabbit/run2.png b/resources/image/character/animal/rabbit/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..7f051571c6849f04b7ae3e852c5f6d937fd9a581 GIT binary patch literal 1533 zcmeAS@N?(olHy`uVBq!ia0vp^vOp}s!3HGR;=b(xQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?{&CLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}t-3#_`hBq$Z(46Le)Ln;eW^@CE2 z^Gl18f$@>14ATq@JNy=b6armi@vTd0QD#|cid#{Bt^zoGtunFLPuSlOy(#2`nLf}l z`k=&tlvrRwz!V5#!jnFb1J69EdB7Y~1k4(Hm7E(G7?^ZDT^vIyZmkL1?|s-oWZxCx zJ9C#jkbjUCean$Wyq!-kuPkVTGpqXcuE{Ty<}#(NSTH$HkB?8UsUsqXn{V!IS9SJ- zffm1GYd=1nWpegvv-0%m)!+Ai-zzV!sN-ffJG5e&w)-i!_*)EN-(EfX`7lg$TDQQ; zUEANQSSqI`XV#?#`WUTo*uTp^>H7k%eAYd_UYnDpgRhsmF1LQn{Mb_O?4@aoO04eA zj}Wa*nEgZT+qUbkU;g~HOhm(Och1Vf6@I=WUYmXuLRak9fk6XDL|-BVWlGjTY>%N+ZDin``38jaeY%y$z?ogMO?BC`0QN%r`f-OmTYO|+xefz}=t%@~826;<*Hcc~2{q*|Q zt_^-Ja(~U-c+a$l3;&b6(99{iaZ|G#!0iuC-o{e$uW27CL( UC6?3j%s>UQr>mdKI;Vst09M;He*gdg literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/snail/run1.png b/resources/image/character/animal/snail/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..8b5cf3d62a89f89999dccf6d2b933e552a2558c0 GIT binary patch literal 1178 zcmbVMO=#3w6b??cqAem7f2!bpDTq&<$s{wGCb6Tc)*I;z~j5P1~t1ih?1@{mJ>h@0@eb z$yl~)U-PQgRTM=vr}ry4evVlqvq%Ex%=AdQ_ z9=!)UC@N4k^95YU9F%lqg*4wLRI?m{rl^j+HAmC?AOv0sFpW5UgwKRC zP7+qk{X;J79_q^LLw&kv(0liQj+#UWEQmEwv-)jMs>SI!UWv^8ZH5MOCb%z7&pTDf zWI+#h{Zx|l#j*OU4RR-91|vYEXYPBJ|=PPVBw;PnroD$oRV75BC9xE z!Pt=)rdq9rs*wY zA>WXABOP*0awuBAg7g6k+BmJmY4Rmxn1<9Ijc`I(;6*`}Re@ziA)=~LKBaQ)v82GU zb&jR5VJ?+mRbG~5QDs?GNN|aioD_Mvo#)j=Dq6>;Z4Ya<4(qxm(Otlbzr;#O7it)} zd4&4w6_BkUjJyhRK(adqwjVKV1694h{o|RBR)Ma03>qmHSzs=|lDUNb@8h1w8h?^A zhB(9c#qm?I)VD|l`qRbICyT}Afi~$Fm$b&f;hFQKt?s84IbVBOG5~e6yD&TP{C{sa zGE!NeXnl83-Kd-#PpXC4(I~g}$%&@U<7b7IQ=P|_NheQ0KOtwz_b8Fj%(QA>$p1?|~VI$S^HhXpK!Rc}TZ;@8JlxvCN$agCHehdHr literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/snail/run2.png b/resources/image/character/animal/snail/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..b963ac0382a268a155a83356977d22d58825e05d GIT binary patch literal 1169 zcmbVMU1-}@6c!7lX-M|azd7Acgp$F+X6wh6EQ>g)D#?vUod(-9E|gM5x`{JS?O5gS}wvo58Wo$3&9+Hqgv}Lf@Qd$ay(o$0T&^{DOaj)Vy-9zYLLel-w z`M&R*bI;NI$nc@g_WkVyL3Cz^)I1(L!l$hjzmHBGe~gDNq?J$sj-#sX0YWz67$CE@ zJ^}JTH>bb31^Nl1W!x&3P$_pJ%~DfPm@6fzTsIevYI$KOm8P8l8OF3rXm+P1^EHmrS=2k+e2*4i&lyMWFEA5M7&K9BL9 zCK%`L{X(H3_C`A5S@=-&iVBS>8#pMdrYZa-W?H6{OvE{n5&4uT%bLitDKV~T2|lB7 zNkI`gw#l&_mJzvRQsEg{PH8NwiQ++4P&7r5877s9CzK{O>-b1_4A9iIuxSq${!$QXgOy{o;zUDrW-kd+Zvv(FylEY6i+_6T=bvg~ORf9B_bY$w`KT5@x&FF(g1dHq_4dly%C74VFC_=& zEOVvpMeohlh1N*$YW?H23rCi_Uh=P2XBRHWKc3xnjof|ZG|~NK<^V(O`26qgo5a4z v(naIO-rt|FmvW(&skna^N`nUXz@F$VghSgsVo}7CNS}}UD literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/turtle/run1.png b/resources/image/character/animal/turtle/run1.png new file mode 100755 index 0000000000000000000000000000000000000000..bab9e24e76b33a1f267d711b9771235d1a005770 GIT binary patch literal 1660 zcmeAS@N?(olHy`uVBq!ia0vp^sz5Bk!3HF2t4s=jlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#2IjQPkcg59UmvUF{9L_6kQ%*;T##-C1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr6b(Y-C|z zVQOjN=;&%;XlQ9+?CNS_>gH->Zsu%ZWC$|@n_eeZOGhUcGjm5rOBX{!R|`ugCr1|} z6C)#Y15;NsM+2B%&%EN2#JuEGn7x@md!c&G@ana4E=o--$uA1Y&(DFSfPjqrlKkR~ z`~n5%U^4}c@XWlF{PJQ=Q1n22>ylcOS(cjOR+OKs01jWPOf2>j_BTXt3OQk>4|I$^ zC~+Vq7MKt)1%jCHqz~l4Gf!$BFvk=DvqtW^8?_7!Olv${978H@?U{bwPt;K4n1A(i zBbS3N9374&OFP>{9lz~saFJ{7jg~*C{(&6^U(%t`9~Jqg@k~8i zkU#Zw@ZXI6^Xs{$FT{`m;$7%Gno7$v7r1X-JKA&^vSMlTXpEGIj+)p2izN zSL5Dkp71ySeA?WI>*VeRftG}Q^I~3TtD1$UKRg+e7p&Lco5i-`&z=a!HNR&!m^1E; z+WC6xPOa7imfNg736GXu3IG2!|8`&2)7zpE*H~MGk6sdEYN?&Ya8ud%{Iu=)B~gMt zKfOO~n_6qHJ?YXlmM?D(PFa6tCI7>Fi@UCfnf|)@R6^|Cmr1^|OqY|gv@{QQ|CQ$7 zX~2>b$`icZ%AWW6;*I}$5=;($Zru}nafwpafvmbsykJc$j^f;TU&2~`bU3&Rj-|JfjbsBHPS-$Bzc5}{GZ{E%r zx%7nptA3lET8wW09{d+hDT!Tt>WFMs{=Bes|M%kT8x<3tD#WpwRH!)lzq)d_JLmtx zU3Dg_k8*UJ4d>sH@Pt*TXv?hvhdVkquHQ|y3SFh&Yt0$4*6*PL%d=UR56NCV@5OY; z?u%B?o7P3fo(3PkIL_8qL_v;4jGhtf8doqgv*{H*VVw z?+xeq=sNdVel34n;n$0MlxNymtlZa@>Gu5F!i6V4Z`kJbKE!?f&PMC$?+f1_dCq)q w#Vl)o;gn1K?H}Bmqup-(I`V7jk$6Tnh8s=U)w1sSdZ7Bi)78&qol`;+0A_=7@Bjb+ literal 0 HcmV?d00001 diff --git a/resources/image/character/animal/turtle/run2.png b/resources/image/character/animal/turtle/run2.png new file mode 100755 index 0000000000000000000000000000000000000000..19623a4921ba2a5eb90082a64d8f946e75ab65a0 GIT binary patch literal 1635 zcmeAS@N?(olHy`uVBq!ia0vp^sz5Bk!3HF2t4s=jlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6H#2IjQPkcg59UmvUF{9L_6kQ%*;T##-C1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v)=f4rG*mD%(=#+N zH8V5RQ7|$vG}1Q!A~Rh>6Dw0QDv55FG|-pw6wGYnPFt43sj+7T$xvrSfQI&tPC^3CAB!YD6^m>Ge1uOWMX1cerbuV z640d(FXR^Z`oay)D~1LXFv#>P5)1SV^$hfLb3y(Bt1d1HN<}yWtLoyA%7Rq=pw#00 z(xPNwe55JEGy}s9zeOO0K-XCL7i9t?B{9b(Ke;qFHLt|e#a0O@qnDDIVr6b(Y-C|z zVQOjN=;&%;XlQ9+?CNS_>gH->Zsu%ZWC$|@n_g#Q6AMcxBS%L^OBX{!R|`jA*tr^; zxw%+4S-2XQ7{T;<<`tJD<|U`X?9Bw)3)O3hSFe?GQEFmIeo;t%ehw@J1Z3owrX%XO)wyl`d>Y?(AG0A9+b#D0k zD}JT^-^(_#YrTBqbKd7`xP9zZ?W3|?HF_p{ugACW>?@z{kQLnVEzCB&hNpSs!cCD+ zBX-`&WWWFW-|h)A3p^7hac|yic)scW`&iQl0$eT3)0Q@9oH_PM$2#V>?LtPLh9^O` z_7)}+suzF#8ZFxrqN%{(IOFl>Y-@{8X|;Z9&OU!U;q~TI*`gO7d_F9dbonle7TcGs z(ql6h$9*~|V8+Um@YFlk{rA`NA8jhM@2@<#Nkl+LgljhcgZ;wHQ?##I-9EQ(VbVO9^{JVdGT^_-|Lm!;!SbQ;)QxMUQDlVPx@HbJ@<;8fz;&>lRSTX%9!FT z!q#{^?u+yGeFgr1c1qoU+*zaQ?r}`y}J;UI(d`Nj5A`u4poxvYS$7{cA1rlwVyt4Gau;Gd`wl zHIaJ#Z_>vjo_ca;wytsd!5cY8sD;te)at43o|J_-H|}XiOSko({>aQS+wFqH|7xEP zo(_J_Z3fe#l~-Jyd?(Out%68JH}hkMKm{$1=cj+3Rj_#fJmtUZLlHkS5vIg53uoLs zm3{5%{gx@Qm!FF7ne{3A%bCC{Yo)VZw+mhIxRCqx+wA+S<@5K4=E{1$5o=f?z|r?% z!t7TU-X_e=y?pzgY5$QxjazGLJvQ*zOlDgAS<&E4_7@X@)~37ap%SsRP1}Y`njxgN@xNA#Q|yt literal 0 HcmV?d00001 diff --git a/src/game/lib/animal.js b/src/game/lib/animal.js new file mode 100644 index 0000000..3cd1b17 --- /dev/null +++ b/src/game/lib/animal.js @@ -0,0 +1,131 @@ +class Animal { + + constructor(type, x, y) { + this.animalType = type; + + this.sprite = null; + this.posX = x; + this.posY = y; + } + + animalLevelIDByRecord(record) { + if(sessionStorageManager.playingAppID <= 20) { // practice + for(let i = 0; i < Animal.SPECIES_DATA.length - 1; i++) { + if(record < Animal.SPECIES_DATA[i].practiceTypingCount) + return i; + } + } else { // test + for(let i = 0; i < Animal.SPECIES_DATA.length - 1; i++) { + if(record < Animal.SPECIES_DATA[i].testTypingCount) + return i; + } + + } + + return Animal.SPECIES_DATA.length - 1; + } + + loadSpriteNames() { + let spriteNames = {}; + + spriteNames.icon = this.species.species + Animal.SPRITE_NAMES.icon; + + spriteNames.run1 = this.species.species + Animal.SPRITE_NAMES.run1; + spriteNames.run2 = this.species.species + Animal.SPRITE_NAMES.run2; + + return spriteNames; + } + + setSpecies(species) { + this.species = species; + + if(this.animalType === Animal.TYPE_ICON) + return; + + this.setupAnimation(); + } + + tweenAnimation(animationType) { + switch(animationType) { + case Animal.ANIMATION_TYPE_CHANGE: + this.sprite.width = 70; + this.sprite.height = 70; + game.add.tween(this.sprite).to( { width: 50, height: 50 }, 500, Phaser.Easing.Bounce.Out, true); + break; + + case Animal.ANIMATION_TYPE_DAMAGE: + this.sprite.width = 100; + game.add.tween(this.sprite).to( { width: 50 }, 500, Phaser.Easing.Bounce.In, true); + // game.add.tween(this.sprite).to( { width: 50 }, 500, Phaser.Easing.Elastic.Out, true); + break; + + } + + } + + setupAnimation() { + this.spriteFrameNames = this.loadSpriteNames(); + this.playingSpriteFrameName = this.spriteFrameNames.run1; + this.animationFrameID = 1; + this.animationSpeedSec = 1000 / this.species.runningFPS; + + if(this.sprite === null) { + this.sprite = game.add.sprite(this.posX, this.posY, this.spriteFrameNames.run1); + this.sprite.anchor.set(0.5); + this.sprite.width = 50; + this.sprite.height = 50; + } + + this.stopAnimation(); + this.animateionUpdate(); + } + + startAnimation() { + if(this.timerEvent === null) + this.timerEvent = game.time.events.loop(this.animationSpeedSec, this.animateionUpdate, this); + } + + animateionUpdate() { + this.animationFrameID = 1 - this.animationFrameID; + + if(this.animationFrameID === 0) { + this.sprite.loadTexture(this.spriteFrameNames.run2); + } else { + this.sprite.loadTexture(this.spriteFrameNames.run1); + } + } + + stopAnimation() { + if(this.timerEvent !== null) { + game.time.events.remove(this.timerEvent); + this.timerEvent = null; + } + } +} + + +Animal.TYPE_ANIMATION = 0; +Animal.TYPE_ICON = 1; + +Animal.ANIMATION_TYPE_CHANGE = 0; +Animal.ANIMATION_TYPE_DAMAGE = 1; + + +Animal.SPECIES_DATA = [ + { "species" : "snail", "runningFPS" : 1.1, "practiceTypingCount" : 5, "testTypingCount" : 10 }, + { "species" : "turtle", "runningFPS" : 5.5, "practiceTypingCount" : 10, "testTypingCount" : 20 }, + { "species" : "cat", "runningFPS" : 10.1, "practiceTypingCount" : 20, "testTypingCount" : 30 }, + { "species" : "lion", "runningFPS" : 15.5, "practiceTypingCount" : 30, "testTypingCount" : 50 }, + { "species" : "rabbit", "runningFPS" : 20.2, "practiceTypingCount" : 40, "testTypingCount" : 100 }, + { "species" : "ostrich", "runningFPS" : 25.5, "practiceTypingCount" : 50, "testTypingCount" : 200 }, + { "species" : "horse", "runningFPS" : 30.3, "practiceTypingCount" : 60, "testTypingCount" : 300 }, + { "species" : "dog", "runningFPS" : 35.5, "practiceTypingCount" : 70, "testTypingCount" : 400 }, + { "species" : "cheetah", "runningFPS" : 40.4, "practiceTypingCount" : 80, "testTypingCount" : 500 }, + { "species" : "eagle", "runningFPS" : 45.5, "practiceTypingCount" : 1000, "testTypingCount" : 1000 } +]; + +Animal.SPRITE_NAMES = { + "icon" : "_icon", + "run1" : "_run1", + "run2" : "_run2" +}; \ No newline at end of file diff --git a/src/game/result/result.js b/src/game/result/result.js index 8aa1cb3..dc723fb 100644 --- a/src/game/result/result.js +++ b/src/game/result/result.js @@ -5,6 +5,47 @@ class Result { preload() { game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png'); + + this.game.load.image('snail_icon', '../../../resources/image/character/animal/snail/run2.png'); + this.game.load.image('snail_run1', '../../../resources/image/character/animal/snail/run1.png'); + this.game.load.image('snail_run2', '../../../resources/image/character/animal/snail/run2.png'); + + this.game.load.image('turtle_icon', '../../../resources/image/character/animal/turtle/run2.png'); + this.game.load.image('turtle_run1', '../../../resources/image/character/animal/turtle/run1.png'); + this.game.load.image('turtle_run2', '../../../resources/image/character/animal/turtle/run2.png'); + + this.game.load.image('cat_icon', '../../../resources/image/character/animal/cat/run2.png'); + this.game.load.image('cat_run1', '../../../resources/image/character/animal/cat/run1.png'); + this.game.load.image('cat_run2', '../../../resources/image/character/animal/cat/run2.png'); + + this.game.load.image('lion_icon', '../../../resources/image/character/animal/lion/run2.png'); + this.game.load.image('lion_run1', '../../../resources/image/character/animal/lion/run1.png'); + this.game.load.image('lion_run2', '../../../resources/image/character/animal/lion/run2.png'); + + this.game.load.image('rabbit_icon', '../../../resources/image/character/animal/rabbit/run2.png'); + this.game.load.image('rabbit_run1', '../../../resources/image/character/animal/rabbit/run1.png'); + this.game.load.image('rabbit_run2', '../../../resources/image/character/animal/rabbit/run2.png'); + + this.game.load.image('ostrich_icon', '../../../resources/image/character/animal/ostrich/run2.png'); + this.game.load.image('ostrich_run1', '../../../resources/image/character/animal/ostrich/run1.png'); + this.game.load.image('ostrich_run2', '../../../resources/image/character/animal/ostrich/run2.png'); + + this.game.load.image('horse_icon', '../../../resources/image/character/animal/horse/run2.png'); + this.game.load.image('horse_run1', '../../../resources/image/character/animal/horse/run1.png'); + this.game.load.image('horse_run2', '../../../resources/image/character/animal/horse/run2.png'); + + this.game.load.image('dog_icon', '../../../resources/image/character/animal/dog/run2.png'); + this.game.load.image('dog_run1', '../../../resources/image/character/animal/dog/run1.png'); + this.game.load.image('dog_run2', '../../../resources/image/character/animal/dog/run2.png'); + + this.game.load.image('cheetah_icon', '../../../resources/image/character/animal/cheetah/run2.png'); + this.game.load.image('cheetah_run1', '../../../resources/image/character/animal/cheetah/run1.png'); + this.game.load.image('cheetah_run2', '../../../resources/image/character/animal/cheetah/run2.png'); + + this.game.load.image('eagle_icon', '../../../resources/image/character/animal/eagle/run2.png'); + this.game.load.image('eagle_run1', '../../../resources/image/character/animal/eagle/run1.png'); + this.game.load.image('eagle_run2', '../../../resources/image/character/animal/eagle/run2.png'); + } create() { @@ -57,13 +98,29 @@ class Result { titleText.setShadow(3, 3, 'rgba(0, 0, 0, 0.5)', 2); titleText.anchor.set(0.5); - let posY = 120; + + let x = game.world.width / 2; + let y = 150; if(sessionStorageManager.record === null) sessionStorageManager.record = 0; let record = NumberUtil.numberWithCommas(Math.floor(sessionStorageManager.record)); style.font = "80px Arial"; + + if(sessionStorageManager.playingAppID < 100) { + let leftAnimal = new Animal(Animal.TYPE_ANIMATION, game.world.centerX - 200, 150); + let animalLevelID = leftAnimal.animalLevelIDByRecord(sessionStorageManager.record); + leftAnimal.setSpecies(Animal.SPECIES_DATA[animalLevelID]);; + // leftAnimal.tweenAnimation(Animal.ANIMATION_TYPE_CHANGE); + leftAnimal.startAnimation(); + + let rightAnimal = new Animal(Animal.TYPE_ANIMATION, game.world.centerX + 200, 150); + rightAnimal.setSpecies(Animal.SPECIES_DATA[animalLevelID]);; + // rightAnimal.tweenAnimation(Animal.ANIMATION_TYPE_CHANGE); + rightAnimal.startAnimation(); + } + let scoreText = game.add.text( - game.world.width / 2, 150, + x, y, record + StringUtil.getScoreUnit(sessionStorageManager.playingAppID), style ); diff --git a/src/game/typing/practice/game.js b/src/game/typing/practice/game.js index 4bd28d2..0e6aac0 100644 --- a/src/game/typing/practice/game.js +++ b/src/game/typing/practice/game.js @@ -20,6 +20,10 @@ class TypingPractice { location.href = '../../web/client/menu_typing_practice.html'; }); + this.animalOnTitle = new Animal(Animal.TYPE_ON_TITLE, game.world.centerX - 200, 30); + this.animalOnTitle.setSpecies(Animal.SPECIES_DATA[0]); + this.animalOnTitle.startAnimation(); + this.typingScore = new TypingScore(); this.stageTimer = new StageTimer( TypingPractice.STAGE_TIMER_SEC, () => { @@ -138,6 +142,8 @@ class TypingPractice { this.leftHand.moveToDefaultPosition(); this.rightHand.moveToDefaultPosition(); + this.animalOnTitle.stopAnimation(); + let gameOverText = new GameOverText(); game.time.events.add(Phaser.Timer.SECOND * 2, this.goResult, this); } @@ -160,6 +166,8 @@ class TypingPractice { // console.log(this.typingRandomContents); this.typingContentLength = this.typingRandomContents.length; this.typingIndex = 0; + + this.playingAnimalIndex = 0; } @@ -352,6 +360,13 @@ class TypingPractice { if(this.isKeyPressed(inputContent, typingContent)) { this.typingScore.increase(); + let animalLevelID = this.animalOnTitle.animalLevelIDByRecord(this.typingScore.score()); + if(animalLevelID > this.playingAnimalIndex) { + this.playingAnimalIndex = animalLevelID; + this.animalOnTitle.setSpecies(Animal.SPECIES_DATA[this.playingAnimalIndex]);; + this.animalOnTitle.tweenAnimation(Animal.ANIMATION_TYPE_CHANGE); + this.animalOnTitle.startAnimation(); + } this.playNextContent(); if(this.typingIndex === this.typingContentLength) { @@ -359,6 +374,11 @@ class TypingPractice { } } else { this.typingScore.reset(); + + this.playingAnimalIndex = 0; + this.animalOnTitle.setSpecies(Animal.SPECIES_DATA[this.playingAnimalIndex]);; + this.animalOnTitle.startAnimation(); + this.animalOnTitle.tweenAnimation(Animal.ANIMATION_TYPE_DAMAGE); } } diff --git a/src/game/typing/practice/loading.js b/src/game/typing/practice/loading.js index c583320..b81f24f 100644 --- a/src/game/typing/practice/loading.js +++ b/src/game/typing/practice/loading.js @@ -42,6 +42,47 @@ class Loading { this.game.load.image('hand_little_finger', '../../../resources/image/ui/hand_little_finger.png'); this.game.load.image('hand_ring_finger', '../../../resources/image/ui/hand_ring_finger.png'); + this.game.load.image('snail_icon', '../../../resources/image/character/animal/snail/run2.png'); + this.game.load.image('snail_run1', '../../../resources/image/character/animal/snail/run1.png'); + this.game.load.image('snail_run2', '../../../resources/image/character/animal/snail/run2.png'); + + this.game.load.image('turtle_icon', '../../../resources/image/character/animal/turtle/run2.png'); + this.game.load.image('turtle_run1', '../../../resources/image/character/animal/turtle/run1.png'); + this.game.load.image('turtle_run2', '../../../resources/image/character/animal/turtle/run2.png'); + + this.game.load.image('cat_icon', '../../../resources/image/character/animal/cat/run2.png'); + this.game.load.image('cat_run1', '../../../resources/image/character/animal/cat/run1.png'); + this.game.load.image('cat_run2', '../../../resources/image/character/animal/cat/run2.png'); + + this.game.load.image('lion_icon', '../../../resources/image/character/animal/lion/run2.png'); + this.game.load.image('lion_run1', '../../../resources/image/character/animal/lion/run1.png'); + this.game.load.image('lion_run2', '../../../resources/image/character/animal/lion/run2.png'); + + this.game.load.image('rabbit_icon', '../../../resources/image/character/animal/rabbit/run2.png'); + this.game.load.image('rabbit_run1', '../../../resources/image/character/animal/rabbit/run1.png'); + this.game.load.image('rabbit_run2', '../../../resources/image/character/animal/rabbit/run2.png'); + + this.game.load.image('ostrich_icon', '../../../resources/image/character/animal/ostrich/run2.png'); + this.game.load.image('ostrich_run1', '../../../resources/image/character/animal/ostrich/run1.png'); + this.game.load.image('ostrich_run2', '../../../resources/image/character/animal/ostrich/run2.png'); + + this.game.load.image('horse_icon', '../../../resources/image/character/animal/horse/run2.png'); + this.game.load.image('horse_run1', '../../../resources/image/character/animal/horse/run1.png'); + this.game.load.image('horse_run2', '../../../resources/image/character/animal/horse/run2.png'); + + this.game.load.image('dog_icon', '../../../resources/image/character/animal/dog/run2.png'); + this.game.load.image('dog_run1', '../../../resources/image/character/animal/dog/run1.png'); + this.game.load.image('dog_run2', '../../../resources/image/character/animal/dog/run2.png'); + + this.game.load.image('cheetah_icon', '../../../resources/image/character/animal/cheetah/run2.png'); + this.game.load.image('cheetah_run1', '../../../resources/image/character/animal/cheetah/run1.png'); + this.game.load.image('cheetah_run2', '../../../resources/image/character/animal/cheetah/run2.png'); + + this.game.load.image('eagle_icon', '../../../resources/image/character/animal/eagle/run2.png'); + this.game.load.image('eagle_run1', '../../../resources/image/character/animal/eagle/run1.png'); + this.game.load.image('eagle_run2', '../../../resources/image/character/animal/eagle/run2.png'); + + // this.game.load.image('hand_left', '../../../resources/image/ui/hand_left.png'); // this.game.load.image('hand_right', '../../../resources/image/ui/hand_right.png'); // this.game.load.image('a', '../../../resources/image/icon/fullscreen_white.png'); diff --git a/src/game/typing/test/average_typing_speed.js b/src/game/typing/test/average_typing_speed.js index 997b0b0..de2d7a5 100644 --- a/src/game/typing/test/average_typing_speed.js +++ b/src/game/typing/test/average_typing_speed.js @@ -5,13 +5,13 @@ class AverageTypingSpeed { fontStyle.align = "right"; fontStyle.boundsAlignH = "right"; - this.label = game.add.text(0, 0, "현재 타수 : ", fontStyle) - .setTextBounds(0, 0, game.world.width / 2, AverageTypingSpeed.FONT_HEIGHT_PX); + this.tytleSpeedText = game.add.text(game.world.width / 2 + 20, AverageTypingSpeed.FONT_HEIGHT_PX, "현재 타수 : ", fontStyle); + this.tytleSpeedText.anchor.set(1, 0.5); fontStyle.align = "left"; fontStyle.boundsAlignH = "left"; - this.typingSpeedText = game.add.text(game.world.width / 2, 0, "0", fontStyle) - .setTextBounds(0, 0, game.world.width / 2, AverageTypingSpeed.FONT_HEIGHT_PX); + this.typingSpeedText = game.add.text(game.world.width / 2 + 20, AverageTypingSpeed.FONT_HEIGHT_PX, "0", fontStyle); + this.typingSpeedText.anchor.set(0, 0.5); // var grd = this.label.context.createLinearGradient(0, 0, 0, AverageTypingSpeed.FONT_HEIGHT_PX); // grd.addColorStop(0, '#8ED6FF'); @@ -30,7 +30,7 @@ class AverageTypingSpeed { } -AverageTypingSpeed.FONT_HEIGHT_PX = 70; +AverageTypingSpeed.FONT_HEIGHT_PX = 30; AverageTypingSpeed.DEFAULT_TEXT_FONT = { font: "38px Arial", diff --git a/src/game/typing/test/game.js b/src/game/typing/test/game.js index 5f3105e..ad2715c 100644 --- a/src/game/typing/test/game.js +++ b/src/game/typing/test/game.js @@ -18,6 +18,11 @@ class TypingTest { location.href = '../../web/client/menu_typing_test.html'; }); + this.animalOnTitle = new Animal(Animal.TYPE_ON_TITLE, game.world.centerX - 200, 30); + this.animalOnTitle.setSpecies(Animal.SPECIES_DATA[0]); + this.animalOnTitle.startAnimation(); + + this.averageTypingSpeedText = new AverageTypingSpeed(); this.contentProgressText = new ContentProgress(); @@ -149,6 +154,8 @@ class TypingTest { gameOver() { let gameOverText = new GameOverText(); + this.animalOnTitle.stopAnimation(); + game.time.events.add(Phaser.Timer.SECOND * 2, this.goResult, this); } @@ -310,7 +317,7 @@ class TypingTest { let inputContent = this.inputTextContent.canvasInput.value(); let typingContent = this.typingRandomContents[this.typingIndex]; - if(inputContent == typingContent) { + if(inputContent === typingContent) { this.calculateTypingRecord(typingContent); this.playNextContent(); @@ -383,12 +390,19 @@ class TypingTest { // console.log(typingElapsedTimeTotal); // console.log(typingRecordTotal); - this.averageTypingSpeedText.print(Math.floor(this.typingRecordTotal)); + let typingRecordTotalInteger = Math.floor(this.typingRecordTotal); + this.averageTypingSpeedText.print(typingRecordTotalInteger); // console.log('-------------- total --------------'); // console.log('typingLetterCountTotal : ' + this.typingLetterCountTotal); // console.log('typingElapsedTimeTotal : ' + typingElapsedTimeTotal); // console.log('typingRecordTotal : ' + typingRecordTotal); // console.log('-----------------------------------'); + + let animalLevelID = this.animalOnTitle.animalLevelIDByRecord(typingRecordTotalInteger); + this.animalOnTitle.setSpecies(Animal.SPECIES_DATA[animalLevelID]);; + this.animalOnTitle.tweenAnimation(Animal.ANIMATION_TYPE_CHANGE); + this.animalOnTitle.startAnimation(); + } playNextContent() { diff --git a/src/game/typing/test/loading.js b/src/game/typing/test/loading.js index 568fa33..3a332f6 100644 --- a/src/game/typing/test/loading.js +++ b/src/game/typing/test/loading.js @@ -34,6 +34,48 @@ class Loading { startLoading() { this.game.load.image('icon_fullscreen', '../../../resources/image/icon/fullscreen_white.png'); + + this.game.load.image('snail_icon', '../../../resources/image/character/animal/snail/run2.png'); + this.game.load.image('snail_run1', '../../../resources/image/character/animal/snail/run1.png'); + this.game.load.image('snail_run2', '../../../resources/image/character/animal/snail/run2.png'); + + this.game.load.image('turtle_icon', '../../../resources/image/character/animal/turtle/run2.png'); + this.game.load.image('turtle_run1', '../../../resources/image/character/animal/turtle/run1.png'); + this.game.load.image('turtle_run2', '../../../resources/image/character/animal/turtle/run2.png'); + + this.game.load.image('cat_icon', '../../../resources/image/character/animal/cat/run2.png'); + this.game.load.image('cat_run1', '../../../resources/image/character/animal/cat/run1.png'); + this.game.load.image('cat_run2', '../../../resources/image/character/animal/cat/run2.png'); + + this.game.load.image('lion_icon', '../../../resources/image/character/animal/lion/run2.png'); + this.game.load.image('lion_run1', '../../../resources/image/character/animal/lion/run1.png'); + this.game.load.image('lion_run2', '../../../resources/image/character/animal/lion/run2.png'); + + this.game.load.image('rabbit_icon', '../../../resources/image/character/animal/rabbit/run2.png'); + this.game.load.image('rabbit_run1', '../../../resources/image/character/animal/rabbit/run1.png'); + this.game.load.image('rabbit_run2', '../../../resources/image/character/animal/rabbit/run2.png'); + + this.game.load.image('ostrich_icon', '../../../resources/image/character/animal/ostrich/run2.png'); + this.game.load.image('ostrich_run1', '../../../resources/image/character/animal/ostrich/run1.png'); + this.game.load.image('ostrich_run2', '../../../resources/image/character/animal/ostrich/run2.png'); + + this.game.load.image('horse_icon', '../../../resources/image/character/animal/horse/run2.png'); + this.game.load.image('horse_run1', '../../../resources/image/character/animal/horse/run1.png'); + this.game.load.image('horse_run2', '../../../resources/image/character/animal/horse/run2.png'); + + this.game.load.image('dog_icon', '../../../resources/image/character/animal/dog/run2.png'); + this.game.load.image('dog_run1', '../../../resources/image/character/animal/dog/run1.png'); + this.game.load.image('dog_run2', '../../../resources/image/character/animal/dog/run2.png'); + + this.game.load.image('cheetah_icon', '../../../resources/image/character/animal/cheetah/run2.png'); + this.game.load.image('cheetah_run1', '../../../resources/image/character/animal/cheetah/run1.png'); + this.game.load.image('cheetah_run2', '../../../resources/image/character/animal/cheetah/run2.png'); + + this.game.load.image('eagle_icon', '../../../resources/image/character/animal/eagle/run2.png'); + this.game.load.image('eagle_run1', '../../../resources/image/character/animal/eagle/run1.png'); + this.game.load.image('eagle_run2', '../../../resources/image/character/animal/eagle/run2.png'); + + // this.game.load.image('a', '../../../resources/image/icon/fullscreen_white.png'); // this.game.load.image('b', '../../../resources/image/icon/fullscreen_white.png'); // this.game.load.image('c', '../../../resources/image/icon/fullscreen_white.png'); diff --git a/src/web/client/result.html b/src/web/client/result.html index 131f9c4..1b6fbec 100644 --- a/src/web/client/result.html +++ b/src/web/client/result.html @@ -26,6 +26,7 @@ + diff --git a/src/web/client/typing_practice.html b/src/web/client/typing_practice.html index c6054e4..ed4278c 100644 --- a/src/web/client/typing_practice.html +++ b/src/web/client/typing_practice.html @@ -26,6 +26,7 @@ + diff --git a/src/web/client/typing_test.html b/src/web/client/typing_test.html index 6e60ad5..b7d4457 100644 --- a/src/web/client/typing_test.html +++ b/src/web/client/typing_test.html @@ -26,6 +26,7 @@ +