From 930b960374f9770c5939ea491b16ad2c47f7120a Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 9 May 2023 12:43:28 -0400 Subject: [PATCH] Increase EXP max level to 10000 Increase EXP max level to 10000; add new battle BGs and random props for enemy side --- public/images/arenas/desert_a.png | Bin 550 -> 1051 bytes public/images/arenas/desert_b.png | Bin 958 -> 1314 bytes public/images/arenas/desert_b_1.png | Bin 0 -> 617 bytes public/images/arenas/desert_b_2.png | Bin 0 -> 729 bytes public/images/arenas/desert_b_3.png | Bin 0 -> 667 bytes public/images/arenas/desert_bg.png | Bin 618 -> 639 bytes public/images/arenas/lake_a.png | Bin 0 -> 1074 bytes public/images/arenas/lake_b.png | Bin 0 -> 1118 bytes public/images/arenas/lake_b_1.png | Bin 0 -> 721 bytes public/images/arenas/lake_b_2.png | Bin 0 -> 486 bytes public/images/arenas/lake_b_3.png | Bin 0 -> 685 bytes public/images/arenas/lake_bg.png | Bin 0 -> 643 bytes public/images/arenas/sea_a.png | Bin 518 -> 928 bytes public/images/arenas/sea_b.png | Bin 979 -> 1467 bytes public/images/arenas/sea_bg.png | Bin 625 -> 638 bytes src/arena.ts | 96 ++++++++++++++++++++++------ src/battle-phases.ts | 25 ++++---- src/battle-scene.ts | 57 +++++++++-------- src/data/exp.ts | 22 ++++++- src/modifier/modifier-type.ts | 11 ++-- src/modifier/modifier.ts | 4 +- src/ui/battle-info.ts | 4 +- src/ui/summary-ui-handler.ts | 6 +- 23 files changed, 151 insertions(+), 74 deletions(-) create mode 100644 public/images/arenas/desert_b_1.png create mode 100644 public/images/arenas/desert_b_2.png create mode 100644 public/images/arenas/desert_b_3.png create mode 100644 public/images/arenas/lake_a.png create mode 100644 public/images/arenas/lake_b.png create mode 100644 public/images/arenas/lake_b_1.png create mode 100644 public/images/arenas/lake_b_2.png create mode 100644 public/images/arenas/lake_b_3.png create mode 100644 public/images/arenas/lake_bg.png diff --git a/public/images/arenas/desert_a.png b/public/images/arenas/desert_a.png index dbacc456477a076a11e02c9fa3cfbbcaaff57edc..0d8ead8251e9c3bcc0bc4b12be4cef41cee0b218 100644 GIT binary patch delta 885 zcmV-*1B(2n1e*wuBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj8t4TybRCr$P z+RtkoRRF;8XOeEV)?h~w#2n|8DN`CQ(c*$HG1vv0pUGrIwiVU&LW zU|Kv;j5Fum)wk{y)8wnQZyw6Axcud6$Ma^*X0w<*8ns%jm~}dJc5P-~bEulxH^b?( zuity&_;bZp2seLNPh+ zF>*0*UtIe=?K|?yavFdA?vJqg+KYc_J}Yu0b0Ec$X)@D`xnBgM9KLLr0KWXv^Tn*K zv9VRm9*_FsLNROm>F3{y*@F{Brp3%G+-ny!)wYImz-2D8`xV^PeJhE%E)hcFfIo3CB{F#5oQHUb@ z(Nr(e7`+(09J>qG|4w7}-pVs+j1gQqb}%d--VI(^jNfPPoD9oPKUM76dogzN3!UGm zj1s^oMsI#$v1|OITD|)hCE1<3?GKA{m%dM9mXBN3>$t`!#vqCzlWOV~W;J?c)w8{L zmUr%rl`uCK!be|UP5WX9%W{AG;+y%T#-E=I`Zo6H(PzWQ7q9NTnd6yW>#q<#d2=Og zM=^vsf;oQCxMzREM66!~v;6;~1}_^nd{Kgv`$U@edY-+AUpZ=7_3>)_vSy=y=zAF@ep!rPv$d6u zP5HQ0RnL^;<#W8J*e`}c$m6ze7vC`9JG``1Y;}qeEK8SX2NpwPbK|}U<~Q`X$`R}q zwPBUx_aH$VMfnWycH?1g+Se_DgKiVtT)!=ZOr(9c=*9`(sKyCZH{-@H$^qQ#_?5)~ zMmd7r4D&%DgiMwY{s(3Yg&T9KNw1yLlXKG<%$#4{7YN`ZM{XaurN(XQNbUnEjtHRGo!aT~$F#X^ zz|yK+G*N^{3*aQN+r_ONwNlC=&q+jd$8tm@MG*nK!|2sohQ+QUa&rYPB2p>k*Z9}> ze{%+MOdNA=QqCcU2;f~tuNAwgqq17Pq|N5@FrE{?_HXuMUmV8-_R=s8iJ}-HfLBz? z`?fcFwN4tlQ&DOM?dRON;cV~Yl5mX)=+JEsQS1p~&P|GV6G8;=>fzf(@0@T9iNdub zc#B8uQ`-y;XhihJPzVvgD}}Gtb>{-TGh|_38il1Bd%O{G^v^l=p#l00000NkvXXu0mjfyI;0o diff --git a/public/images/arenas/desert_b.png b/public/images/arenas/desert_b.png index 5455e82aa7afdf11eaa674052524c6c853166e27..8540334126691772b4c2ff2152262f46a4a889f8 100644 GIT binary patch delta 1195 zcmV;c1XTOJ2cim)BYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj9vPnciRCr$P z-A`^CRUE)^)3iw_C=z0YDmHKimYjnn7huUTSaJcDoTE$502@@%1qjsgCrz6ce$Bk( zdGP$RXWrQ3&qs>hvy*tnfFt%!H3I*6 z{M}b?s_B}mtE*~O#_8#4HCy-jm*3iFM`UAiG=BL0>)W_pUS3wS@^KqW9?A3b^J=zQ zefGsS_UoQ(C>A9}E(PvT<2IHQ$rMO&TxVl&u%?LJr=NUW&2C)2cva2jaej8cn%(&E zr=P3Y_C)cH0CEtrr{{;oZx}L-N<(cQ4~ZiuIExzq}oXIMyf%AbTsK z7r`46yG@asGH@?nyk0#xyLUUz<@(kCcje2gf2!Gbaf~QN5SJW70c5WXiC#T+rzbbh zVoHUm9=|k3j85*qxgB@a=k_)Qut^HzkSH!Sh62c5h{I2YMDN3Y58mGxpb+z^ZCZAW zW5ut2JAH09zPGJBid{jB7%t^-906ojUEz!1#WTG0GPWr^F@~6zQeTH%qfVIEAqz zn6G=iP+r)3q@Fi&-^5txb-_+|dhkX0j?_UHkEFppd$fV+bxV~r4o>iCD^^M;gfl2GI z#JF{7i(d+UMDXQ{%hs2}7Z(?Mf85~lJ-QT?PF?G(zVjVpfW{Kra+|NDY1`lYT=(NT z^s%3Vzb^JhpPi3(n?kmYP1`@+=8_&8e`QQ6om@Y}+&kE=@tDgP(Mw;sJg7q+n{6KZ z()=4Blk4+;pCI*}cdiKT%X%ccMy+nh{ps2kOE?@x04bs?f)@`TR+nyewAlGd$7f$7 zJccpD7nX7?pa4=#p9tphD;2?};FMT)-PrLPdLQ!TH~p>ypvr$tkxX$5DR4pL`m>=R6Nlqe(>0|dna3@+ zl*3PvaWpenw_5!R?n_d666^>Z0000EWmrjOO-%qQ00008000000002eQO$NklTu> zl1?cU5`>puTk-<$H5!pb6HBw-EU;b`1(BgTk+2PauwPH!0{E}4PnV+jNF1*o`u_+a zCXPNAAsmcZ0fZ%S`+Z3Tt*%e2{CPq+B!d~ki*YT0>^X8x;MN+q?~Y^>NO2TE#BS(C zZ=V+DpAA@1c8ey80*Kh1mb^$ZYE@OO@;!+$renDvl6#G!0Frg|>bja2yF}z36}T8< zQB~D{r^g%uxg?Gu9EuR)rei38tT%d{*p0>JUO{TVZYqAc1hE^&IZ@nd3O9iP2_ z0755VL$kP{Q(+K5vXS1{b9xM$_@z#bUE|y4XD@(kXb`+S4c{&7A0$omVvIMZ#;)<@ zVeC%u8h&rsG8i6W?w#Ph|0>$r<7XKR+zgo4Su?@ZjBjW#&KbCK|IJ>4)_q_4-lHuo zgcd-uiC|eCZw6iWu5No!4lS4I8_0WqzJ56Lv!-^oxz5@@-+U^|<7VRL6qqbeiTh5A zyP6qd-#~63+w&>)l&!m#p6;$Sd;-WSLinBAVLc);Lu(jwir|#LZ#yi=C4{XQrcTdt znrV$i(1xf22tAFv-rq+3Xw^>L40000tTI diff --git a/public/images/arenas/desert_b_1.png b/public/images/arenas/desert_b_1.png new file mode 100644 index 0000000000000000000000000000000000000000..1e8d33d48b72e61bfa4df450555cad1dc25f558c GIT binary patch literal 617 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`x0_A>sx;TbZ#J#<_QIEw@g8hT#UhbtaO)g6FoL7Dkh+_;~An?VCSAU^k zTyu=l!W{t`PizjHj7hsukY1Q{{pojawauHqPXAwb-w$Xs6@i3)?-u8^Id9f~zx0@$ zeRlh+Y4Hmute7iNcQ(z~$JcMExuT7&{nF(EyYA-Ii?{T6F$QWI{z;48{PN2(iH1lX zC&d#QYM1!_UrJwWH09&hC1$7G?rZe#cjcekUQkrBYT8dTS%s~_&idYC& zpjBSD=UTV6?8EaC(kns?f1HzF?kv;DE_vlBx z`r9>nZ9ku`b^FL>*?<1+>TLok8m*2`*PY*1J@;I#RqfqFhhpmY@7!6GDo~ zfkU8y7+defN*A#@p2Y?d+S{jBuNT*9;-^M1*D17!KRGgI=0A5vb)b2CsS%!OzP=1v WKsE=|{7b=;K`c*KKbLh*2~7YL0ms(> literal 0 HcmV?d00001 diff --git a/public/images/arenas/desert_b_2.png b/public/images/arenas/desert_b_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a907372731ec169e6d6ce2db766cc30b96028f4e GIT binary patch literal 729 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7Y@db&7(xZIEfhGDyht&!<$iDK=jf-GANIfd_weY%eB*;pAM&Z}GQHz0>;7Z!pPhGO%jezO zYChw@dY+yYwpTiq=G3k`ee2f0ee>u2kNb7($CHYCy~=+MP3HAAXlCP3?r!eo*vYY5 zV*RCezg>S^eOCT$L&}RYQc(j`Dq7snm9-VvV`$&zQvOLqxHva?~KFxO-1SNz5ZVi zsC%8>l*s$)-rZFR*@yM7nB9N5jgR z3=A9lx&I`xGB7Y{d%8G=RK&f#X_zhID8cr?vx}Kq@u1U&2_iz?(ydp_HhLspVrBZt z{4&@@#F4xDzk|aD<7u9gtrGq@G_@|_h-l$v5nT7-$?e+{_dey(+-!cH`S3ZtH=^Nt zzSo&^0_~#(cu+QD<$4E3vu$yFuXCSXKEB>Hy@8>H>B)oL-z)a*;!i*RJTw2h0|V1# z?L+G&YaD;{ayZOLI`qD3^H*DTGVZl1Vn*ZGUf6R#w z-~W2IQAUFS>#SUZ?K?bq3+nP}Wb(8=Cb%#-9iRJd|H^;oZ~v>A^3HBou<73N?DLma z>)*fh=5I)ATuXe}*V-$e?AGXqUcd1A>!m}V=RW#$fP+U?bglliN8Q_nn_quDHCcKyMo=s=X#Fehp$?TKoV{86(az~JK{A@N3*=sVn z&Uqyp`y0AzZL-%*0t)IgT50|NKHYT(ry2Q?k=HxrA5-*_*}}n{bJ~E$@TEq0ruq6Z YXaU(AP-8CzPX@6(UHx3vIVCg!0G0dV^8f$< literal 0 HcmV?d00001 diff --git a/public/images/arenas/desert_bg.png b/public/images/arenas/desert_bg.png index 5c1518c1edb7726cee85114e376643e94f398f27..45c8162be9811f4ebdcb945bcab7dc9e4ebf80e3 100644 GIT binary patch literal 639 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7ald%8G=RK&f#yO8%#0E6qrIyJX)W)^LQkERtYO$xI^7IAj*9@ucy z_V|W_XT9rxOJ2YJ+?tW)?Z5pDmP{NeoC*_E8yu!FFh!zsdN2R_qA4>Wg^?*z&zWJ9 zj)Q_XL!%BO%ceO@%#mUcZPybTbhrgh6mc-6L}E7ukNJn6KD2XCILXAai3Mncs@;TC zpjCX1U=xMlwgKg&ZW~#%vP}ZIAp6ewYHk6KO%R6wrBKwNb555=I80;ZNZHB9eFCaQ zrilUM_NM|YV3G4cgMjXbXk7DgpR6r23&@_+ng(Fkpoa<6H~tU7j{F1+9*~>o0Wru> zNd;ssMzD%61Y7n=$poL-SYiTq7(!&O-I#V$elfGBn1X<*uRU*i(4lz;|33vL6~5F6 d&op0O1}z|)1BgN3Qt)ID<>~6@vd$@?2>@^Yw#xtj literal 618 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&ZV{?5Q*^?lzG1{GUZ1`UUX8Hd?9LgrTA z4`T31U|{7Cc)-lE>DOa zGbb`7Ffjv-IK&c{?a7!Swt!y%q9ldsH$!6%<1YqAupusL8~6oIj7krpU@`f_Sl^y^ V@+aF}MPM3Y@O1TaS?83{1OO3gsiyz{ diff --git a/public/images/arenas/lake_a.png b/public/images/arenas/lake_a.png new file mode 100644 index 0000000000000000000000000000000000000000..6ca45fb410135db82b3c3cd5d01f721ae52c646a GIT binary patch literal 1074 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7Y7@^o{4mYBffMT(aMqDYgB63EwQ9^k*{5`y_6k-z<51W?`TEx7qn~Ko$=wkTCsC zX|&$Kxz+decF&I7|Nl$&*Prrs*R_tf{rk9Dj{Ej0_QV9)i(cnH-h8Wn`?qEP`~Nrp zeEgh$_4)tT@ApUE+wnWJe0}D>$`326 z6rhav+xLF!k8U|(7F}|C?lh-Bu5gdvM-4TF7Jjq5X50An`eoZIUauoVt6~e^e0s8_ zT4dX0zdxn#k1LvAJW_J?Zq8G+wT78YyURYWh?J?hb5BnA3wap7?#=V=}o=qVl93kMW>~_{>Qq%4*M-D|GrmE&}_=}eK^{{^AElO^4afIsPLh|6$=v?E{?Ag|c+Hx^7+;OVzB03hlb73%=e}`zX}x~q z^B3$N?ri;Hy<9)8bo;gR{Eg;PJ2)O(Iq&qVa+iG3@t)Rd2_MFk;M}vbxBa(`KjB;E zZoaz*Xf;uwOa^`upNFJ8w&7WRM8+_sZ<|&_;m@e9OIN<9n-*O>rTKO`_uVO{J02A9 zivN_&RO0JCx@qo$`F~Aik8~{jFJ;Uw{a>x;{l8!T_sr-@cUHz0P*~^_+)yJua0z z<`fq7`@@dz79;g}?i@20_f}u_ZPj=AGpQqC_uL&i?{2s3ID2pvqfg6(%FJ2Ym0q3r n6lEJI2F!JQsS%!OzP=1vKsE<77hVdU3}Sh@`njxgN@xNAhmOqZ literal 0 HcmV?d00001 diff --git a/public/images/arenas/lake_b.png b/public/images/arenas/lake_b.png new file mode 100644 index 0000000000000000000000000000000000000000..c1c81f2b29c464b6ade5059a35eea6fc1aeadd0b GIT binary patch literal 1118 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7Z|^K@|xsfc@fH~zFpsLX+nS3?Y17U=EqmeW$HVGjIawCB~=(x<08 zj+j4ab>XEF<^SiINtIYbnudlnZxpx1Z>Ib&gO6-#-7k<0D{r~Z|>#yg(y7{M2 z+FR}<|GL<<>AUYfeqaA#-@B8Ii!?NgGz+48Z$|{F1S=dZoZoyf%~x=@e%}4H>94Ajm=tm9sRh%CMSQL6wJS8slH2mM%2Ssw)wjC|8^Zb{gq>~$M$ulnoqZUf7t(h_3_Q~<-<2>eyu)UvG$Rv z^^)`1`%SbR)UH1N@_i4(GwoFq)@QUGS-R6|lVMTePpyK}%MXS%_-NgYxvzT9<6~P= z2S=2I|zx_Z% zx2BU}(~4xL87=~cg#vw~*%Wi7T5P-$&rZMP^2RCp!=#|Y(>WAY7ihFB)Nb?aN}6HR z6U~*t75kzq_LAt{0H+^9j47ed{&@Zg@>~A-K&#!v)3RJ~9WQ=**37tg<-f>EU*k#H z#wK~bwMo;bNbQ{iOjCk~B`*J6>bz)1j7eX#p-PeG5xph5&As~K{1|SoF z;qA+Udt;>;muLjL6rMh^Zg%s*lOBaUniCRNPxL9|)+}&*@~e1(g7EamS1#KYyBqaK zubXn(pPU?aWBcvD%vYL2=UhyTNC6tamm1-j=IhI#1!QwT4ZIXQ8N~8*^>bP0l+XkK D!#mK) literal 0 HcmV?d00001 diff --git a/public/images/arenas/lake_b_1.png b/public/images/arenas/lake_b_1.png new file mode 100644 index 0000000000000000000000000000000000000000..be6db3451a8dae9ccf726d7c1de2bfd9f2f7b7ff GIT binary patch literal 721 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7YDdb&7( zp3m7E%m}oQdf?17;je;emtOo^`}fzDTQxuZ_8L1n8cZ(w5WA<$GB!WAX63eP_g9yz zX>g?ZwZ!x7Q~2{@vBr$5vxa7`rPFUe6lYPW6=4m|PyG4p-=RxWf4#c!-T(fjjgl>g z`X5_G$|q*IHn>hOb-i%()hoWk_txJ()UT|`*LCqKXWJd#XYce6<^O)Y?89RZD+iF6 z+l{&Mu~PH7?faZ32F!WE@?6~g>(wP3`)`+rt=`IB{(t4$eT6rFHy&Qfyu?DVK(J)v ztfC)(Z`@pGZz*zcy1B=#*XQ5G{nc$dF}Yu9?VgIeH_y8M*jx3dAm)1Qf9Yp|w^rEX z)YWudmPzHSQBhV{lQt&SU&SZ3diz3`B+S@>?;yB`!s-M{`-Rtz(&uAE@~%K%D{ fe5nzhX}-P;T0k}j)bvZilR+#`S3j3^P65jgR z3=A9lx&I`x0_Dm)T^vIy;@)02^kQ}tVS8{=GHK!+HD3Xj4uykSt^)iIIc-{6M8c95 zD>NodHd^vgA}V9!&I7ObHt%2wT5^N)#COy8XY;-%)ZJqN8csFvVE(HmTq$LS`?P|k zZS8G$_0N>FkZ}~PTYS3kP4`=~Ygcavaipc)xUlKjvg@|9Tizdamf-QfJpDd{PFKWz z^VdJ>&1}o{jSVw0PJaEfbC^C#ba{`$kAzuo*@su~-wuH@aj)7AIZS^ZtlLPQt)ID%hT1*Wt~$(698G>gE;^I literal 0 HcmV?d00001 diff --git a/public/images/arenas/lake_b_3.png b/public/images/arenas/lake_b_3.png new file mode 100644 index 0000000000000000000000000000000000000000..f0cf92f5389d71f69e217046fdb1ac54eb02e850 GIT binary patch literal 685 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7aNdb&7{sxZ)ex#BJ$s5-SX0u%tBwLnN!f`_DnFk+yZmrciP_9rxrns1{L3uwQuEST zfR<4g#5g^+Vv?O@v#&g6dA)D^{?B{Y|50AxEV)m*Ja1~L#jmfsd+e9pKP90!hyTfi zM;Z+mW_H~Adh)E%{-U>8l9y{(Za@EKU!(c?@7?dsFPj*g)aCY8l>T}7`P|Id`>ujK zKO?K(KX_eYAQ-bkx!|O(p6>OV_JTXi@-*LV|9HAIM!P(}Kg{gf`90QeCNemsD`ix+ z^2DCFvGv(?&9W(_w{#g>`u-PP4M^>!5rq9=UczsoM*|})_0_O z_nn<@_ukb?&S)0cl%Y`x4C_VWr4lmfgT0pEPmP9{Bdvoy_yp2*O;hqgrBm=Y51RJ sV#O%Lw$EsT%8P8ES$wGxo@u_m3|c@o2h{9K!IMEOPgg&ebxsLQ06e7XxBvhE literal 0 HcmV?d00001 diff --git a/public/images/arenas/lake_bg.png b/public/images/arenas/lake_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..c546468a994d9873abfe2f07e27d895ab6ba403c GIT binary patch literal 643 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&5jgR z3=A9lx&I`xGB7X+d%8G=RK&f#yHSuakiqrh-%}Gid&E?XR!Z*dWtsijL6qx4E87t% z#fwL6)h`~LYyP`@f8n0}`-B}Xy!y{QLAk+U8Us@#6GsZC!UR<`&NU0$dv>kNlXM&u zPN#A>Ok;(s3QkZs&BU^aMc~9IDV_sC zbErf@>|J++eG|wkMGmluC~itNzCVYF*;7nmg6XyAt6AZCP!wU|JhjpRyELYqH3e!7 z)TKonOkk08pyhCnUAv*nex9LG1?ZC^E*_W;Y~}`AfX%JpVn;Tml8pnIiyo#=T{FPC z_HgjxF&jM^a7PeA#&p}~d-97x0VH7RYk%pmZ9Yr>^Q*w*!j~H1nda-upao=e05J$$ R3Z4w2JYD@<);T3K0RXMCx)%Td literal 0 HcmV?d00001 diff --git a/public/images/arenas/sea_a.png b/public/images/arenas/sea_a.png index 2bc643e2568f8565ffe8cdbbb0b35c52c7cf5de8..b027f7c7190061c2bb1b16c37bdded776c4f1ed1 100644 GIT binary patch delta 772 zcmV+f1N;1j1fU0yBYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1poj8FiAu~RCr$P z+RbXzP#6Z_OciQtD+o$A?uvEc!kuo!jkpm+@M;9tf>$Gm;6icZP8Whpt2a}4WF`Xu00000000000Fi5me-!8yEi+*G{^O%! zv)1mbXFfBS5R++0Z9*yx6I7|stGDju`-6OW|0Zt*A&k!?YH65|3T=XF*gnhJ2H{Br zHgttS-$I1QC?OS6P#qoY=55)=orlHN=%W9AefJiZ^LCPf4P9ffHy9`UlHUGd_W8rh zVsA3RS5$QUyYu`>uY522eL18M4Z@IF z*7?DiCTmj_SGQChR7pkftzNvGZU6XI9LZ{fFe>^!8W?PI|c-?=i~Kw2h{|+XQxmUr6Wd zZEfXkICFM!GNs5A#WTDJ zzgVWVkt&`Le-%=QiC&%T{m$!>xTb3Og*d*nww70a<4Vt0VODhJ8#zKREnVYT)v(oH zQm*dGOUgm#&AV!#r)#S_K8mO!zkYn3Z^!4O8e|sC{U9s{Us4Ugn8?-18^@~8!^+Ab z(B`~(mV&PCTAE&Oqa1*VAY|I+cJNgzzOwb}xAP@zdcW|BNt`BhQVzR8>dqS{7`hi_@%4rN$LW=%~1DgXcg2mk;800000(o>TF0000n!?~R|w^YTuF%&`saHa6IZ4td+?B-Is91RTD@hm?MRXDZzp+Kf8hNclh w1aMQ~oAMF!eQqIyaB45-36IWC2-y~zFPDD24E;MtH~;_u07*qoM6N<$f=+m&_W%F@ diff --git a/public/images/arenas/sea_b.png b/public/images/arenas/sea_b.png index 161ea4e287dda201affbab8915c591233e2c281e..56e0443c05308aaa113a948dd43e45dd354ed21b 100644 GIT binary patch delta 1346 zcmV-I1-<&y2fGW9BYyw^b5ch_0Itp)=>Px#1ZP1_K>z@;j|==^1pojAOG!jQRCr$P z-NB38R2;zZY%6T7ts*F1ys7mlc+i^{(Ssm@e~sW-@UIa>@Su3{q&)~dwzfAfqEfZB zwqm#P8|UfUFqwHtCfOwO`CK+LlQ*5skZ)g-+1&~N000000Fie&k$?t&GDqvLK!c0# zeDG+!xY51OKW^NQwv8QP9PQYUEZRQe_0sEat!_8@{@X8CU-RcG8N1JMbYlauIC=Ei z#;eWP+|m7$>iX5s*0-wa<=5V=9$h%MzSS%rcXWKQy7J1KMdL!e_FWOozn@JGJ)#20 zqQnm0CR|Cx$nu}aPGq8^-@*c{p7==l9^;U z^x32UGHGpQFkRypVkY+R?+2^pHWA9DkaZc~XKa1;*>)xwN@kNwB!Em($qXiT{F~RW zRwwuGtZv5)?!{N%?i{cX&)H@67y671ea7dr$k1gQ9AX3okjd$PI+IHgIRDsjr;t4J z{0r5c+dowg{`h@;&wTWmK_(HvbSNE%(W`}p6F?@V&tYunI*W?1S^++*9-52f>Si(zSD6hJ1WZveYWfk@^Mz|v^9iF?c>Z+`d1YWd0=@2$S(Ze9Ck z^>ryB6hI~+!k4ap!fx8}hI0JGlhx&?pFI`7+>}FD8tpc5FFllAN(cpzGm|cKr0^wu zFJzR8_~lXahSas*-bjC9{yy^IE0r&Bd;ND3=Cq*YhN?UVRq1Y0QnU zKV4lknOg`2kkRb(0!Qh2tZ*&HYNDYnlarZ+bkvH>IaD!uhA3oBW5Q1(3nj zFM>n_^AADq+PPx=Fjfd70Ed2voQwCTP58nbW`98d8O5duCZ#*qw%Ox8MEFWR^g9(} zgnG&G3j)Y!N&Cn5?gVInpol?l{+LmntIH&jp0c2ETMR3>7zvPIf@4aL@$F@xJ zZPMm{Ig+`>F9;xKqHhSBeq~naj+=J;DTQ!bv`b!RmuThk7%n}0i2!n@x`r@zy1p}( z&?kg_gO!xL_Fbiqx`Z%AA@tq(>p^XjN3Tz?LYHW7dfu_)w}kK| z0?4Gq=LX{^2*%u@lWh^~606V@!oJZ;uXU_{_{F~$e;>r(1c8x^9mA#o?jth!bEjV& z)mMt^P}^sz(aQ-SvygtUKK~oQL#Rh^pEInXgVjfRZT>7K%*0SpOfd*kj8$KU8oNyd zkVP45rZ^X3x1Ei_!ANloDUe~Vk<4eRDR4pL%GpqmiI3x~7f%^Gl6l;6OZoT-0001y zbTKlgRn`3O6 zOppSI*j-kitba@S++)o7WEor~Q4~PLu7B*>xSd9=)bpGY^GOWbSPqHgTB9g{OxAPV z97@yliru-$&3`p;V+L|a95*>dPHEBC6a|pkM(;FsYYpAdF!qV!Qe!B9Ov2CCa<~?~ zx^6xkyQf_hFZ&X&d$D{kir0d;$tiZ5yoh!PAd?PX8@(~6yQf_h5fLx@V?~!9!Ob=e zKE_<7t1(bp3GXB)r5B3Luk+U*CyuZOhpyO~RK#IJXE2 zAhU|!+Lp6p$8W4jcqtJSKxP-eA#dW3d?2uP@146PL{I>^tLM5o{9Bh%mc2tKpKBio zF#OzIihtlgRi6BPgMWLOxu=h8BQ?g*nff zu^Rhn8Ji)%Cxvj#?XYf%$}Q2jWm@_yV@<-g!-5Hgup7gOaf4&W7#pI(B&=~u{6{aP zZC!~kfGjMA??rLSVZ8TJ+Ls~;APeDZF)s&hXym%Fi}1CWu&OA&7s=mo^u_1`2y2ew zoQa(PLPQ*|DgK`9I$Jf(HIm&YYq}c`Ecu$90Kx+%$WxEr+wR;>DkeCQp)(kOCHoJN We~_P^4pp!K00005jgR z3=A9lx&I`xGB7aldAc};RK&f#yHN0u1B2^9Yp;VYfqZ=8oy+-o)a3jPMGo-PvN((9 zU%zm0w*Ag0Gp1iJmuGNn|F7@R$G{ZH#F4_OFhRA!VH!H;^RIigT?>tfnjQ$W4|YTbP0l+XkK^3u6j literal 625 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N& zWAa>I5;``Px#Hf!TKT1>VfjwE!uaDp4Zs_$c(*yyXJIhY@J4p*DU;`6&5ftb2v0GNh?e+J@<00HWJsT z0isk%wBoi5V+Y#;UV(r{MivE!B}}&&8gm$KF))fs0F8Fh+Q2JtVpMt%1&c`ygI!?k V$5#jVPXdz?gQu&X%Q~loCIEeutu6on diff --git a/src/arena.ts b/src/arena.ts index b791d82b6..0ad43bf0b 100644 --- a/src/arena.ts +++ b/src/arena.ts @@ -97,26 +97,6 @@ export class Arena { return ret; } - getBiomeKey(): string { - switch (this.biomeType) { - case Biome.LAKE: - return 'sea'; - case Biome.ABYSS: - return 'wasteland'; - case Biome.MEADOW: - return 'grass'; - case Biome.VOLCANO: - return 'cave'; - case Biome.POWER_PLANT: - return 'ruins'; - case Biome.FACTORY: - return 'wasteland'; - case Biome.END: - return 'wasteland'; - } - return Biome[this.biomeType].toLowerCase(); - } - getFormIndex(species: PokemonSpecies) { if (!species.canChangeForm && species.forms?.length) return Utils.randInt(species.forms.length); // TODO: Base on biome @@ -326,4 +306,80 @@ export class Arena { return 21.347; } } +} + +export function getBiomeKey(biome: Biome): string { + switch (biome) { + case Biome.ABYSS: + return 'wasteland'; + case Biome.MEADOW: + return 'grass'; + case Biome.VOLCANO: + return 'cave'; + case Biome.POWER_PLANT: + return 'ruins'; + case Biome.FACTORY: + return 'wasteland'; + case Biome.END: + return 'wasteland'; + } + return Biome[biome].toLowerCase(); +} + +export function getBiomeHasProps(biomeType: Biome): boolean { + switch (biomeType) { + case Biome.LAKE: + case Biome.DESERT: + return true; + } + + return false; +} + +export class ArenaBase extends Phaser.GameObjects.Container { + public player: boolean; + public biome: Biome; + public propValue: integer; + public base: Phaser.GameObjects.Sprite; + public props: Phaser.GameObjects.Sprite[]; + + constructor(scene: BattleScene, player: boolean) { + super(scene, 0, 0); + + this.player = player; + this.biome = Biome.PLAINS; + + this.base = scene.add.sprite(0, 0, `plains_a`); + this.base.setOrigin(0, 0); + + this.props = !player ? + new Array(3).fill(null).map(() => { + const ret = scene.add.sprite(0, 0, `plains_b`); + ret.setOrigin(0, 0); + ret.setVisible(false); + return ret; + }) : []; + } + + setBiome(biome: Biome, propValue?: integer): void { + if (this.biome === biome) + return; + + const hasProps = getBiomeHasProps(biome); + const biomeKey = getBiomeKey(biome); + + this.base.setTexture(`${biomeKey}_${this.player ? 'a' : 'b'}`); + this.add(this.base); + + if (!this.player) { + this.propValue = propValue === undefined + ? hasProps ? Utils.randInt(8) : 0 + : propValue; + for (let p = 0; p < 3; p++) { + this.props[p].setTexture(`${biomeKey}_b${hasProps ? `_${p + 1}` : ''}`); + this.props[p].setVisible(hasProps && !!(this.propValue & (1 << p))); + this.add(this.props[p]); + } + } + } } \ No newline at end of file diff --git a/src/battle-phases.ts b/src/battle-phases.ts index dd7406cd6..65edb62ee 100644 --- a/src/battle-phases.ts +++ b/src/battle-phases.ts @@ -1,4 +1,4 @@ -import BattleScene, { startingLevel, startingWave } from "./battle-scene"; +import BattleScene, { maxExpLevel, startingLevel, startingWave } from "./battle-scene"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult } from "./pokemon"; import * as Utils from './utils'; import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveCategory, MoveEffectAttr, MoveFlags, MoveHitEffectAttr, Moves, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, OneHitKOAttr } from "./data/move"; @@ -27,6 +27,7 @@ import { TempBattleStat } from "./data/temp-battle-stat"; import { ArenaTagType, ArenaTrapTag, TrickRoomTag } from "./data/arena-tag"; import { CheckTrappedAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, SuppressWeatherEffectAbAttr, applyCheckTrappedAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreWeatherEffectAbAttrs } from "./data/ability"; import { Unlockables, getUnlockableName } from "./system/unlockables"; +import { getBiomeKey } from "./arena"; export class CheckLoadPhase extends BattlePhase { private loaded: boolean; @@ -157,7 +158,7 @@ export class EncounterPhase extends BattlePhase { } doEncounter() { - if (startingWave > 10 && startingLevel < 100) { + if (startingWave > 10) { for (let m = 0; m < Math.floor(startingWave / 10); m++) this.scene.addModifier(getPlayerModifierTypeOptionsForWave((m + 1) * 10, 1, this.scene.getParty())[0].type.newModifier()); } @@ -303,14 +304,12 @@ export class SwitchBiomePhase extends BattlePhase { this.scene.newArena(this.nextBiome); - const biomeKey = this.scene.arena.getBiomeKey(); + const biomeKey = getBiomeKey(this.nextBiome); const bgTexture = `${biomeKey}_bg`; - const playerTexture = `${biomeKey}_a`; - const enemyTexture = `${biomeKey}_b`; this.scene.arenaBgTransition.setTexture(bgTexture) this.scene.arenaBgTransition.setAlpha(0); this.scene.arenaBgTransition.setVisible(true); - this.scene.arenaPlayerTransition.setTexture(playerTexture) + this.scene.arenaPlayerTransition.setBiome(this.nextBiome); this.scene.arenaPlayerTransition.setAlpha(0); this.scene.arenaPlayerTransition.setVisible(true); @@ -324,11 +323,11 @@ export class SwitchBiomePhase extends BattlePhase { alpha: (target: any) => target === this.scene.arenaPlayer ? 0 : 1, onComplete: () => { this.scene.arenaBg.setTexture(bgTexture); - this.scene.arenaPlayer.setTexture(playerTexture); + this.scene.arenaPlayer.setBiome(this.nextBiome); this.scene.arenaPlayer.setAlpha(1); - this.scene.arenaEnemy.setTexture(enemyTexture); + this.scene.arenaEnemy.setBiome(this.nextBiome); this.scene.arenaEnemy.setAlpha(1); - this.scene.arenaNextEnemy.setTexture(enemyTexture); + this.scene.arenaNextEnemy.setBiome(this.nextBiome); this.scene.arenaBgTransition.setVisible(false); this.scene.arenaPlayerTransition.setVisible(false); @@ -1550,7 +1549,7 @@ export class VictoryPhase extends PokemonPhase { const expBalanceModifier = this.scene.findModifier(m => m instanceof ExpBalanceModifier) as ExpBalanceModifier; const multipleParticipantExpBonusModifier = this.scene.findModifier(m => m instanceof MultipleParticipantExpBonusModifier) as MultipleParticipantExpBonusModifier; const expValue = this.scene.getEnemyPokemon().getExpValue(); - const expPartyMembers = party.filter(p => p.hp && p.level < 100); + const expPartyMembers = party.filter(p => p.hp && p.level < maxExpLevel); const partyMemberExp = []; for (let partyMember of expPartyMembers) { const pId = partyMember.id; @@ -1753,10 +1752,10 @@ export class LevelUpPhase extends PartyMemberPokemonPhase { const levelMoves = this.getPokemon().getLevelMoves(this.lastLevel + 1); for (let lm of levelMoves) this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, lm)); - const evolution = pokemon.getEvolution(); - if (evolution) - this.scene.unshiftPhase(new EvolutionPhase(this.scene, this.partyMemberIndex, evolution, this.lastLevel)); } + const evolution = pokemon.getEvolution(); + if (evolution) + this.scene.unshiftPhase(new EvolutionPhase(this.scene, this.partyMemberIndex, evolution, this.lastLevel)); } } diff --git a/src/battle-scene.ts b/src/battle-scene.ts index d093c2638..8a8557a47 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -13,7 +13,7 @@ import { Battle } from './battle'; import { initCommonAnims, initMoveAnim, loadCommonAnimAssets, loadMoveAnimAssets, populateAnims } from './data/battle-anims'; import { BattlePhase } from './battle-phase'; import { initGameSpeed } from './system/game-speed'; -import { Arena } from './arena'; +import { Arena, ArenaBase, getBiomeHasProps, getBiomeKey } from './arena'; import { GameData } from './system/game-data'; import StarterSelectUiHandler from './ui/starter-select-ui-handler'; import { TextStyle, addTextObject } from './ui/text'; @@ -28,6 +28,8 @@ export const startingLevel = 5; export const startingWave = 1; export const startingBiome = Biome.TOWN; +export const maxExpLevel = 10000; + export enum Button { UP, DOWN, @@ -64,13 +66,12 @@ export default class BattleScene extends Phaser.Scene { public field: Phaser.GameObjects.Container; public fieldUI: Phaser.GameObjects.Container; public abilityBar: AbilityBar; - public arenaBg: Phaser.GameObjects.Image; - public arenaBgTransition: Phaser.GameObjects.Image; - public arenaPlayer: Phaser.GameObjects.Image; - public arenaPlayerTransition: Phaser.GameObjects.Image; - public arenaEnemy: Phaser.GameObjects.Image; - public arenaEnemyTransition: Phaser.GameObjects.Image; - public arenaNextEnemy: Phaser.GameObjects.Image; + public arenaBg: Phaser.GameObjects.Sprite; + public arenaBgTransition: Phaser.GameObjects.Sprite; + public arenaPlayer: ArenaBase; + public arenaPlayerTransition: ArenaBase; + public arenaEnemy: ArenaBase; + public arenaNextEnemy: ArenaBase; public arena: Arena; public trainer: Phaser.GameObjects.Sprite; public currentBattle: Battle; @@ -209,11 +210,15 @@ export default class BattleScene extends Phaser.Scene { this.loadImage('starter_select_gen_cursor_highlight', 'ui'); // Load arena images - Utils.getEnumValues(Biome).map(at => { - const atKey = Biome[at].toLowerCase(); - this.loadImage(`${atKey}_bg`, 'arenas', `${atKey}_bg.png`); - this.loadImage(`${atKey}_a`, 'arenas', `${atKey}_a.png`); - this.loadImage(`${atKey}_b`, 'arenas', `${atKey}_b.png`); + Utils.getEnumValues(Biome).map(bt => { + const btKey = Biome[bt].toLowerCase(); + this.loadImage(`${btKey}_bg`, 'arenas'); + this.loadImage(`${btKey}_a`, 'arenas'); + this.loadImage(`${btKey}_b`, 'arenas'); + if (getBiomeHasProps(bt)) { + for (let p = 1; p <= 3; p++) + this.loadImage(`${btKey}_b_${p}`, 'arenas') + } }); // Load trainer images @@ -338,16 +343,17 @@ export default class BattleScene extends Phaser.Scene { this.arenaBg = this.add.sprite(0, 0, 'plains_bg'); this.arenaBgTransition = this.add.sprite(0, 0, `plains_bg`); - this.arenaPlayer = this.add.sprite(0, 0, `plains_a`); - this.arenaPlayerTransition = this.add.sprite(0, 0, `plains_a`); - this.arenaEnemy = this.add.sprite(0, 0, `plains_b`); - this.arenaNextEnemy = this.add.sprite(0, 0, `plains_b`); + this.arenaPlayer = new ArenaBase(this, true); + this.arenaPlayerTransition = new ArenaBase(this, true); + this.arenaEnemy = new ArenaBase(this, false); + this.arenaNextEnemy = new ArenaBase(this, false); this.arenaBgTransition.setVisible(false); this.arenaPlayerTransition.setVisible(false); - [this.arenaBg, this.arenaBgTransition, this.arenaPlayer, this.arenaPlayerTransition, this.arenaEnemy, this.arenaNextEnemy].forEach(a => { - a.setOrigin(0, 0); + [ this.arenaBg, this.arenaBgTransition, this.arenaPlayer, this.arenaPlayerTransition, this.arenaEnemy, this.arenaNextEnemy ].forEach(a => { + if (a instanceof Phaser.GameObjects.Sprite) + a.setOrigin(0, 0); field.add(a); }); @@ -481,8 +487,7 @@ export default class BattleScene extends Phaser.Scene { this.arenaBgTransition.setPosition(0, 0); this.arenaPlayer.setPosition(300, 0); this.arenaPlayerTransition.setPosition(0, 0); - this.arenaEnemy.setPosition(-280, 0); - this.arenaNextEnemy.setPosition(-280, 0); + [ this.arenaEnemy, this.arenaNextEnemy ].forEach(a => a.setPosition(-280, 0)); this.trainer.setTexture('trainer_m'); this.trainer.setPosition(406, 132); @@ -518,14 +523,14 @@ export default class BattleScene extends Phaser.Scene { this.arena = new Arena(this, biome, Biome[biome].toLowerCase()); if (init) { - const biomeKey = this.arena.getBiomeKey(); + const biomeKey = getBiomeKey(biome); this.arenaBg.setTexture(`${biomeKey}_bg`); this.arenaBgTransition.setTexture(`${biomeKey}_bg`); - this.arenaPlayer.setTexture(`${biomeKey}_a`); - this.arenaPlayerTransition.setTexture(`${biomeKey}_a`); - this.arenaEnemy.setTexture(`${biomeKey}_b`); - this.arenaNextEnemy.setTexture(`${biomeKey}_b`); + this.arenaPlayer.setBiome(biome); + this.arenaPlayerTransition.setBiome(biome); + this.arenaEnemy.setBiome(biome); + this.arenaNextEnemy.setBiome(biome); } return this.arena; diff --git a/src/data/exp.ts b/src/data/exp.ts index ae11a2a0a..9c8dccf04 100644 --- a/src/data/exp.ts +++ b/src/data/exp.ts @@ -16,10 +16,26 @@ const expLevels = [ [ 0, 4, 13, 32, 65, 112, 178, 276, 393, 540, 745, 967, 1230, 1591, 1957, 2457, 3046, 3732, 4526, 5440, 6482, 7666, 9003, 10506, 12187, 14060, 16140, 18439, 20974, 23760, 26811, 30146, 33780, 37731, 42017, 46656, 50653, 55969, 60505, 66560, 71677, 78533, 84277, 91998, 98415, 107069, 114205, 123863, 131766, 142500, 151222, 163105, 172697, 185807, 196322, 210739, 222231, 238036, 250562, 267840, 281456, 300293, 315059, 335544, 351520, 373744, 390991, 415050, 433631, 459620, 479600, 507617, 529063, 559209, 582187, 614566, 639146, 673863, 700115, 737280, 765275, 804997, 834809, 877201, 908905, 954084, 987754, 1035837, 1071552, 1122660, 1160499, 1214753, 1254796, 1312322, 1354652, 1415577, 1460276, 1524731, 1571884, 1640000 ] ]; -export function getLevelTotalExp(level: integer, growthRate: integer) { - return expLevels[growthRate][level - 1]; +export function getLevelTotalExp(level: integer, growthRate: GrowthRate): number { + if (level < 100) + return expLevels[growthRate][level - 1]; + + switch (growthRate) { + case GrowthRate.ERRATIC: + return (Math.pow(level, 4) + (Math.pow(level, 3) * 2000)) / 3500; + case GrowthRate.FAST: + return Math.pow(level, 3) * 4 / 5; + case GrowthRate.MEDIUM_FAST: + return Math.pow(level, 3); + case GrowthRate.MEDIUM_SLOW: + return (Math.pow(level, 3) * 6 / 5) - (15 * Math.pow(level, 2)) + (100 * level) - 140; + case GrowthRate.SLOW: + return Math.pow(level, 3) * 5 / 4; + case GrowthRate.FLUCTUATING: + return (Math.pow(level, 3) + ((level / 2) + 32)) * 4 / (100 + level); + } }; -export function getLevelRelExp(level: integer, growthRate: integer) { +export function getLevelRelExp(level: integer, growthRate: GrowthRate): number { return getLevelTotalExp(level, growthRate) - getLevelTotalExp(level - 1, growthRate); }; \ No newline at end of file diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 8386f60d1..75db27cbd 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -11,6 +11,7 @@ import * as Utils from '../utils'; import { TempBattleStat, getTempBattleStatBoosterItemName, getTempBattleStatName } from '../data/temp-battle-stat'; import { BerryType, getBerryEffectDescription, getBerryName } from '../data/berry'; import { Unlockables } from '../system/unlockables'; +import { maxExpLevel } from '../battle-scene'; type Modifier = Modifiers.Modifier; @@ -696,7 +697,7 @@ const modifierPool = { return !party[0].scene.findModifier(m => m instanceof Modifiers.MapModifier) ? 1 : 0; }), new WeightedModifierType(modifierTypes.TM_GREAT, 2), - new WeightedModifierType(modifierTypes.EXP_SHARE, (party: Pokemon[]) => party.filter(p => p.level < 100).length ? 1 : 0), + new WeightedModifierType(modifierTypes.EXP_SHARE, (party: Pokemon[]) => party.filter(p => p.level < maxExpLevel).length ? 1 : 0), new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3) ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), [ModifierTier.ULTRA]: [ @@ -713,10 +714,10 @@ const modifierPool = { new WeightedModifierType(modifierTypes.LEFTOVERS, 2), new WeightedModifierType(modifierTypes.SHELL_BELL, 2), new WeightedModifierType(modifierTypes.BERRY_POUCH, 3), - new WeightedModifierType(modifierTypes.EXP_CHARM, (party: Pokemon[]) => party.filter(p => p.level < 100).length ? 4 : 0), - new WeightedModifierType(modifierTypes.OVAL_CHARM, (party: Pokemon[]) => party.filter(p => p.level < 100).length ? 2 : 0), + new WeightedModifierType(modifierTypes.EXP_CHARM, (party: Pokemon[]) => party.filter(p => p.level < maxExpLevel).length ? 4 : 0), + new WeightedModifierType(modifierTypes.OVAL_CHARM, (party: Pokemon[]) => party.filter(p => p.level < maxExpLevel).length ? 2 : 0), new WeightedModifierType(modifierTypes.EXP_BALANCE, - (party: Pokemon[]) => party.filter(p => p.level < 100).length && !party[0].scene.findModifier(m => m instanceof Modifiers.ExpBalanceModifier) ? 1 : 0) + (party: Pokemon[]) => party.filter(p => p.level < maxExpLevel).length && !party[0].scene.findModifier(m => m instanceof Modifiers.ExpBalanceModifier) ? 1 : 0) ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.MASTER]: [ new WeightedModifierType(modifierTypes.MASTER_BALL, 3), @@ -724,7 +725,7 @@ const modifierPool = { 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, (party: Pokemon[]) => party.filter(p => p.level < 100).length ? 1 : 0), + new WeightedModifierType(modifierTypes.GOLDEN_EXP_CHARM, (party: Pokemon[]) => party.filter(p => p.level < maxExpLevel).length ? 1 : 0), new WeightedModifierType(modifierTypes.GOLDEN_POKEBALL, 1), new WeightedModifierType(modifierTypes.RARER_CANDY, 1) ].map(m => { m.setTier(ModifierTier.LUXURY); return m; }), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index bc5b1b6a0..80bc4b4c6 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -1,6 +1,6 @@ import * as ModifierTypes from './modifier-type'; import { LearnMovePhase, LevelUpPhase, PokemonHealPhase } from "../battle-phases"; -import BattleScene from "../battle-scene"; +import BattleScene, { maxExpLevel } from "../battle-scene"; import { getLevelTotalExp } from "../data/exp"; import { PokeballType } from "../data/pokeball"; import Pokemon, { PlayerPokemon } from "../pokemon"; @@ -735,7 +735,7 @@ export class PokemonLevelIncrementModifier extends ConsumablePokemonModifier { pokemon.scene.applyModifiers(LevelIncrementBoosterModifier, true, levelCount); pokemon.level += levelCount.value; - if (pokemon.level <= 100) { + if (pokemon.level <= maxExpLevel) { pokemon.exp = getLevelTotalExp(pokemon.level, pokemon.species.growthRate); pokemon.levelExp = 0; } diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 556db7b88..0e2b1bcfa 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -4,7 +4,7 @@ import * as Utils from '../utils'; import { addTextObject, TextStyle } from './text'; import { getGenderSymbol, getGenderColor } from '../data/gender'; import { StatusEffect } from '../data/status-effect'; -import BattleScene from '../battle-scene'; +import BattleScene, { maxExpLevel } from '../battle-scene'; export default class BattleInfo extends Phaser.GameObjects.Container { private player: boolean; @@ -217,7 +217,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const relLevelExp = getLevelRelExp(this.lastLevel + 1, battler.species.growthRate); const levelExp = levelUp ? relLevelExp : battler.levelExp; let ratio = relLevelExp ? levelExp / relLevelExp : 0; - if (this.lastLevel >= 100) { + if (this.lastLevel >= maxExpLevel) { if (levelUp) ratio = 1; instant = true; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 369539b12..533b05c36 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -1,4 +1,4 @@ -import BattleScene, { Button } from "../battle-scene"; +import BattleScene, { Button, maxExpLevel } from "../battle-scene"; import { Mode } from "./ui"; import UiHandler from "./uiHandler"; import * as Utils from "../utils"; @@ -482,7 +482,7 @@ export default class SummaryUiHandler extends UiHandler { }); const totalLvExp = getLevelTotalExp(this.pokemon.level, this.pokemon.species.growthRate); - const expRatio = this.pokemon.level < 100 ? this.pokemon.levelExp / totalLvExp : 0; + const expRatio = this.pokemon.level < maxExpLevel ? this.pokemon.levelExp / totalLvExp : 0; const expLabel = addTextObject(this.scene, 6, 112, 'EXP. POINTS', TextStyle.SUMMARY); expLabel.setOrigin(0, 0); @@ -496,7 +496,7 @@ export default class SummaryUiHandler extends UiHandler { expText.setOrigin(1, 0); statsContainer.add(expText); - const nextLvExp = this.pokemon.level < 100 + const nextLvExp = this.pokemon.level < maxExpLevel ? getLevelTotalExp(this.pokemon.level + 1, this.pokemon.species.growthRate) - this.pokemon.levelExp : 0; const nextLvExpText = addTextObject(this.scene, 208, 128, nextLvExp.toString(), TextStyle.WINDOW);