From e07339e3eb09e1d254fa42d0adeacf8388b4ebe9 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Sat, 4 Nov 2023 00:32:12 -0400 Subject: [PATCH] Add DNA splicers and Pokemon fusing --- public/audio/cry/646-black.mp3 | Bin 0 -> 11028 bytes public/audio/cry/646-white.mp3 | Bin 0 -> 12718 bytes public/images/items.json | 833 ++++++++++++++------------- public/images/items.png | Bin 57092 -> 25562 bytes public/images/items/dna_splicers.png | Bin 0 -> 293 bytes public/images/ui/summary_bg.png | Bin 1216 -> 4217 bytes src/battle-phases.ts | 65 ++- src/battle-scene.ts | 18 +- src/data/battle-anims.ts | 2 +- src/data/move.ts | 1 + src/data/pokemon-level-moves.ts | 57 +- src/data/pokemon-species.ts | 35 +- src/data/trainer-type.ts | 7 +- src/modifier/modifier-type.ts | 31 +- src/modifier/modifier.ts | 32 + src/pokemon.ts | 209 ++++++- src/system/game-speed.ts | 4 +- src/system/pokemon-data.ts | 12 + src/ui/battle-info.ts | 3 +- src/ui/party-ui-handler.ts | 30 +- src/ui/summary-ui-handler.ts | 24 +- src/ui/text.ts | 1 - 22 files changed, 879 insertions(+), 485 deletions(-) create mode 100644 public/audio/cry/646-black.mp3 create mode 100644 public/audio/cry/646-white.mp3 create mode 100644 public/images/items/dna_splicers.png diff --git a/public/audio/cry/646-black.mp3 b/public/audio/cry/646-black.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d84cd4c9241342dcdf54da9bde17182bb6f577b3 GIT binary patch literal 11028 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 T4gi4vABuxLoK^oF&+|V3WAsGL literal 0 HcmV?d00001 diff --git a/public/audio/cry/646-white.mp3 b/public/audio/cry/646-white.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d213f890811c3fa75572ee70f3f1aadb2f777259 GIT binary patch literal 12718 zcmd^lc{J4T|Mu9%jCBTMS2GO8BnCs0GMHg3Y3vkbH$;}Gq&{XC%-FIop)6yUy`oa~ zEhI^bgd|&`L{jFV@Avop<9Ysg&iS3+^Vjn}XU@!-_j%v<^}epx{krehb>FPr+0$m5C|sb<|J!-`?Kd=T|LPc zF9rk$UkST;lR}G)jZaES&B)HqyIWjbT2XPYzNxAC@v~Sp z11ev>L#68raaRUWx$af%nNQ87{h!W|=nRTTd)_OI%L8W5>nYK$g%Y8hDp=`kPu`#~ z8)w{h^LFkuR#dHIw7&NJ(;wc~59hLer2^oxjKutIgM z?3pI5KmC{L2cXORSP4kBbkyPd}+WQ7=&c@m`y07T2UM%(S=-D?Vl|UUn{> zbABLH#9NTKXr9&hbNQH#clWKEA9m!tKb}gzm1Dcb+P}o!uzuV?rD$QntX?1tz{6*X z(D&Ka&2Z`lfZ|STONmi;+!^*^ zcuqegZodrB%s#WNr%Ybk+;0E=`S}gwBrsKY`<+b%G6y_)b*B83q)j=+MaGzI;s-Gs zoj`Ko6hnsfJvd>b+jMPguR1hKyMkWxN_zan;_BKWt5Wu%m+M@SOcLQtGix`nYn1}c z%Qx8>0|EFxWK&RdOVxWJ#Ser{ zZy=iOsf9OhzAoJ{hlAJTckpsUPb54t&y>WgZH|+N0N^%lIZ#BFg3%UwK}*@$a})yN zlW6mpYTXWNq+bzII3zkj94zIL)Ss0ojw;CT5be>QhrH%eSw{lmuEC3XFzKy`nF zw!|juOH0%qOAQ2AqF}I%WPN<(ZNx}wUv5K{lg&h>Ch3`Az@%8%VM{lVv;1guzvDHz zC$k;FL;Nq?etz>mP4;qTJ$zDC_4>nJeq6%NVk>LOrwkhRAc*iFGDv7qxsM)Qhg)`& zKv_yV38)(x{J;<&v^3KxxlT67wY_ff__%I!&sNq*h>FF80LnsTP()gn{zb2kMU**s1W*-H#6<(fmc09yl6-lOQ{8PbdOxR+a62Cgo&1priPR-J+KQE%C zmBg+cmv?G(vOf(!(46XLadZdbFn2rZ_U=wLzxqqK74)7WuQyZZxu(FvoYo6VJ`~2c~rxJq>X5pJmf|_eL$DfH@U0~PDc&QYu}CD|wjUJGX^to+{qn3d zVm%}|E~I`;t3Oz_bM*O7mvkrEp$(v+5LlN(HeLjE^8OpwFv-=zqrXvuq>1m zT*r1LU_aeX!tdzMz34W2F8EKa2&p3w4@b!wupwapfi~4bQ?*}tC;*Un7D!v{HWNMq zff>7aSvW3_etdX7R3Cx5Cm&Vn7o4?L>JZEkS*EXG^6UN8nZ&LfBZ$nTjSm=sf>)Cof)=$cAftT6=N6d8LT;#?vI7?T{X;@L^7+a@N(I3*Wyf zdX&QN_IwB*`>gsewL$4;s7$6eLKvvJnZn<-JP)-p!rv>wDAPVAJH?(8zN3z&4m;L= zdYPY@Q=Vmb(MP%9R;27Oe=}706sA&kMckFocv@39P7G?%<9UHS%JkPJKl8h9qPjmB z`_b2xt?(pB^wnrT7xyS<^=*y$)cNATHG;dT+UR0AK8nbdNiH&cMfQK-WmN~!jZUdx zRPQm4gc$xEB>*te=Px!?{902Q7-jGRRoTt!VVT%)2T%|1OF);aSbQ|#Ee292MvgyE z_8-3=3-`VRS#=N*}y*hwNu(8csaUi;@+d@3tA~m&67A z`l~ht?Drz#Gc5=q4*vRkGlBWuv1^KfwQ1pq>FRlHf^Q@Vo(Y}Pc9F!WF4kY~w=%5y1~)Hmf<9@q_>2HBu0 zk{ih}^G29v<|7e64?WRwp~&K-LI!?vaY_VP9bpP_>AF3pX0Dv9yiOvDNP-@Wlee2j zJ`Pp~oEF-MmrOnpm0B!(@~*W>Ue46uRaMP&404`1&&5d}C7YCdL~~ngyZei$Ao) z$fkkBYX-(Xzq_1KN*i4AwQ4Rr_~fdNn33<1hMKLj=Dy`4f1)|pc#V`2B%MOe4}6*S z=npe>mtgnMkdyK^7lSzqaW)$mvmj9Uci8IT;R0!A4@7>iPJ#kO=#w(3Hs^=WxCL`yHCv$-N_(<49jAzWiB)!y z@l9YhH%t{LJaw|z($I6t=8x|yiQ(K9aokM5ocVsdI3ubbTaxmxu?^~aA708wnuWz- z_8CQHkZHmVKpSCdzPfoGLzv{o$7lzHm>b==Mv}pb@{97~2Jc+c;S$##U30boUb%NE z7{~)p6Il+vr=9WZ1urLGtnFCd`n||vO`@VaV}`e(9SVo^X(<{JN3M;=hHda#rQLa% zS8)4Vl7mb!aL=2py7qJZ*S*M`Tj zZ?XMLlQ%xSum0HlJ-p@dxFzYeK@(A!0s6xF>2^8k!9gT$1Hd7lsq+bz6^FRin$okS zBf|#5Zf`K3vDTikSe!0LY>CIe5gadCtUE-y0enjM7;$pBWTSFt$#bV-_-}c}$@$dGuNC^<;w-bg=(xx&`a>yGbJA(bOuKB< z3RndD5~5tEA}c3jc1|?o@#6#?;=PIQMb_=b6}eH))H3uaw~*8e=zS$G2XZsOXe)i=SMtZoU3$L^wx`E4nRtT;;LlEvv8LgXrBR zrk#)J0k&-ls4sMX-X>ASfOXh3ewuf+d^3S+s}UG%|u$_MrBJQlPh0Z z(Msrox%zD@i&sBcVnQh&M{o9Yj~y`j8vvRziD1$K*-&8BrcQo18E_5z@$?(sUIc5o z$O!)u?-V35Ygi8KQW%Ln>rgyOwU71-Vn2^7?coPAh)-tb7=fJtg_E+q3?3#ukG=HA zQD9t2KzDkImSyyUOv`q3m5$={PjHk3x-_jkVMnpU9Y&xFkSKT%do({$%Hp<24xzq}t5L{50lq+0>`p&f#-lBjVPKKAt1KZ(1)uya{ z-=y*oq2!Ctw4zHo63w!WmWqrqnp2u*N6bOI?I3WQ?{8HEtR{MIs?&9@trIFORiy;W zd+G)H};{u|S`7?}5|Y5&1(8mo&DT>k@t@7`TZJC*GIv=fW^D zJ7pXYu;3+&GV4a>Um~d`78> zzAX%GvbmT6almA}lwA5^RI>LTrDCSvEBPAO?fm6f~`@_s9AG z+pql?RgCz^Y-`tq25j!HHtsh~ai!k&H?ztz^ZXgPp>1|HY%Mgqio{-OnhE_{csfTm zP3d;bu)L@c@?B~p@0z1xR!?yM60;B@^UBAeh{Kq|ys+(9>P7N(vsaj>m#Uu;`D98s zL7Qw?h_iXZ9xQJ#e-dJJs-j$x=3wmDtlUQG|MuK6HF@rFUP7C|tX)n2({@na-|BFa z0v53k-yhrhU|!Xxj6`}a)QYDrLBMlhL5WA9%`Zcf6DT_*5^A;YYjSaX^}!3?#!vbx zGb9o=zpf+?$$LL**{-XAj#|9~agi(R0FTqDMA$sO1IjlM8n<+2(FDt#`y=Z_J@37w z8Nn#4pjZfK;W&3!GS2K+rDR_Y#I8)#E6g9X5tH%lMA|KLNT#@Mn}Em3m4it9MgfWY zQ_GmHvxqp=kn{wMbhPMr-81XWGx=JYvx6oo#XSO=9}MIoJJL}Vp1vffL295aCzuU} z2L)#&06Pie!o5NYXR0N{zkJ{qwY!3_{3IW2^+Ybjuu;wI*Y~R}XJ?)TFA3{kgHfZq-%*D=QIQ5=;9g$Hc2=-=6~%EFTKCkGeT4Y8e+?d}y$1kSdsF9Wb_fZ2KvPFzTSwKFW9@JLJ7=Z8NG$Yw z*>q3woo<1eTPje>@O?4dq%<`sFT{#%=Nhy!-w$LaA-3`CVJUqpHMQkjIvOUtc&8$Q zpjzO1H3wDWv~p^+q03{N#rjM-@#9@@;IPg|&o(vu9ARFQMrcz1VCcRD@Q8vUg(YXA z*f9M?Ga_78>!($)#|?`Q7~Q6T`3$2zXZy~gp#l3<&NaVQ)zfoo!DQ?6m0#ovt9++Q zHe7po@1Jejl6`zdoGls&ux7vVoVVtvgPi=SsMw_L_x+d!jJ6JvO&VgBDo_rGsoui_u?RwXgaR&je?ch56ZucQoz`ts8XbByPg8( z$-aZ}$M+b`yX#};7JWHPry2mP#$7n|q)Td~rB2pe0TzxNC3%SJe@=ChU zqam%koiDgK%ZY?>Q_mWw(-`Bn;-2aP^EUCvr!`hPl8FD#@x-8rE?S_ELJkI-!f37c zK9azWnkeJhjE_w89U=+1K&jgAl%i>_>p766=lo6TlK691(P6^8MwQz*efY@HLmt8P zJ(ISbkg=m%dZ+7MXZfdAu41Q2)-Mjh(Vt&qNyrQlWHDYu3W$Umwvk2~U%cZcjt+|* zE;fA|-j6h3cHR$8TN12Xr2o-1kd~Grej#QT*;-eImBBA-D&Q}NTrpF|)N`;Z_z9Vy zKJEiX_x-BsBhkzf3If8tww?w~pRX$q43-c;Bjj?C%9f^Cs1p9S4Gm%{HjxaQ6CDe8 z^QVf3ANgKUIQ`P@!_i|eiqlLQ$CPH?9@f|c|~*8UYFas@q;)$KS`GQMf%pPvuR0+o|{`Td%L9u4WzS`yqNy5 z`tNKxV@+k!FCi3x0nJ`~x&ik9{UU=m$qC$iaphl{wA(ujf`c>`pWi-Y`rIT^JaI=| z=C{9s!mZ|HA;iuIZ*&(9nrJ3^STss+I}@1NhUdH~p~X~=fL}SayPO1GHP4bFV6Zl( zq2keQ_zroA;*w0>WU8h^NA?YKQSNtw9Ho)+cKlHv`BAbiGGfr~X_+vA-99$E18hG4 zU{nxwK0O%0O~>e_@jE%KgA{VCr&!L4+C0=1A!`&#PVToZ(L$<&S`d~&rMk)u6fI^N z)m(Ez5)n%L5{3PeAzc%1UugkQ9Xcl3rWvX%)nVC6y`9J~14CH4YVn6(jfYl_nh3*j z={5>D%sM1p`LJ^3e04$^mq?g#hD5^^aYa#J`d8MQ9l%-NGOOM9* zX7P)K{;4Vs^0mj$JYP!d9te1TKIJ*a2Bn4XDG@R4H9!f{jD$f&G>$doA&1BZ$~GJq z4Gxc%SY$N%Dak0+aWijJ*Ffvc>7B7l_6SGt11^f2Q9L+ao((}w_9%$_#9=UGM7XHy zWXpPLQ`~1zHJPdSKxXTJ(S4U-&^~&BU!YKsvHm*^?7@3B*(D7`HnkfuJ1J49SR~&$ zH(%ZdB3j6*%VDeB?nTFOd}foM5+mEpTXl8X(5OmkazXmdf!cZ3y29W(Q;2oGz zym8DD3pH!2p3_Lyo>anNDRw0Bpb_8pC)|frHWMj?YqH;0drr}sifgPn>DYQ`L*5U) zns{FJYGqyQ#-)9C^1vkk!!;t9OxHrWI{`nFlWvZO85A?vcnXH_@4)7;VD%5qk|V;a zh9QY|y$Q^BpOu{{WQll%pU;>UJ5sl848NWCY>`asKtmHSj%xsi&Dj)o>g)~oLs=h+ ziRrW#Zmd7<(ba>S!aZr>tT>Lcc(8Y*Kd#Jzr{xYA=4u}i4}8(WSqc1h!02xZ=-P=eX0|W&7_@dX zoj)OgUX+r)@scRcHWTMPb8V|grQ>6K``cviVs}k$uDa+_;?s;oCyFn;t9q8tH9oh$ zd-xq%%@#;U{Yk&C#9v-^>;AgxPUI{P7|kQ!;E|qYayroI>}aBlPl}s8)~FIUc)se) zq^>BUln7aK+T=}W} zFDD1IDvMXm%TuxwiEW1;zg`a3 zO=+7b#Hh*hY~G7EI;ViK>D0XcPZ!H5^YNce+oH0dgn>L2rwL=Wwke$xdJxNkGGF1b z!w5)CW^(I$*+x=j+Lha7JFk~iel1s)URun&z?wf$`#XjEr{PUzHkpcnsP4~=c8P4U%2>@lSpfLQ#V}2`@DC=t3Go z_{5|I(6drpugn+ZFUQt=ov&W*AYJSSTZlqR5K3-Ggc2{^$xjfkk3$I62vsjO9VOG> z?621Ut~QjZ2fj=DF$v6#XIp7D0H3sD zk*%bzXR%qPN6^f`5QC?at3T#hE7S_u7yr~M)!I!IIIf;Bf*Xo@HfA9IBmw4gt}XIQ zf<&@Y`iLVM9_;rZUfiT(+38$NVf3^jhtf#A2`!aFTzf@OP0w}Y3-1{4IN+G-H<c zK}qnqa(bvr@xYr8hSi)VPcxJpy6 zlEnctac%E9zKa5NIN8EawfxipO>7$~HA-g*HJ!LkXX+I-*v_m4+QzB4yz^gx7Uv}#?NJYQ3qYojsaLC;9&E$b(Y zk!0Nu%XGjIaB+yah_%lM$%vP~NFL>4AS?`?Qb<*2S40a?qh>?&fl>(FT#gw;%y3=W zFo%~3;_FivZCs9FqFx#?`}rG5mBMnV_>Ynyt+)i5TJS3QrUKl`@RoZMjV^x0PI z;m_?yVC{t}N6TT=4|7nZ+xyj+DHteC_AnKtw$)`;XPc;i{!tleh^;DqY8lE5S~CAS zri$g8?(}*WeT=!2EUi7l&jXrz|M=?f!EAsd55j6WAp=lkz-FQ(o-Br`OIGir&_)M| zkK)~XGq}f5g$TgJXZn;7dl46i#^@>Rn%IfJqV;Qxi%eu3eX{JiMH%vr`!D=a$RMC$iG?m}W-RT^UG5i6x-wZ^KnfepFygl7g z0vECJoTo{~aBPRdlgFm46fgPi_A149sKPMsdq7T<^qad^rw3NG6ieRa1f`?6;cKD;Nsb@9%?u13?V<+JL|nS0kAU!S+lmDd@+UPCU1CyA~~r} z3bEqvhScB*T)7wvgn5yW!uz8@TB*J~a;})SaKReTb$MZ2Ujmk|$NJqF&CNk-N$Ipq zW$!w`wnYIoX@t`X`Vb;%YwIbDO;q2NwlnV{19qfL()Dd|k=~qm_X>4o|EA0MD1jUp zw`me@RKeA#(`20u&?CS_s}Hbi3iyiN%n!L=^9~oBrYh68(tdtlWG!K;(6}hAU_;qS zaycg%euM+{T(+2;gsx1Vn^ny0(J+#escewBcW3)0{gzJXVefrYe^``|A|rmZR|Zc% zh{XL$T-Q3BneEM{fLIG@i(AY_Mq(Rs@7@}E?AJhbW(|u=Dj%l<`o|Uk*XYT869rgm zAw(y}4V%eNUB0k#Cc$qo!7!=x)z?-IZ4&%SAqZ`AZEbj!T@dcD;3|SZK~H%4TDKc( z+iD{4L<0rhJ!N`%Ivw=VfLBNiYU;_u7xHRNlZm4N5HSeKClMt1>VoXO2nabK!XPC#7>W9*b5e5&rYxxZ{O zNf%*Iu;K%-MxU@&uF2##V+d^r=F>d)hEw~)H`6#RasLlgurwg!N@PUm~V?POp2D7yK5m1d8FpVT?Ul~azV&Qp0j`Ju{%@x zY>I%9kat_99X|ED+la2*y$p2hTMtma)r>4OMhH4XV*n~(DkWM88OE<=$&NiYYCP1C zr>0uf<>N&EZAcz%LzL%PUWzt6XbRxWraHDiyAIrGDv;xn0v=wJBf%*Uhd3YgZA$ z+NRXRE|cU*Tr=CO_@;|)a{|;OP$(r7Ne?l5dx+yfH^lqCkVll?+wX2CYqvsOPkvgN zK6GL4u7_gAtIDeLUp=21A37&jcFIiht4Vs4sEdurM-Nj-gPmoiZOu!C+gHsSRiqp@ zyh;4Twj8Vk1r6>FK&tJ7ESNC0NlIzji znBOUJ9@pK(SON2&Ge@nZ8zm{qpcFAV0)_`5q2%Zn=@ez%I!1a~p5(M8#c;K2ZA`1q`r`=-uDB6XjN2 zPtQia)p&4GK2B(CyP$5M$gXeV?HgEP(~Pq)g2iqOp%(E=i&8SVFWeK{el2U>@k%E= zI#~CE{f%ckir8;MRM6bY^nJutt~f@t-9p+i;-Ny(>$3zr#0@IU)yw9{8hiU2ReLQ((rUXmqp3q zqbwb-D?`?lwgX1@eg8p5c=5jPB3}>?lEU~cE@j#p6zT!V!WvpkyecS=r&7y!+1OE` zbY)?762XfZc(lJ8qVFaY?lpq%4|1FJ82>)xW;r9=#KzHOB6YIi{lc_}$gjRq?De~9 ze;zz;y|hlU1Zg2eB^;lqEM#`k%3^`lXmYLPoWxVF->fC%oy<^u-pE)f@vb|6GVzh} zbk&HE?*<2q?mJnb+y~zJ5)x9Y+s>GmTdmM+D_pp}XJAC@QTO%dX2Cwt+CA(z!9xh&zc=Df=?Wj1RtQ<@a+1_!NGn@L zq09dC3{ND=UlEjSP}1|R#wJ~qY)(nV=7RU*;P1W}Ct*Lw8x_hyYc@9%Lc&(~Vy4ft zU*1re?@l~E@nqW?GHhgYNqMlZ)ofs3tKRckCk|5>Yh`4H+ z)?bMW)$vppn)io`2}(Q4MB75@IpuaiMD7gdkiDxj{FI83?@3@kMjngT!qpH$N?R|Y&d-W#WrJwkI9(BzcNv*ja#ABcYiXpqdwzgl^zh6mD zFV+V8!QL4w&96-aDMdcf!PcI*=gi~0*P4S~E}|((6J;T~{7-9r>}hw< z4^Je2&2ls!5Reff{2~D@nSNYOQwYxdwtrr#dvQx#4CjB&1i~~qsCh6Xukit+yA0(XVy?ycBX6jVsNfki+$G#8SC}OFHRaqOl})}e%+qn7t7KK4Di2v?jk@&6M`2F zNaAVws6eVKWY-eO>^^^)sz}W5jj`~!(BVt$A-{KFc6(PQlzQl`ZRt3_`1ja$xa_^Z zOF9e9@!Q;_R|mVTUtOzAa|hF6jBDxuLZ^Pxc#kSqsDNPl49plq1UEMn3t~sOv0>V0 zI>!PW#GRa0DBroWl4=(XJveFZit-8j2dyzMuBbj*tQv>mDmdM<@ksY^EyqkzqGpQf z%Ik8zH2PIk8`kkE^%>Ld4We=Qq#OXC;EzN3b@dDMzZ%axoATH1JvdFL>AoO?hVLf( zVfG!skHn7ZqhB4DXI;=UsoyD!Rr>fOX#T{n5vI|rthO5_a-DD!aB5!8k3b9d095iR zf;A(PCwFaVtzl0k0{x$J*_Hp@>plnofX3|CwD5y77$R4l%d$=2AAwbvEM|hyCp;Ty zRWkHHz1aRwUB3Tm@;|r_l-s6o6OUNOAO}#tlUMe4Mg0GB_rLq&|Lo_#(-LbJvd<2% zK-F;p*){V@uyTJ@Bl6#A=>PJ}fePO!gvB$K`@2@~bRfAdh2Qr7^34D2?SnUcPi=1# zKFLW(!r3Tf00hAKKikFM)(-j^k80!NzyT-#H~^s62Kay14@Vn-Z4a=2NFM;eQvToc G^S=OgSLka1 literal 0 HcmV?d00001 diff --git a/public/images/items.json b/public/images/items.json index 080e0efe4..37abc4788 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -1165,7 +1165,7 @@ } }, { - "filename": "electirizer", + "filename": "dna_splicers", "rotated": false, "trimmed": true, "sourceSize": { @@ -1186,7 +1186,7 @@ } }, { - "filename": "enigma_berry", + "filename": "electirizer", "rotated": false, "trimmed": true, "sourceSize": { @@ -1207,7 +1207,7 @@ } }, { - "filename": "ganlon_berry", + "filename": "enigma_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -1228,7 +1228,7 @@ } }, { - "filename": "guard_spec", + "filename": "ganlon_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -1249,7 +1249,7 @@ } }, { - "filename": "ice_stone", + "filename": "guard_spec", "rotated": false, "trimmed": true, "sourceSize": { @@ -1312,7 +1312,7 @@ } }, { - "filename": "magmarizer", + "filename": "ice_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -1501,7 +1501,7 @@ } }, { - "filename": "mini_black_hole", + "filename": "magmarizer", "rotated": false, "trimmed": true, "sourceSize": { @@ -1522,7 +1522,7 @@ } }, { - "filename": "protector", + "filename": "mini_black_hole", "rotated": false, "trimmed": true, "sourceSize": { @@ -1543,7 +1543,7 @@ } }, { - "filename": "reaper_cloth", + "filename": "protector", "rotated": false, "trimmed": true, "sourceSize": { @@ -1554,13 +1554,34 @@ "x": 5, "y": 5, "w": 22, - "h": 23 + "h": 22 }, "frame": { "x": 183, "y": 90, "w": 22, - "h": 23 + "h": 22 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 205, + "y": 92, + "w": 19, + "h": 20 } }, { @@ -1578,33 +1599,12 @@ "h": 21 }, "frame": { - "x": 205, - "y": 92, + "x": 224, + "y": 91, "w": 21, "h": 21 } }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 226, - "y": 91, - "w": 19, - "h": 22 - } - }, { "filename": "iron", "rotated": false, @@ -1627,7 +1627,7 @@ } }, { - "filename": "shed_shell", + "filename": "reaper_cloth", "rotated": false, "trimmed": true, "sourceSize": { @@ -1638,13 +1638,13 @@ "x": 5, "y": 5, "w": 22, - "h": 22 + "h": 23 }, "frame": { "x": 261, "y": 100, "w": 22, - "h": 22 + "h": 23 } }, { @@ -1732,7 +1732,7 @@ } }, { - "filename": "starf_berry", + "filename": "shed_shell", "rotated": false, "trimmed": true, "sourceSize": { @@ -1753,7 +1753,7 @@ } }, { - "filename": "thunder_stone", + "filename": "starf_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -1774,7 +1774,7 @@ } }, { - "filename": "tm_bug", + "filename": "thunder_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -1795,7 +1795,7 @@ } }, { - "filename": "tm_dark", + "filename": "tm_bug", "rotated": false, "trimmed": true, "sourceSize": { @@ -1810,13 +1810,13 @@ }, "frame": { "x": 183, - "y": 113, + "y": 112, "w": 22, "h": 22 } }, { - "filename": "tm_dragon", + "filename": "tm_dark", "rotated": false, "trimmed": true, "sourceSize": { @@ -1831,7 +1831,7 @@ }, "frame": { "x": 205, - "y": 113, + "y": 112, "w": 22, "h": 22 } @@ -1852,7 +1852,7 @@ }, "frame": { "x": 227, - "y": 113, + "y": 112, "w": 18, "h": 24 } @@ -1879,7 +1879,7 @@ } }, { - "filename": "tm_electric", + "filename": "tm_dragon", "rotated": false, "trimmed": true, "sourceSize": { @@ -1894,7 +1894,7 @@ }, "frame": { "x": 261, - "y": 122, + "y": 123, "w": 22, "h": 22 } @@ -1942,7 +1942,7 @@ } }, { - "filename": "tm_fairy", + "filename": "tm_electric", "rotated": false, "trimmed": true, "sourceSize": { @@ -1984,7 +1984,7 @@ } }, { - "filename": "tm_fighting", + "filename": "tm_fairy", "rotated": false, "trimmed": true, "sourceSize": { @@ -2005,7 +2005,7 @@ } }, { - "filename": "tm_fire", + "filename": "tm_fighting", "rotated": false, "trimmed": true, "sourceSize": { @@ -2026,7 +2026,7 @@ } }, { - "filename": "tm_flying", + "filename": "tm_fire", "rotated": false, "trimmed": true, "sourceSize": { @@ -2047,7 +2047,7 @@ } }, { - "filename": "tm_ghost", + "filename": "tm_flying", "rotated": false, "trimmed": true, "sourceSize": { @@ -2068,7 +2068,7 @@ } }, { - "filename": "tm_grass", + "filename": "tm_ghost", "rotated": false, "trimmed": true, "sourceSize": { @@ -2088,6 +2088,27 @@ "h": 22 } }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 152, + "y": 133, + "w": 22, + "h": 22 + } + }, { "filename": "tm_ground", "rotated": false, @@ -2103,8 +2124,8 @@ "h": 22 }, "frame": { - "x": 152, - "y": 133, + "x": 130, + "y": 155, "w": 22, "h": 22 } @@ -2124,7 +2145,7 @@ "h": 22 }, "frame": { - "x": 130, + "x": 152, "y": 155, "w": 22, "h": 22 @@ -2145,8 +2166,8 @@ "h": 22 }, "frame": { - "x": 152, - "y": 155, + "x": 174, + "y": 134, "w": 22, "h": 22 } @@ -2166,8 +2187,8 @@ "h": 22 }, "frame": { - "x": 174, - "y": 135, + "x": 196, + "y": 134, "w": 22, "h": 22 } @@ -2187,8 +2208,8 @@ "h": 22 }, "frame": { - "x": 196, - "y": 135, + "x": 174, + "y": 156, "w": 22, "h": 22 } @@ -2208,8 +2229,8 @@ "h": 22 }, "frame": { - "x": 174, - "y": 157, + "x": 196, + "y": 156, "w": 22, "h": 22 } @@ -2229,8 +2250,8 @@ "h": 22 }, "frame": { - "x": 196, - "y": 157, + "x": 218, + "y": 136, "w": 22, "h": 22 } @@ -2251,28 +2272,7 @@ }, "frame": { "x": 218, - "y": 137, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 218, - "y": 159, + "y": 158, "w": 22, "h": 22 } @@ -2320,7 +2320,7 @@ } }, { - "filename": "x_accuracy", + "filename": "water_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -2335,7 +2335,7 @@ }, "frame": { "x": 261, - "y": 144, + "y": 145, "w": 22, "h": 22 } @@ -2356,13 +2356,13 @@ }, "frame": { "x": 261, - "y": 166, + "y": 167, "w": 22, "h": 19 } }, { - "filename": "x_attack", + "filename": "x_accuracy", "rotated": false, "trimmed": true, "sourceSize": { @@ -2383,7 +2383,7 @@ } }, { - "filename": "x_defense", + "filename": "x_attack", "rotated": false, "trimmed": true, "sourceSize": { @@ -2404,7 +2404,7 @@ } }, { - "filename": "spell_tag", + "filename": "metal_coat", "rotated": false, "trimmed": true, "sourceSize": { @@ -2412,16 +2412,37 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, + "x": 6, + "y": 5, "w": 19, - "h": 21 + "h": 22 }, "frame": { "x": 89, "y": 172, "w": 19, - "h": 21 + "h": 22 + } + }, + { + "filename": "x_defense", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 45, + "y": 194, + "w": 22, + "h": 22 } }, { @@ -2439,7 +2460,7 @@ "h": 22 }, "frame": { - "x": 45, + "x": 67, "y": 194, "w": 22, "h": 22 @@ -2460,14 +2481,14 @@ "h": 22 }, "frame": { - "x": 67, - "y": 194, + "x": 108, + "y": 176, "w": 22, "h": 22 } }, { - "filename": "max_ether", + "filename": "spell_tag", "rotated": false, "trimmed": true, "sourceSize": { @@ -2476,15 +2497,15 @@ }, "spriteSourceSize": { "x": 7, - "y": 4, - "w": 18, - "h": 24 + "y": 6, + "w": 19, + "h": 21 }, "frame": { "x": 89, - "y": 193, - "w": 18, - "h": 24 + "y": 194, + "w": 19, + "h": 21 } }, { @@ -2502,8 +2523,8 @@ "h": 22 }, "frame": { - "x": 108, - "y": 176, + "x": 130, + "y": 177, "w": 22, "h": 22 } @@ -2523,7 +2544,7 @@ "h": 21 }, "frame": { - "x": 130, + "x": 152, "y": 177, "w": 21, "h": 21 @@ -2544,8 +2565,29 @@ "h": 20 }, "frame": { - "x": 151, - "y": 177, + "x": 173, + "y": 178, + "w": 20, + "h": 20 + } + }, + { + "filename": "magnet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 193, + "y": 178, "w": 20, "h": 20 } @@ -2565,33 +2607,12 @@ "h": 19 }, "frame": { - "x": 107, + "x": 108, "y": 198, "w": 20, "h": 19 } }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 127, - "y": 198, - "w": 20, - "h": 20 - } - }, { "filename": "mb", "rotated": false, @@ -2607,8 +2628,8 @@ "h": 20 }, "frame": { - "x": 171, - "y": 179, + "x": 128, + "y": 199, "w": 20, "h": 20 } @@ -2628,8 +2649,8 @@ "h": 20 }, "frame": { - "x": 191, - "y": 179, + "x": 213, + "y": 180, "w": 20, "h": 20 } @@ -2649,8 +2670,8 @@ "h": 20 }, "frame": { - "x": 211, - "y": 181, + "x": 233, + "y": 182, "w": 20, "h": 20 } @@ -2698,7 +2719,7 @@ } }, { - "filename": "max_lure", + "filename": "max_ether", "rotated": false, "trimmed": true, "sourceSize": { @@ -2706,15 +2727,15 @@ "h": 32 }, "spriteSourceSize": { - "x": 8, + "x": 7, "y": 4, - "w": 17, + "w": 18, "h": 24 }, "frame": { "x": 46, "y": 255, - "w": 17, + "w": 18, "h": 24 } }, @@ -2733,8 +2754,8 @@ "h": 19 }, "frame": { - "x": 231, - "y": 182, + "x": 253, + "y": 186, "w": 20, "h": 19 } @@ -2761,7 +2782,7 @@ } }, { - "filename": "super_lure", + "filename": "max_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -2775,33 +2796,12 @@ "h": 24 }, "frame": { - "x": 63, - "y": 240, + "x": 81, + "y": 216, "w": 17, "h": 24 } }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 63, - "y": 264, - "w": 20, - "h": 20 - } - }, { "filename": "potion", "rotated": false, @@ -2816,69 +2816,6 @@ "w": 17, "h": 23 }, - "frame": { - "x": 81, - "y": 217, - "w": 17, - "h": 23 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 80, - "y": 240, - "w": 16, - "h": 24 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 83, - "y": 264, - "w": 19, - "h": 20 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, "frame": { "x": 98, "y": 217, @@ -2886,48 +2823,6 @@ "h": 23 } }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 96, - "y": 240, - "w": 16, - "h": 24 - } - }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 102, - "y": 264, - "w": 19, - "h": 20 - } - }, { "filename": "revive", "rotated": false, @@ -2950,7 +2845,7 @@ } }, { - "filename": "wl_ability_urge", + "filename": "ub", "rotated": false, "trimmed": true, "sourceSize": { @@ -2959,19 +2854,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, + "y": 6, "w": 20, - "h": 18 + "h": 20 }, "frame": { "x": 127, - "y": 218, + "y": 219, "w": 20, - "h": 18 + "h": 20 } }, { - "filename": "metronome", + "filename": "super_lure", "rotated": false, "trimmed": true, "sourceSize": { @@ -2979,20 +2874,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 5, + "x": 8, + "y": 4, "w": 17, - "h": 22 + "h": 24 }, "frame": { - "x": 147, - "y": 198, + "x": 64, + "y": 240, "w": 17, - "h": 22 + "h": 24 } }, { - "filename": "big_mushroom", + "filename": "candy_jar", "rotated": false, "trimmed": true, "sourceSize": { @@ -3003,13 +2898,34 @@ "x": 6, "y": 6, "w": 19, - "h": 19 + "h": 20 }, "frame": { - "x": 147, - "y": 220, + "x": 64, + "y": 264, "w": 19, - "h": 19 + "h": 20 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 81, + "y": 240, + "w": 16, + "h": 24 } }, { @@ -3027,14 +2943,14 @@ "h": 20 }, "frame": { - "x": 164, - "y": 199, + "x": 83, + "y": 264, "w": 19, "h": 20 } }, { - "filename": "miracle_seed", + "filename": "zinc", "rotated": false, "trimmed": true, "sourceSize": { @@ -3042,37 +2958,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 + "x": 8, + "y": 4, + "w": 16, + "h": 24 }, "frame": { - "x": 183, - "y": 199, - "w": 19, - "h": 19 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 166, - "y": 219, - "w": 17, - "h": 20 + "x": 97, + "y": 240, + "w": 16, + "h": 24 } }, { @@ -3090,12 +2985,159 @@ "h": 20 }, "frame": { - "x": 183, - "y": 218, + "x": 102, + "y": 264, "w": 18, "h": 20 } }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 113, + "y": 240, + "w": 17, + "h": 23 + } + }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 130, + "y": 239, + "w": 17, + "h": 22 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 120, + "y": 263, + "w": 17, + "h": 20 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 137, + "y": 261, + "w": 17, + "h": 20 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 148, + "y": 199, + "w": 19, + "h": 19 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 167, + "y": 198, + "w": 19, + "h": 19 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 186, + "y": 198, + "w": 20, + "h": 18 + } + }, { "filename": "wl_antidote", "rotated": false, @@ -3111,8 +3153,8 @@ "h": 18 }, "frame": { - "x": 202, - "y": 201, + "x": 206, + "y": 200, "w": 20, "h": 18 } @@ -3132,8 +3174,8 @@ "h": 18 }, "frame": { - "x": 222, - "y": 201, + "x": 226, + "y": 202, "w": 20, "h": 18 } @@ -3153,54 +3195,12 @@ "h": 18 }, "frame": { - "x": 201, - "y": 219, + "x": 246, + "y": 205, "w": 20, "h": 18 } }, - { - "filename": "wl_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 221, - "y": 219, - "w": 20, - "h": 18 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 242, - "y": 201, - "w": 17, - "h": 20 - } - }, { "filename": "oval_stone", "rotated": false, @@ -3216,12 +3216,33 @@ "h": 19 }, "frame": { - "x": 241, - "y": 221, + "x": 266, + "y": 205, "w": 18, "h": 19 } }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 186, + "y": 216, + "w": 20, + "h": 18 + } + }, { "filename": "wl_full_heal", "rotated": false, @@ -3237,8 +3258,8 @@ "h": 18 }, "frame": { - "x": 112, - "y": 240, + "x": 206, + "y": 218, "w": 20, "h": 18 } @@ -3258,8 +3279,8 @@ "h": 18 }, "frame": { - "x": 121, - "y": 258, + "x": 226, + "y": 220, "w": 20, "h": 18 } @@ -3279,8 +3300,8 @@ "h": 18 }, "frame": { - "x": 132, - "y": 240, + "x": 246, + "y": 223, "w": 20, "h": 18 } @@ -3300,8 +3321,8 @@ "h": 18 }, "frame": { - "x": 152, - "y": 239, + "x": 148, + "y": 218, "w": 20, "h": 18 } @@ -3321,8 +3342,8 @@ "h": 18 }, "frame": { - "x": 141, - "y": 258, + "x": 147, + "y": 236, "w": 20, "h": 18 } @@ -3342,8 +3363,8 @@ "h": 18 }, "frame": { - "x": 172, - "y": 239, + "x": 154, + "y": 254, "w": 20, "h": 18 } @@ -3363,8 +3384,8 @@ "h": 18 }, "frame": { - "x": 161, - "y": 257, + "x": 167, + "y": 236, "w": 20, "h": 18 } @@ -3384,8 +3405,8 @@ "h": 18 }, "frame": { - "x": 181, - "y": 257, + "x": 174, + "y": 254, "w": 20, "h": 18 } @@ -3405,8 +3426,8 @@ "h": 18 }, "frame": { - "x": 192, - "y": 238, + "x": 187, + "y": 236, "w": 20, "h": 18 } @@ -3426,8 +3447,8 @@ "h": 18 }, "frame": { - "x": 212, - "y": 237, + "x": 194, + "y": 254, "w": 20, "h": 18 } @@ -3447,8 +3468,8 @@ "h": 18 }, "frame": { - "x": 201, - "y": 256, + "x": 214, + "y": 238, "w": 20, "h": 18 } @@ -3468,8 +3489,8 @@ "h": 18 }, "frame": { - "x": 221, - "y": 255, + "x": 214, + "y": 256, "w": 20, "h": 18 } @@ -3489,8 +3510,8 @@ "h": 18 }, "frame": { - "x": 241, - "y": 240, + "x": 234, + "y": 241, "w": 20, "h": 18 } @@ -3510,8 +3531,8 @@ "h": 18 }, "frame": { - "x": 241, - "y": 258, + "x": 234, + "y": 259, "w": 20, "h": 18 } @@ -3522,6 +3543,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b487cc2f66e6f01e2835d69c91ef15c7:5ec601e7ece980a5741a0e30d1974a3d:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:a758207f86968eadc2af85a2228ef355:f1dd54661f7a44fe3bcd89ae87d14b1d:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 706c4a1050c60e480277c352918b645ac60d3849..f077e5fc849542f29280ae9c233f113274334d5d 100644 GIT binary patch literal 25562 zcmYgW1yCH(vW4IT77M`^cS#7gECl!98XyFRMFWd#(8b+tahKo(m&IK}0znstK(OHU zd9UhK{i(WDb8pR5PxZaieNLZ_P*;`5$ECzYK|#U)pdh1(f`SVC&%j1|USZ(4n?*rE zLs3`OmQ}WKy1$z-)i;xomi6&T`Ez@B`FKb7-|Ok=$;aJ$a$-D1Unndjbhb`OML{X6 zN@2T<;9!F>p$5=XLsw%hQa-(NM~@-(9r&ra#>B^L;Cxo%Esp}e7x`b z79aBXbGg5_|IeSR>7T!!j%+tZF7G<`H(_o&6TV|(%R6gBQ#XB8{ndrWDN@!S28=#m z4-boFo>qMeRLiOOJ}`BAQ@XL^eOCW_pp(C>gkROlt}uh}@$A;JbYDa~=)%gXzNRK> z`638jQk?hM+Q;=~BhaO4pk?Y;-`e2Q({V_|d5n|nw^Gcf$IzSHqWyNmx_>#l_w$cS zeIH%T7utwhcz84{W{;~mCjVAN=EX5HvoBQtyFGjVG$nC!GCVmR78hLCc)Sd0wyceG zfmuTQyCe(Y@>BCAo0~+H-p7#15ZVt$Q2w5AN`WUEXuEz9yp*(lLrq&j@|e5)qjUTYsjnd?o)UNtzPs^S26nwb8#ilinLaI5E(kFkoL;<(E4$ z51&_1M%j-oR@)m=L_tXoPIeKnH!JeFokmD7u33j7FS4p1+SeaZI#zz8`1b z7^KAGNMTz9p}&CfND$k+lOXRSq>Cn^mrBRu3m@m0m4OhdThL&jYDmb)yy|Zy#e(*- zelKwMF)%RbTybAoU2^=^6xJ}Mo|5Nz>~rPAsh$FiRGhDQv|F${ZctO7erk|NO-_Dw zvWA*h;cw+a`)x=1L5wDdZn~zk@*)+y3quf3sVF_=a*%WKD?z6%6f{rzn9i0U}I9px+TfTVC!-Jw`&k3cVe zFxXR=S|L(daTEu=)GaRAMZXrkxu%6@hG1s(ZZ{-5t(mh5w}wQ>2S!&KAN_k5AE zS+;2@DMDhB>3ENe0jxCPxC8`h%E~}x4-;HW2!tQ)y=Opd`?RooG=f_e3q3Q$tunU`RE5Gs2{nNMO|S^3hN8`zUD8~_Cw zX^JETJ?|Ep2M*Xs)hC^x?L+|-tRZwAQxHTD)CifFHEJ%zdZj!>o`}ElQdk*t#`j-B z=y?t&Kwr&iKSz3qaI(WIDDL4VL*=T;uHDLtjLbtYMF`V)I=$Mw(WTCTFeXTAuP8W< zyTZ^ym~8oiYZi6kPIFX=ecj|7nAv0A!8C!{L?WQa&RVEX$)6?U0%?Ho84F6Fy|C%9 zBP-vr*i26+4?>$`rbMu??TQM*%M&62a7plaED_vmNEL_ywm_%T%bGx99{=rX_tC7w zu`U;IKVb9)fx6ck=nWlN>vX} z+T!FSITK!9UI?TkCpC0!c=MHwd$#@fnWO^V?sggleg{{s%Yo0a(6a4;kFZ=4lyc&| zT(9H<9Nc!R9#v>kw-|I<;(0W9_{PJk<|xOa{}w=<*9Y2*T*CqPoQ5u}=l=rEBBZlG zh!Wnim^FPU%vDp9MJ)%OXhz26Lpme$+4;JR78GG3yAchk>3;N<8~kH6Re}_xTcjgl zfE6sdIqTweD@O}7`xb@t#R|+LSorxrS%-zp?JY!@v(Yq~%ME$Mbq{wsfDfC-QR zVYA*D7;M%ASJ_C)ce^ubg`T#!FS2aBu(TAO74i9HA#;AX z)vkH@dp$WBm@0|2ScMU+;#pu}9vrMU{7qfNiv3Ih3AgWfndc<$%5KqMmxi%>J;qI& z`}WBrmPEBIc7_XXJ`|fn2O81?f4#d*nVPI4|7yEA_-3VHrfJJmCOC6H^3;>+_VrBN z`fx=rOxjwVuZf2yE#Hxd8g+LOp9+LB0y#5O1>42pim+tSL2EUjOj&sK5DLDzs`!SN zs+#?hyFp2q@XcnRxZl{=T$8zq>|FPqXw-yaESNQxMpk4fmLbdMqb+Dpkzv)ogUY-f z!iTBlshg)ByhcckHmQDFU0X|7VhvV@v3G#f%Mgy?u|W+;{YLyf{V9g5&dUIxbMmQY z!|CDzI${yh4`FGr`KjEH{~L2)j+{Q*0tAc~mj!QqoC|Jp4VRC70do+TuW*VbPM(+F z73ej9xj>2o&SXHNC%dDh=iRXARMRFub-UkGiV?n$UR zJ42~^_O)9*Jy;9?M!JKCF*_?Lc3f^U;4&V)xV3fRA`0^NKlf`G;c3l|xinQNB)3MY zliCdYIxxD4&~-w}Gfw9UpGkOY(Sk{bz7hgV6@02|P)`aZGVjkr6E5Qo;}t?k#`WIn z^`Iv7%0?5#trd|74Q92ctKvR+r9M(CgTtOu+V2*tV&?+Wkut!nac2&a@&wl z=i$m)T>Eh&x3eP8o1s#*Zj2{P|3<@JNv`9FWYtVb)bb#TSTU&eMTa>IvdWVfiz=_@ z1hV8XD?~=4a?bv?>&cg9hSQ;josm{?&c<=06=D{dL@WPodx=I+f!%Ox_%RiITo>Ky z4H#3K3kWIvW3Ie~EnBv80jbGVnTxn*Vh_Uw1~JB|iu>JPU+yo7&q7yyxLIG#Y^}fX zPN&F55_-=^6uyd&GaIj4*h~A65!pLA*uLG6=1wPKPaPj~0pa`#bTab6XXdlSEp|q= z($Yxq^js`aX;J|nYG1Qjq6INfmph?&zp7_vcOpCL=|xf*(pVLlMly`hW&O%BeM`p3 zWr7SC-o%6-(dIjFfwhRneD?GdY%0(Iv#1g^Qr!jOVV|lxEW+lpdFNL=7^$e^h;V-T zS?Ez`T{tj@!EtI-GI&Em&NE>RHVn_}B&?sHCcHvAk^CrTg&Y#f1j8jELr_dT-tj?> zIGoYNUv>9=xVvt>GOqEs^!dc&m+&clA%EBGTcF}5d18Z( zh}?EEaq!T_g*$7h>utuY7-DMBeaFY#52b61&)eS(mnq>;a z3~|ALKfDT%8VN;meQxi+N zNof$sW=9#t!KyG5Xo3agaFKG65-L=~A3f!hVHF9By=*Gg#syIw%W3HVdNcHeBi5%U znBrc?;O5YC0ktQk0wF8Hq2?MA2>Tw-U|GPU0FsX8$=)}bMTBSOQHtl4))zQLG!8bW zkv#Z_%rjXnEbDuFvFh`<^ocy@3+?cV_U1dvN&{4EE7U|}7H8ALWuQ?~Fy}&lh5l}6 zL*N@r>Bw*FGSK^4inqYXJ0W)v_^s6#iVtl}GNY2YB$ikrw4{isjJUL->tF}|TSMJW93Z!Mn+n#UIi=oTw5`Eo}Knpa~1#%Vgcp|TY zLb3ryHIEv{qfd^Yh|y&VKbE0&2t_QJ;(VR%@sb9kNjZs(z}XMDZA0DRr`x?8QJ<%{ zn!j~DHS(oFw)_{J_O=r9+Q&kVyOg&&vBvyakN%jY-exE>QMiZnMtrI#eEyu;PvUQk zjpohsIl52JYoHy%&~>ed!DFA0MQd5_6KronRHK>~a#z)6LGOAQgT7Ut+^UT!v9|3? z%$dve{`vXMKt>Sz1V=8+b1?tr{6S9heAi^bmGXX~8kIjov|X!IRn~&8J>a_!HLlOq z_m#Vt3L>Jn!s>NS$wR?uzf{+@Pa)QxGv+_sc+ev}-SzBlhcu~~%&C3Y?I|BGpc%q|8sDvxrSfZyD0Zc8*vtx)S1YxDPy z;{q{u848_dX6&WxyH5@mB|j?>IQM;MoC}2c-!me$=#F2sG4gYG=h>4_+Ec;lhNGyX z4FQAaJq4st@x+X%>$BwYIf_t3vn(tjXI+fYiA&XQK=&d|hSBkd02Rkm<*k1BQHN z5J{BsbQ*)X`P1uEkHYQz{9*L3HlEgdyE{%4HsO(+>oEmlA7ls0h%L<7t%PtfnfaXN zK3JIR0_ufAFHeVF0A?5YY=5{+u?u4YErLgJ@JD1p`QME*f081&4l{RHM_DMLqXx|J zO}Fwwn=^Kxg;EjZy~_ArzPDMQ!!kvs=sy>c*e=)s&cNm+*(*~I7S09xD)Oexel1f^ zQp~J>5m|~KM4Ig0!_Ijc5_qf#ejm3T)$Qp)Q4DdPWOhSgp|Ib^WA`IAhVAazB5THe z-$NS%OjP?=Ua422HxRdfxSV(IT3{Oz^zv)2@V{Jw9IbZ?glfOrGrgE{4FulT4+)kx{G%y;aJ zn|D3B4Ss!DIhJEySl6?c>R9mXl?16|;*E^M7z9C)?{{jxY{XBf9PmX<415kbOl{DbTmLs9!e!Js~W@e-OR@5woW~f>-6P90naTl=7zc>NDo6bC)(F{bMiM5&qj;C zu*`Zmo<*ncbj~d}8=Wa}VVK$3>&2w%3tsp_*`^sGaw2p?MRr6kq4($%vN7VC&|CSB zUG#0K^N<;dj4B2j?Xf2by5ZEVf{0c7@AW(gq}Dl8V!BCCY@m>V@e2Xdw)%7+vM+l` zXpas^spi#h-V>lzHzWER?&-YI@49QU%uN+FNmB?aQNmo`Ac6S5A-OqJgVGmpx4LgL zvYTPmm+oXU^ye0H4myLu1P&{o`0dEG=U>!68R%7c*l}}dhr(O1#m%u?x#B3u@dR1b z+K|52`A-;Qu)�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 BWC8#H literal 1216 zcmeAS@N?(olHy`uVBq!ia0y~yU~~Yow{Wll$)``g3NkRTw0pWZhE&{odv{^+tptW+ z5BuX-HyIfjZ88$-T(icdZqp=t#z;v^%T5<1<%u3DLY=RVgssbNy!38Tzv}tqYemO5 zdarw5mlbV``14x`B(TMjla7){{N)s_n*$5a97+*`ITE`y}h4 z@}}GTyZijT+0MzWj4TEX3~UqXKR#?bzVi6z$M$_iuiB0;HFwgh{TI8haMKG`b4MYI zYH^F2f6mOaLNii=`rUq3p2-sa}0i;jt88drf$#vqJ%LlH1$ivxnG~6ANhYee)zcI zF<|WVDP7ph)MF^O_JG7D9UY2|5?fM?KLf;uH zb7-;${9NjHaAz{ZO16NXs?YYnU|?Orz(^!M$e`uG%E1=EsO4bLz!kvQ#NhpsL7x4?*G)H`8bWxV^KRE{T(yc%{ { this.scene.ui.clearText(); this.scene.ui.setMode(Mode.MESSAGE).then(() => { - SoundFade.fadeOut(this.scene.sound.get('menu'), 500, true); + SoundFade.fadeOut(this.scene, this.scene.sound.get('menu'), 500, true); this.scene.time.delayedCall(500, () => this.scene.playBgm()); this.end(); }); @@ -2819,6 +2819,7 @@ export class AttemptRunPhase extends PokemonPhase { enemyField.forEach(enemyPokemon => { enemyPokemon.hideInfo().then(() => enemyPokemon.destroy()); enemyPokemon.hp = 0; + enemyPokemon.trySetStatus(StatusEffect.FAINT); }); this.scene.clearEnemyHeldItemModifiers(); @@ -2878,28 +2879,42 @@ export class SelectModifierPhase extends BattlePhase { const modifierType = typeOptions[cursor].type; if (modifierType instanceof PokemonModifierType) { - const pokemonModifierType = modifierType as PokemonModifierType; - const isMoveModifier = modifierType instanceof PokemonMoveModifierType; - const isTmModifier = modifierType instanceof TmModifierType; - const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER - : isTmModifier ? PartyUiMode.TM_MODIFIER : PartyUiMode.MODIFIER; - const tmMoveId = isTmModifier - ? (modifierType as TmModifierType).moveId - : undefined; - this.scene.ui.setModeWithoutClear(Mode.PARTY, partyUiMode, -1, (slotIndex: integer, option: PartyOption) => { - if (slotIndex < 6) { - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { - const modifierType = typeOptions[cursor].type; - const modifier = !isMoveModifier - ? modifierType.newModifier(party[slotIndex]) - : modifierType.newModifier(party[slotIndex], option - PartyOption.MOVE_1); - this.scene.ui.clearText(); - this.scene.ui.setMode(Mode.MESSAGE); - this.scene.addModifier(modifier, false, true).then(() => super.end()); - }); - } else - this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, ); - }, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId); + if (modifierType instanceof FusePokemonModifierType) { + this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.SPLICE, -1, (fromSlotIndex: integer, spliceSlotIndex: integer) => { + if (spliceSlotIndex !== undefined && fromSlotIndex < 6 && spliceSlotIndex < 6 && fromSlotIndex !== spliceSlotIndex) { + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { + const modifier = modifierType.newModifier(party[fromSlotIndex], party[spliceSlotIndex]); + this.scene.ui.clearText(); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.addModifier(modifier, false, true).then(() => super.end()); + }); + } else + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback); + }, modifierType.selectFilter); + } else { + const pokemonModifierType = modifierType as PokemonModifierType; + const isMoveModifier = modifierType instanceof PokemonMoveModifierType; + const isTmModifier = modifierType instanceof TmModifierType; + const partyUiMode = isMoveModifier ? PartyUiMode.MOVE_MODIFIER + : isTmModifier ? PartyUiMode.TM_MODIFIER : PartyUiMode.MODIFIER; + const tmMoveId = isTmModifier + ? (modifierType as TmModifierType).moveId + : undefined; + this.scene.ui.setModeWithoutClear(Mode.PARTY, partyUiMode, -1, (slotIndex: integer, option: PartyOption) => { + if (slotIndex < 6) { + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer()).then(() => { + const modifierType = typeOptions[cursor].type; + const modifier = !isMoveModifier + ? modifierType.newModifier(party[slotIndex]) + : modifierType.newModifier(party[slotIndex], option - PartyOption.MOVE_1); + this.scene.ui.clearText(); + this.scene.ui.setMode(Mode.MESSAGE); + this.scene.addModifier(modifier, false, true).then(() => super.end()); + }); + } else + this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, ); + }, pokemonModifierType.selectFilter, modifierType instanceof PokemonMoveModifierType ? (modifierType as PokemonMoveModifierType).moveSelectFilter : undefined, tmMoveId); + } } else { this.addModifier(typeOptions[cursor].type.newModifier()).then(() => super.end()); this.scene.ui.clearText(); diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 4d4d5b1cd..fc217cd1e 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -5,7 +5,7 @@ import { EncounterPhase, SummonPhase, NextEncounterPhase, NewBiomeEncounterPhase import Pokemon, { PlayerPokemon, EnemyPokemon } from './pokemon'; import PokemonSpecies, { PokemonSpeciesFilter, allSpecies, getPokemonSpecies, initSpecies } from './data/pokemon-species'; import * as Utils from './utils'; -import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier } from './modifier/modifier'; +import { Modifier, ModifierBar, ConsumablePokemonModifier, ConsumableModifier, PokemonHpRestoreModifier, HealingBoosterModifier, PersistentModifier, PokemonHeldItemModifier, ModifierPredicate, DoubleBattleChanceBoosterModifier, FusePokemonModifier } from './modifier/modifier'; import { PokeballType } from './data/pokeball'; import { initAutoPlay } from './system/auto-play'; import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims'; @@ -352,7 +352,7 @@ export default class BattleScene extends Phaser.Scene { update() { this.checkInput(); - this.ui.update(); + this.ui?.update(); } launchBattle() { @@ -1007,7 +1007,7 @@ export default class BattleScene extends Phaser.Scene { return false; } - playSound(soundName: string, config?: object): AnySound { + playSound(sound: string | AnySound, config?: object): AnySound { if (config) { if (config.hasOwnProperty('volume')) config['volume'] *= this.masterVolume * this.seVolume; @@ -1015,8 +1015,13 @@ export default class BattleScene extends Phaser.Scene { config['volume'] = this.masterVolume * this.seVolume; } else config = { volume: this.masterVolume * this.seVolume }; - this.sound.play(soundName, config); - return this.sound.get(soundName) as AnySound; + if (typeof sound === 'string') { + this.sound.play(sound, config); + return this.sound.get(sound) as AnySound; + } else { + sound.play(config); + return sound; + } } playSoundWithoutBgm(soundName: string, pauseDuration?: integer): AnySound { @@ -1149,7 +1154,8 @@ export default class BattleScene extends Phaser.Scene { args.push(hpRestoreMultiplier.value); } else args.push(1); - } + } else if (modifier instanceof FusePokemonModifier) + args.push(this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon); if (modifier.shouldApply(args)) modifier.apply(args); diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index c65b32e1a..99f818144 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -242,7 +242,7 @@ class AnimTimedSoundEvent extends AnimTimedEvent { } return Math.ceil((scene.sound.get(this.resourceName).totalDuration * 1000) / 33.33); } else - return Math.ceil(battleAnim.user.cry(soundConfig) / 33.33); + return Math.ceil((battleAnim.user.cry(soundConfig).totalDuration * 1000) / 33.33); } getEventType(): string { diff --git a/src/data/move.ts b/src/data/move.ts index 6cd272849..f489f94a6 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2023,6 +2023,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } else { switchOutTarget.hideInfo().then(() => switchOutTarget.destroy()); switchOutTarget.hp = 0; + switchOutTarget.trySetStatus(StatusEffect.FAINT); user.scene.queueMessage(getPokemonMessage(switchOutTarget, ' fled!'), null, true, 500); diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 2c3db0122..00244b751 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -1,11 +1,21 @@ import { Moves } from "./move"; import { Species } from "./species"; -interface PokemonLevelMoves { - [key: string]: Array> +export type LevelMoves = (integer | Moves)[][]; + +interface PokemonSpeciesLevelMoves { + [key: string]: LevelMoves } -export const pokemonLevelMoves: PokemonLevelMoves = { +interface PokemonFormLevelMoves { + [key: integer]: LevelMoves +} + +interface PokemonSpeciesFormLevelMoves { + [key: string]: PokemonFormLevelMoves +} + +export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.BULBASAUR]: [ [ 1, Moves.TACKLE ], [ 3, Moves.GROWL ], @@ -10965,4 +10975,43 @@ export const pokemonLevelMoves: PokemonLevelMoves = { [ 80, Moves.HYPER_BEAM ], [ 88, Moves.OUTRAGE ] ] -}; \ No newline at end of file +}; + +export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { + [Species.KYUREM]: { + 1: [ + [ 1, Moves.DRAGON_RAGE ], + [ 1, Moves.ICY_WIND ], + [ 8, Moves.IMPRISON ], + [ 15, Moves.ANCIENT_POWER ], + [ 22, Moves.ICE_BEAM ], + [ 29, Moves.DRAGON_BREATH ], + [ 36, Moves.SLASH ], + [ 43, Moves.SCARY_FACE ], + [ 50, Moves.ICE_BURN ], + [ 57, Moves.DRAGON_PULSE ], + [ 64, Moves.IMPRISON ], + [ 71, Moves.ENDEAVOR ], + [ 78, Moves.BLIZZARD ], + [ 85, Moves.OUTRAGE ], + [ 92, Moves.HYPER_VOICE ] + ], + 2: [ + [ 1, Moves.DRAGON_RAGE ], + [ 1, Moves.ICY_WIND ], + [ 8, Moves.IMPRISON ], + [ 15, Moves.ANCIENT_POWER ], + [ 22, Moves.ICE_BEAM ], + [ 29, Moves.DRAGON_BREATH ], + [ 36, Moves.SLASH ], + [ 43, Moves.SCARY_FACE ], + [ 50, Moves.FREEZE_SHOCK ], + [ 57, Moves.DRAGON_PULSE ], + [ 64, Moves.IMPRISON ], + [ 71, Moves.ENDEAVOR ], + [ 78, Moves.BLIZZARD ], + [ 85, Moves.OUTRAGE ], + [ 92, Moves.HYPER_VOICE ] + ] + } +} \ No newline at end of file diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 98b64dff2..d24156f83 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -1,11 +1,12 @@ import { Abilities } from './ability'; -import BattleScene from '../battle-scene'; +import BattleScene, { AnySound } from '../battle-scene'; import { GrowthRate } from './exp'; import { SpeciesWildEvolutionDelay, pokemonEvolutions, pokemonPrevolutions } from './pokemon-evolutions'; import { Species } from './species'; import { Type } from './type'; import * as Utils from '../utils'; import { TrainerType, trainerConfigs } from './trainer-type'; +import { LevelMoves, pokemonFormLevelMoves as pokemonSpeciesFormLevelMoves, pokemonSpeciesLevelMoves } from './pokemon-level-moves'; export function getPokemonSpecies(species: Species): PokemonSpecies { if (species >= Species.XERNEAS) @@ -74,6 +75,12 @@ export abstract class PokemonSpeciesForm { return !abilityIndex ? this.ability1 : abilityIndex === 1 && this.ability2 ? this.ability2 : this.abilityHidden } + getLevelMoves(): LevelMoves { + if (pokemonSpeciesFormLevelMoves.hasOwnProperty(this.speciesId) && pokemonSpeciesFormLevelMoves[this.speciesId].hasOwnProperty(this.formIndex)) + return pokemonSpeciesFormLevelMoves[this.speciesId][this.formIndex]; + return pokemonSpeciesLevelMoves[this.speciesId]; + } + isObtainable() { return this.generation <= 5 && this.getFormSpriteKey(this.formIndex) !== 'mega'; } @@ -147,15 +154,21 @@ export abstract class PokemonSpeciesForm { const forms = getPokemonSpecies(this.speciesId).forms; if (forms.length) { const formKey = forms[formIndex || 0].formKey; - if (formKey === 'mega' || formKey === 'eternamax') - ret += `-${formKey}`; + switch (formKey) { + case 'mega': + case 'white': + case 'black': + case 'eternamax': + ret += `-${formKey}`; + break; + } } return ret; } loadAssets(scene: BattleScene, female: boolean, formIndex?: integer, shiny?: boolean, startLoad?: boolean): Promise { return new Promise(resolve => { - scene.load.audio(this.speciesId.toString(), `audio/cry/${this.getCryKey(formIndex)}.mp3`); + scene.load.audio(this.getCryKey(formIndex), `audio/cry/${this.getCryKey(formIndex)}.mp3`); scene.loadAtlas(this.getSpriteKey(female, formIndex, shiny), 'pokemon', this.getSpriteAtlasPath(female, formIndex, shiny)); scene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; @@ -192,9 +205,13 @@ export abstract class PokemonSpeciesForm { }); } - cry(scene: BattleScene, soundConfig?: Phaser.Types.Sound.SoundConfig): integer { - scene.playSound(this.speciesId.toString(), soundConfig); - return scene.sound.get(this.speciesId.toString()).totalDuration * 1000; + cry(scene: BattleScene, soundConfig?: Phaser.Types.Sound.SoundConfig, ignorePlay?: boolean): AnySound { + const cryKey = this.getCryKey(this.formIndex); + let cry = scene.sound.get(cryKey) as AnySound; + cry = scene.playSound(cry || cryKey, soundConfig); + if (ignorePlay) + cry.stop(); + return cry; } } @@ -1132,8 +1149,8 @@ export function initSpecies() { ), new PokemonSpecies(Species.KYUREM, "Kyurem", 5, false, true, false, "Boundary Pokémon", Type.DRAGON, Type.ICE, 3, 325, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 297, GrowthRate.SLOW, "Undiscovered", null, null, 120, false, true, new PokemonForm("Normal", "", Type.DRAGON, Type.ICE, 3, 325, Abilities.PRESSURE, Abilities.NONE, Abilities.NONE, 660, 125, 130, 90, 130, 90, 95, 3, 0, 297, GrowthRate.SLOW, "Undiscovered", null, null, 120, false), - new PokemonForm("Black", "black", Type.DRAGON, Type.ICE, 3.3, 325, Abilities.TERAVOLT, Abilities.NONE, Abilities.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 315, GrowthRate.SLOW, "Undiscovered", null, null, 120, false), - new PokemonForm("White", "white", Type.DRAGON, Type.ICE, 3.6, 325, Abilities.TURBOBLAZE, Abilities.NONE, Abilities.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 315, GrowthRate.SLOW, "Undiscovered", null, null, 120, false) + new PokemonForm("White", "white", Type.DRAGON, Type.ICE, 3.6, 325, Abilities.TURBOBLAZE, Abilities.NONE, Abilities.NONE, 700, 125, 120, 90, 170, 100, 95, 3, 0, 315, GrowthRate.SLOW, "Undiscovered", null, null, 120, false), + new PokemonForm("Black", "black", Type.DRAGON, Type.ICE, 3.3, 325, Abilities.TERAVOLT, Abilities.NONE, Abilities.NONE, 700, 125, 170, 100, 120, 90, 95, 3, 0, 315, GrowthRate.SLOW, "Undiscovered", null, null, 120, false) ), new PokemonSpecies(Species.KELDEO, "Keldeo", 5, false, false, true, "Colt Pokémon", Type.WATER, Type.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 261, GrowthRate.SLOW, "Undiscovered", null, null, 80, false, true, new PokemonForm("Ordinary Forme", "ordinary", Type.WATER, Type.FIGHTING, 1.4, 48.5, Abilities.JUSTIFIED, Abilities.NONE, Abilities.NONE, 580, 91, 72, 90, 129, 90, 108, 3, 35, 261, GrowthRate.SLOW, "Undiscovered", null, null, 80, false), diff --git a/src/data/trainer-type.ts b/src/data/trainer-type.ts index b90a0066e..a9b03a2d3 100644 --- a/src/data/trainer-type.ts +++ b/src/data/trainer-type.ts @@ -4,7 +4,6 @@ import { EnemyPokemon } from "../pokemon"; import * as Utils from "../utils"; import { Moves } from "./move"; import { pokemonEvolutions, pokemonPrevolutions } from "./pokemon-evolutions"; -import { pokemonLevelMoves } from "./pokemon-level-moves"; import PokemonSpecies, { PokemonSpeciesFilter, getPokemonSpecies } from "./pokemon-species"; import { Species } from "./species"; import { tmSpecies } from "./tms"; @@ -552,7 +551,7 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.BREEDER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.POKEFAN).setHasGenders().setDouble() .setPartyTemplateFunc(scene => getWavePartyTemplate(scene, trainerPartyTemplates.FOUR_WEAKER, trainerPartyTemplates.FIVE_WEAKER, trainerPartyTemplates.SIX_WEAKER)), [TrainerType.CLERK]: new TrainerConfig(++t).setHasGenders().setEncounterBgm(TrainerType.CLERK), - [TrainerType.CYCLIST]: new TrainerConfig(++t).setHasGenders().setEncounterBgm(TrainerType.CYCLIST).setSpeciesFilter(s => !!pokemonLevelMoves[s.speciesId].find(plm => plm[1] === Moves.QUICK_ATTACK)), + [TrainerType.CYCLIST]: new TrainerConfig(++t).setHasGenders().setEncounterBgm(TrainerType.CYCLIST).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.QUICK_ATTACK)), [TrainerType.DANCER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.DEPOT_AGENT]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK), [TrainerType.DOCTOR]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK), @@ -575,8 +574,8 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.JANITOR]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK), [TrainerType.LINEBACKER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.MAID]: new TrainerConfig(++t).setEncounterBgm(TrainerType.RICH).setSpeciesFilter(s => s.eggType1 === 'Field' || s.eggType2 === 'Field'), - [TrainerType.MUSICIAN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => !!pokemonLevelMoves[s.speciesId].find(plm => plm[1] === Moves.SING)), - [TrainerType.NURSE]: new TrainerConfig(++t).setEncounterBgm('lass').setSpeciesFilter(s => !!pokemonLevelMoves[s.speciesId].find(plm => plm[1] === Moves.CHARM) || !!pokemonLevelMoves[s.speciesId].find(plm => plm[1] === Moves.HEAL_PULSE)), + [TrainerType.MUSICIAN]: new TrainerConfig(++t).setEncounterBgm(TrainerType.ROUGHNECK).setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), + [TrainerType.NURSE]: new TrainerConfig(++t).setEncounterBgm('lass').setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.CHARM) || !!s.getLevelMoves().find(plm => plm[1] === Moves.HEAL_PULSE)), [TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setEncounterBgm('lass'), [TrainerType.OFFICER]: new TrainerConfig(++t).setEncounterBgm(TrainerType.CLERK).setSpeciesPools([ Species.VULPIX, Species.GROWLITHE, Species.SNUBBULL, Species.HOUNDOUR, Species.POOCHYENA, Species.ELECTRIKE, Species.LILLIPUP ]), [TrainerType.PARASOL_LADY]: new TrainerConfig(++t).setEncounterBgm(TrainerType.PARASOL_LADY).setSpeciesFilter(s => s.isOfType(Type.WATER)), diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 533e5318b..47ba5ea7c 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -440,6 +440,28 @@ export class EvolutionItemModifierType extends PokemonModifierType implements Ge } } +export class FusePokemonModifierType extends PokemonModifierType { + constructor(name: string, iconImage?: string) { + super(name, 'Combines two Pokémon, giving the first Pokémon the ability of the second', (_type, args) => new Modifiers.FusePokemonModifier(this, (args[0] as PlayerPokemon).id, (args[1] as PlayerPokemon).id), + (pokemon: PlayerPokemon) => { + if (pokemon.isFusion()) + return PartyUiHandler.NoEffectMessage; + return null; + }, iconImage); + } +} + +export class UnfusePokemonModifierType extends PokemonModifierType { + constructor(name: string, iconImage?: string) { + super(name, 'Removes the fusion aspects of a spliced Pokémon, but the second Pokémon is lost', (_type, args) => new Modifiers.UnfusePokemonModifier(this, (args[0] as PlayerPokemon).id), + (pokemon: PlayerPokemon) => { + if (!pokemon.isFusion()) + return PartyUiHandler.NoEffectMessage; + return null; + }, iconImage); + } +} + class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { constructor() { super((party: Pokemon[], pregenArgs?: any[]) => { @@ -671,6 +693,9 @@ export const modifierTypes = { SHINY_CHARM: () => new ModifierType('Shiny Charm', 'Dramatically increases the chance of a wild Pokémon being shiny', (type, _args) => new Modifiers.ShinyRateBoosterModifier(type)), ABILITY_CHARM: () => new ModifierType('Ability Charm', 'Dramatically increases the chance of a wild Pokémon having a hidden ability', (type, _args) => new Modifiers.HiddenAbilityRateBoosterModifier(type)), + DNA_SPLICERS: () => new FusePokemonModifierType('DNA Splicers'), + REVERSE_DNA_SPLICERS: () => new UnfusePokemonModifierType('Reverse DNA Splicers', 'dna_splicers'), + MINI_BLACK_HOLE: () => new TurnHeldItemTransferModifierType('Mini Black Hole'), GOLDEN_POKEBALL: () => new ModifierType(`Golden ${getPokeballName(PokeballType.POKEBALL)}`, 'Adds 1 extra item option at the end of every battle', @@ -713,7 +738,7 @@ const modifierPool = { new WeightedModifierType(modifierTypes.LURE, 2), new WeightedModifierType(modifierTypes.TEMP_STAT_BOOSTER, 4), new WeightedModifierType(modifierTypes.BERRY, 2), - new WeightedModifierType(modifierTypes.TM_COMMON, 1) + new WeightedModifierType(modifierTypes.TM_COMMON, 1), ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), [ModifierTier.GREAT]: [ new WeightedModifierType(modifierTypes.GREAT_BALL, 6), @@ -774,11 +799,13 @@ const modifierPool = { new WeightedModifierType(modifierTypes.OVAL_CHARM, 2), new WeightedModifierType(modifierTypes.ABILITY_CHARM, 2), new WeightedModifierType(modifierTypes.EXP_BALANCE, 1), + new WeightedModifierType(modifierTypes.REVERSE_DNA_SPLICERS, (party: Pokemon[]) => party.filter(p => p.fusionSpecies).length > 1 ? 3 : 0), ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.MASTER]: [ new WeightedModifierType(modifierTypes.MASTER_BALL, 3), new WeightedModifierType(modifierTypes.SHINY_CHARM, 2), - new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0) + new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party.filter(p => !p.fusionSpecies).length > 1 ? 1 : 0), + new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0), ].map(m => { m.setTier(ModifierTier.MASTER); return m; }), [ModifierTier.LUXURY]: [ new WeightedModifierType(modifierTypes.GOLDEN_EXP_CHARM, 1), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 4777be5d0..9437b6556 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -908,6 +908,38 @@ export class EvolutionItemModifier extends ConsumablePokemonModifier { } } +export class FusePokemonModifier extends ConsumablePokemonModifier { + public fusePokemonId: integer; + + constructor(type: ModifierType, pokemonId: integer, fusePokemonId: integer) { + super(type, pokemonId); + + this.fusePokemonId = fusePokemonId; + } + + shouldApply(args: any[]): boolean { + return super.shouldApply(args) && args[1] instanceof PlayerPokemon && this.fusePokemonId === (args[1] as PlayerPokemon).id; + } + + apply(args: any[]): boolean { + (args[0] as PlayerPokemon).fuse(args[1] as PlayerPokemon); + + return true; + } +} + +export class UnfusePokemonModifier extends ConsumablePokemonModifier { + constructor(type: ModifierType, pokemonId: integer) { + super(type, pokemonId); + } + + apply(args: any[]): boolean { + (args[0] as PlayerPokemon).unfuse(); + + return true; + } +} + export class MultipleParticipantExpBonusModifier extends PersistentModifier { constructor(type: ModifierType, stackCount?: integer) { super(type, stackCount); diff --git a/src/pokemon.ts b/src/pokemon.ts index 771ab3931..f30db3a3c 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -1,8 +1,7 @@ import Phaser from 'phaser'; import BattleScene, { AnySound } from './battle-scene'; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from './ui/battle-info'; -import Move, { StatChangeAttr, HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariablePowerAttr, Moves, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, AttackMove, AddBattlerTagAttr } from "./data/move"; -import { pokemonLevelMoves } from './data/pokemon-level-moves'; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariablePowerAttr, Moves, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, AttackMove, AddBattlerTagAttr } from "./data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, getPokemonSpecies } from './data/pokemon-species'; import * as Utils from './utils'; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier } from './data/type'; @@ -28,6 +27,7 @@ import PokemonData from './system/pokemon-data'; import { BattlerIndex } from './battle'; import { Mode } from './ui/ui'; import PartyUiHandler, { PartyOption, PartyUiMode } from './ui/party-ui-handler'; +import SoundFade from 'phaser3-rex-plugins/plugins/soundfade'; export enum FieldPosition { CENTER, @@ -59,6 +59,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public winCount: integer; public pokerus: boolean; + public fusionSpecies: PokemonSpecies; + public fusionFormIndex: integer; + public fusionAbilityIndex: integer; + public fusionShiny: boolean; + public fusionGender: Gender; + public summonData: PokemonSummonData; public battleSummonData: PokemonBattleSummonData; public turnData: PokemonTurnData; @@ -107,6 +113,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.status = dataSource.status; this.winCount = dataSource.winCount; this.pokerus = !!dataSource.pokerus; + this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : getPokemonSpecies(dataSource.fusionSpecies); + this.fusionFormIndex = dataSource.fusionFormIndex; + this.fusionAbilityIndex = dataSource.fusionAbilityIndex; + this.fusionShiny = dataSource.fusionShiny; + this.fusionGender = dataSource.fusionGender; } else { this.generateAndPopulateMoveset(); @@ -216,6 +227,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { .then(() => { loadMoveAnimAssets(this.scene, moveIds); this.getSpeciesForm().loadAssets(this.scene, this.getGender() === Gender.FEMALE, this.formIndex, this.shiny); + if (this.fusionSpecies) + this.getFusionSpeciesForm().loadAssets(this.scene, this.getGender() === Gender.FEMALE, this.fusionFormIndex, this.shiny); if (this.isPlayer()) this.scene.loadAtlas(this.getBattleSpriteKey(), 'pokemon', this.getBattleSpriteAtlasPath()); this.scene.load.once(Phaser.Loader.Events.COMPLETE, () => { @@ -287,6 +300,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.species.forms[this.formIndex]; } + getFusionSpeciesForm(): PokemonSpeciesForm { + if (!this.fusionSpecies.forms?.length || this.fusionFormIndex >= this.fusionSpecies.forms.length) + return this.fusionSpecies; + return this.fusionSpecies.forms[this.fusionFormIndex]; + } + getSprite(): Phaser.GameObjects.Sprite { return this.getAt(0) as Phaser.GameObjects.Sprite; } @@ -373,6 +392,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.stats) this.stats = [ 0, 0, 0, 0, 0, 0 ]; const baseStats = this.getSpeciesForm().baseStats.slice(0); + if (this.fusionSpecies) { + const fusionBaseStats = this.getFusionSpeciesForm().baseStats; + for (let s = 0; s < this.stats.length; s++) + baseStats[s] = Math.ceil((baseStats[s] + fusionBaseStats[s]) / 2); + } this.scene.applyModifiers(PokemonBaseStatModifier, this.isPlayer(), this, baseStats); const stats = Utils.getEnumValues(Stat); for (let s of stats) { @@ -452,6 +476,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getAbility(): Ability { if (ABILITY_OVERRIDE && this.isPlayer()) return abilities[ABILITY_OVERRIDE]; + if (this.fusionSpecies) + return abilities[this.getFusionSpeciesForm().getAbility(this.fusionAbilityIndex)]; return abilities[this.getSpeciesForm().getAbility(this.abilityIndex)]; } @@ -493,7 +519,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { getLevelMoves(startingLevel?: integer): Moves[] { const ret: Moves[] = []; - const levelMoves = pokemonLevelMoves[this.species.speciesId]; + const levelMoves = this.getSpeciesForm().getLevelMoves();; if (levelMoves) { if (!startingLevel) startingLevel = this.level; @@ -540,7 +566,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { generateAndPopulateMoveset(): void { this.moveset = []; const movePool = []; - const allLevelMoves = pokemonLevelMoves[this.species.speciesId]; + const allLevelMoves = this.getSpeciesForm().getLevelMoves(); if (!allLevelMoves) { console.log(this.species.speciesId, 'ERROR') return; @@ -917,22 +943,46 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.summonData.moveQueue; } - cry(soundConfig?: Phaser.Types.Sound.SoundConfig): integer { - return this.getSpeciesForm().cry(this.scene, soundConfig); + cry(soundConfig?: Phaser.Types.Sound.SoundConfig): AnySound { + const cry = this.getSpeciesForm().cry(this.scene, soundConfig); + let duration = cry.totalDuration * 1000; + if (this.fusionSpecies) { + let fusionCry = this.getFusionSpeciesForm().cry(this.scene, soundConfig, true); + duration = Math.min(duration, fusionCry.totalDuration * 1000); + fusionCry.destroy(); + this.scene.time.delayedCall(Utils.fixedInt(Math.ceil(duration * 0.4)), () => { + try { + SoundFade.fadeOut(this.scene, cry, Utils.fixedInt(Math.ceil(duration * 0.2))); + fusionCry = this.getFusionSpeciesForm().cry(this.scene, Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0) }, soundConfig)); + SoundFade.fadeIn(this.scene, fusionCry, Utils.fixedInt(Math.ceil(duration * 0.2)), this.scene.masterVolume * this.scene.seVolume, 0); + } catch (err) { + console.error(err); + } + }); + } + + return cry; } - faintCry(callback: Function) { - const key = this.species.speciesId.toString(); + faintCry(callback: Function): void { + if (this.fusionSpecies) + return this.fusionFaintCry(callback); + + const key = this.getSpeciesForm().getCryKey(); let i = 0; let rate = 0.85; - const crySound = this.scene.playSound(key, { rate: rate }) as AnySound; + const cry = this.scene.playSound(key, { rate: rate }) as AnySound; const sprite = this.getSprite(); const tintSprite = this.getTintSprite(); + const delay = Math.max(this.scene.sound.get(key).totalDuration * 50, 25); + let frameProgress = 0; let frameThreshold: number; + sprite.anims.pause(); tintSprite.anims.pause(); + let faintCryTimer = this.scene.time.addEvent({ delay: Utils.fixedInt(delay), repeat: -1, @@ -947,9 +997,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } frameProgress -= frameThreshold; } - if (crySound && !crySound.pendingRemove) { + if (cry && !cry.pendingRemove) { rate *= 0.99; - crySound.setRate(rate); + cry.setRate(rate); } else { faintCryTimer.destroy(); @@ -959,12 +1009,98 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } }); + // Failsafe this.scene.time.delayedCall(Utils.fixedInt(3000), () => { if (!faintCryTimer || !this.scene) return; - if (crySound?.isPlaying) - crySound.stop(); + if (cry?.isPlaying) + cry.stop(); + faintCryTimer.destroy(); + if (callback) + callback(); + }); + } + + private fusionFaintCry(callback: Function): void { + const key = this.getSpeciesForm().getCryKey(); + let i = 0; + let rate = 0.85; + let cry = this.scene.playSound(key, { rate: rate }) as AnySound; + const sprite = this.getSprite(); + const tintSprite = this.getTintSprite(); + let duration = cry.totalDuration * 1000; + + let fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), { rate: rate }) as AnySound; + fusionCry.stop(); + duration = Math.min(duration, fusionCry.totalDuration * 1000); + fusionCry.destroy(); + + const delay = Math.max(duration * 0.05, 25); + + let transitionIndex = 0; + let durationProgress = 0; + + const transitionThreshold = Math.ceil(duration * 0.4); + while (durationProgress < transitionThreshold) { + ++i; + durationProgress += delay * rate; + rate *= 0.99; + } + + transitionIndex = i; + + i = 0; + rate = 0.85; + + let frameProgress = 0; + let frameThreshold: number; + + sprite.anims.pause(); + tintSprite.anims.pause(); + + let faintCryTimer = this.scene.time.addEvent({ + delay: Utils.fixedInt(delay), + repeat: -1, + callback: () => { + ++i; + frameThreshold = sprite.anims.msPerFrame / rate; + frameProgress += delay; + while (frameProgress > frameThreshold) { + if (sprite.anims.duration) { + sprite.anims.nextFrame(); + tintSprite.anims.nextFrame(); + } + frameProgress -= frameThreshold; + } + if (i === transitionIndex) { + SoundFade.fadeOut(this.scene, cry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2))); + fusionCry = this.scene.playSound(this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex), Object.assign({ seek: Math.max(fusionCry.totalDuration * 0.4, 0), rate: rate })); + SoundFade.fadeIn(this.scene, fusionCry, Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), this.scene.masterVolume * this.scene.seVolume, 0); + } + rate *= 0.99; + if (cry && !cry.pendingRemove) + cry.setRate(rate); + if (fusionCry && !fusionCry.pendingRemove) + fusionCry.setRate(rate); + if ((!cry || cry.pendingRemove) && (!fusionCry || fusionCry.pendingRemove)) { + faintCryTimer.destroy(); + faintCryTimer = null; + if (callback) + callback(); + } + } + }); + + // Failsafe + this.scene.time.delayedCall(Utils.fixedInt(3000), () => { + console.log(faintCryTimer) + if (!faintCryTimer || !this.scene) + return; + if (cry?.isPlaying) + cry.stop(); + if (fusionCry?.isPlaying) + fusionCry.stop(); faintCryTimer.destroy(); if (callback) callback(); @@ -1220,6 +1356,53 @@ export class PlayerPokemon extends Pokemon { } } } + + isFusion(): boolean { + return !!(this.fusionSpecies || (this.species.speciesId === Species.KYUREM && this.formIndex)); + } + + fuse(pokemon: PlayerPokemon): Promise { + return new Promise(resolve => { + if (this.species.speciesId === Species.KYUREM && (pokemon.species.speciesId === Species.RESHIRAM || pokemon.species.speciesId === Species.ZEKROM)) + this.formIndex = pokemon.species.speciesId === Species.RESHIRAM ? 1 : 2; + else { + this.fusionSpecies = pokemon.species; + this.fusionFormIndex = pokemon.formIndex; + this.fusionAbilityIndex = pokemon.abilityIndex; + this.fusionShiny = pokemon.shiny; + this.fusionGender = pokemon.gender; + } + + this.calculateStats(); + this.updateInfo(true).then(() => { + const fusedPartyMemberIndex = this.scene.getParty().indexOf(pokemon); + const fusedPartyMemberHeldModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier + && (m as PokemonHeldItemModifier).pokemonId === pokemon.id, true) as PokemonHeldItemModifier[]; + const transferModifiers: Promise[] = []; + for (let modifier of fusedPartyMemberHeldModifiers) + transferModifiers.push(this.scene.tryTransferHeldItemModifier(modifier, this, true, false)); + Promise.allSettled(transferModifiers).then(() => { + this.scene.removePartyMemberModifiers(fusedPartyMemberIndex); + this.scene.getParty().splice(fusedPartyMemberIndex, 1)[0]; + pokemon.destroy(); + resolve(); + }); + }); + }); + } + + unfuse(): Promise { + return new Promise(resolve => { + this.fusionSpecies = undefined; + this.fusionFormIndex = 0; + this.fusionAbilityIndex = 0; + this.fusionShiny = false; + this.fusionGender = 0; + + this.calculateStats(); + this.updateInfo(true).then(() => resolve()); + }); + } } export class EnemyPokemon extends Pokemon { diff --git a/src/system/game-speed.ts b/src/system/game-speed.ts index edd2ea74a..728e03907 100644 --- a/src/system/game-speed.ts +++ b/src/system/game-speed.ts @@ -45,7 +45,7 @@ export function initGameSpeed() { sound: Phaser.Sound.BaseSound, duration: number, destroy?: boolean - ) => originalFadeOut(scene, sound, thisArg.gameSpeed === 1 ? duration : Math.ceil(duration /= thisArg.gameSpeed), destroy)) as FadeOut; + ) => originalFadeOut(scene, sound, transformValue(duration), destroy)) as FadeOut; const originalFadeIn = SoundFade.fadeIn; SoundFade.fadeIn = (( @@ -54,5 +54,5 @@ export function initGameSpeed() { duration: number, endVolume?: number, startVolume?: number - ) => originalFadeIn(scene, sound, thisArg.gameSpeed === 1 ? duration : Math.ceil(duration /= thisArg.gameSpeed), endVolume, startVolume)) as FadeIn; + ) => originalFadeIn(scene, sound, transformValue(duration), endVolume, startVolume)) as FadeIn; } \ No newline at end of file diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 5c768e020..4ce2caa98 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -27,6 +27,12 @@ export default class PokemonData { public winCount: integer; public pokerus: boolean; + public fusionSpecies: Species; + public fusionFormIndex: integer; + public fusionAbilityIndex: integer; + public fusionShiny: boolean; + public fusionGender: Gender; + public summonData: PokemonSummonData; constructor(source: Pokemon | any) { @@ -48,6 +54,12 @@ export default class PokemonData { this.winCount = source.winCount; this.pokerus = !!source.pokerus; + this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; + this.fusionFormIndex = source.fusionFormIndex; + this.fusionAbilityIndex = source.fusionAbilityIndex; + this.fusionShiny = source.fusionShiny; + this.fusionGender = source.fusionGender; + if (sourcePokemon) { this.moveset = sourcePokemon.moveset; this.status = sourcePokemon.status; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 9077ea948..8553a33ad 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -271,7 +271,8 @@ export default class BattleInfo extends Phaser.GameObjects.Container { ratio = 0; instant = true; } - let duration = this.visible && !instant ? ((levelExp - this.lastLevelExp) / relLevelExp) * 1650 : 0; + const durationMultiplier = Phaser.Tweens.Builders.GetEaseFunction('Sine.easeIn')(1 - (Math.max(this.lastLevel - 100, 0) / 150)); + let duration = this.visible && !instant ? (((levelExp - this.lastLevelExp) / relLevelExp) * 1650) * durationMultiplier : 0; if (duration) (this.scene as BattleScene).playSound('exp'); this.scene.tweens.add({ diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 525bf843d..7524b1ee4 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -21,6 +21,7 @@ export enum PartyUiMode { MOVE_MODIFIER, TM_MODIFIER, MODIFIER_TRANSFER, + SPLICE, RELEASE } @@ -31,6 +32,7 @@ export enum PartyOption { APPLY, TEACH, TRANSFER, + SPLICE, SUMMARY, RELEASE, MOVE_1, @@ -41,6 +43,7 @@ export enum PartyOption { export type PartySelectCallback = (cursor: integer, option: PartyOption) => void; export type PartyModifierTransferSelectCallback = (fromCursor: integer, index: integer, toCursor?: integer) => void; +export type PartyModifierSpliceSelectCallback = (fromCursor: integer, toCursor?: integer) => void; export type PokemonSelectFilter = (pokemon: PlayerPokemon) => string; export type PokemonModifierTransferSelectFilter = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => string; export type PokemonMoveSelectFilter = (pokemonMove: PokemonMove) => string; @@ -200,9 +203,9 @@ export default class PartyUiHandler extends MessageUiHandler { } else if ((option !== PartyOption.SUMMARY && option !== PartyOption.RELEASE && option !== PartyOption.CANCEL) || (option === PartyOption.RELEASE && this.partyUiMode === PartyUiMode.RELEASE)) { let filterResult: string; - if (option !== PartyOption.TRANSFER) { + if (option !== PartyOption.TRANSFER && option !== PartyOption.SPLICE) { filterResult = (this.selectFilter as PokemonSelectFilter)(pokemon); - if (filterResult === null && this.partyUiMode === PartyUiMode.MOVE_MODIFIER) + if (option === PartyOption.TRANSFER && filterResult === null && this.partyUiMode === PartyUiMode.MOVE_MODIFIER) filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]); } else { const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier @@ -210,11 +213,19 @@ export default class PartyUiHandler extends MessageUiHandler { filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)(pokemon, itemModifiers[this.transferOptionCursor]); } if (filterResult === null) { - this.clearOptions(); + if (this.partyUiMode !== PartyUiMode.SPLICE) + this.clearOptions(); if (this.selectCallback) { if (option === PartyOption.TRANSFER) { (this.selectCallback as PartyModifierTransferSelectCallback)(this.transferCursor, this.transferOptionCursor, this.cursor); this.clearTransfer(); + } else if (this.partyUiMode === PartyUiMode.SPLICE) { + if (option === PartyOption.SPLICE) { + (this.selectCallback as PartyModifierSpliceSelectCallback)(this.transferCursor, this.cursor); + this.clearTransfer(); + } else + this.startTransfer(); + this.clearOptions(); } else if (option === PartyOption.RELEASE) this.doRelease(this.cursor); else { @@ -276,7 +287,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.processInput(Button.CANCEL); return; } else if (button === Button.CANCEL) { - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && this.transferMode) { + if ((this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER || this.partyUiMode === PartyUiMode.SPLICE) && this.transferMode) { this.clearTransfer(); ui.playSelect(); } else if (this.partyUiMode !== PartyUiMode.FAINT_SWITCH) { @@ -404,6 +415,10 @@ export default class PartyUiHandler extends MessageUiHandler { if (!this.transferMode) optionsMessage = 'Select a held item to transfer.'; break; + case PartyUiMode.SPLICE: + if (!this.transferMode) + optionsMessage = 'Select another Pokémon to splice.'; + break; } this.showText(optionsMessage, 0); @@ -441,6 +456,13 @@ export default class PartyUiHandler extends MessageUiHandler { case PartyUiMode.MODIFIER_TRANSFER: this.options.push(PartyOption.TRANSFER); break; + case PartyUiMode.SPLICE: + if (this.transferMode) { + if (this.cursor !== this.transferCursor) + this.options.push(PartyOption.SPLICE); + } else + this.options.push(PartyOption.APPLY); + break; case PartyUiMode.RELEASE: this.options.push(PartyOption.RELEASE); break; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 93e870518..6795dd78e 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -100,19 +100,19 @@ export default class SummaryUiHandler extends UiHandler { this.pokemonSprite = this.scene.add.sprite(56, -106, `pkmn__sub`); this.summaryContainer.add(this.pokemonSprite); - this.nameText = addTextObject(this.scene, 6, -39, '', TextStyle.SUMMARY); - this.nameText.setOrigin(0, 1); + this.nameText = addTextObject(this.scene, 6, -54, '', TextStyle.SUMMARY); + this.nameText.setOrigin(0, 0); this.summaryContainer.add(this.nameText); - this.pokeball = this.scene.add.sprite(6, -23, 'pb'); + this.pokeball = this.scene.add.sprite(6, -19, 'pb'); this.pokeball.setOrigin(0, 1); this.summaryContainer.add(this.pokeball); - this.levelText = addTextObject(this.scene, 36, -22, '', TextStyle.SUMMARY); + this.levelText = addTextObject(this.scene, 36, -18, '', TextStyle.SUMMARY); this.levelText.setOrigin(0, 1); this.summaryContainer.add(this.levelText); - this.genderText = addTextObject(this.scene, 96, -22, '', TextStyle.SUMMARY); + this.genderText = addTextObject(this.scene, 96, -18, '', TextStyle.SUMMARY); this.genderText.setOrigin(0, 1); this.summaryContainer.add(this.genderText); @@ -199,7 +199,17 @@ export default class SummaryUiHandler extends UiHandler { this.pokemonSprite.play(this.pokemon.getSpriteKey(true)); this.pokemon.cry(); - this.nameText.setText(this.pokemon.name); + let nameLabel = this.pokemon.name; + if (this.pokemon.fusionSpecies) + nameLabel += `/\n ${this.pokemon.fusionSpecies.name}`; + + this.nameText.setText(nameLabel); + + this.nameText.setFontSize(`${!this.pokemon.fusionSpecies ? '96px' : '72px'}`); + const nameShadowSize = !this.pokemon.fusionSpecies ? 6 : 4.5; + this.nameText.setShadowOffset(nameShadowSize, nameShadowSize); + this.nameText.setLineSpacing(!this.pokemon.fusionSpecies ? 5 : 0); + this.pokeball.setFrame(getPokeballAtlasKey(this.pokemon.pokeball)); this.levelText.setText(this.pokemon.level.toString()); this.genderText.setText(getGenderSymbol(this.pokemon.getGender(true))); @@ -478,7 +488,7 @@ export default class SummaryUiHandler extends UiHandler { if (this.pokemon.species.type2) profileContainer.add(getTypeIcon(1, this.pokemon.species.type2)); - const ability = abilities[this.pokemon.species.getAbility(this.pokemon.abilityIndex)]; + const ability = this.pokemon.getAbility(); const abilityNameText = addTextObject(this.scene, 7, 66, ability.name, TextStyle.SUMMARY); abilityNameText.setOrigin(0, 1); diff --git a/src/ui/text.ts b/src/ui/text.ts index 549d7cf9c..420132820 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -101,7 +101,6 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean) { } export function getModifierTierTextTint(tier: integer): integer { - console.log(tier); switch (tier) { case 0: // ModifierTier.COMMON: return 0xffffff;