From a214110030e62c1e8143ec8d5a713720c022ffcf Mon Sep 17 00:00:00 2001 From: damocleas Date: Sat, 7 Sep 2024 23:17:02 -0400 Subject: [PATCH 01/37] Voucher Event (#4094) * Update modifier-type.ts * Great tier vouch * Update trainer-victory-phase.ts * Update trainer-victory-phase.ts * Update timed-event-manager.ts and loading-scene.ts (#1) * Update timed-event-manager.ts and loading-scene.ts * egg-update-zh-cn update * Update language codes in loading-scene.ts and timed-event-manager.ts * updated image --------- Co-authored-by: Frederico Santos --- public/images/events/egg-update_de.png | Bin 0 -> 12951 bytes public/images/events/egg-update_en.png | Bin 0 -> 12926 bytes public/images/events/egg-update_es.png | Bin 0 -> 202251 bytes public/images/events/egg-update_fr.png | Bin 0 -> 13387 bytes public/images/events/egg-update_it.png | Bin 0 -> 12844 bytes public/images/events/egg-update_ja.png | Bin 0 -> 13612 bytes public/images/events/egg-update_ko.png | Bin 0 -> 12565 bytes public/images/events/egg-update_pt-BR.png | Bin 0 -> 13518 bytes public/images/events/egg-update_zh-CN.png | Bin 0 -> 51829 bytes src/loading-scene.ts | 22 +++++++++++----------- src/modifier/modifier-type.ts | 7 ++++--- src/phases/trainer-victory-phase.ts | 2 +- src/timed-event-manager.ts | 16 ++++++++-------- 13 files changed, 24 insertions(+), 23 deletions(-) create mode 100644 public/images/events/egg-update_de.png create mode 100644 public/images/events/egg-update_en.png create mode 100644 public/images/events/egg-update_es.png create mode 100644 public/images/events/egg-update_fr.png create mode 100644 public/images/events/egg-update_it.png create mode 100644 public/images/events/egg-update_ja.png create mode 100644 public/images/events/egg-update_ko.png create mode 100644 public/images/events/egg-update_pt-BR.png create mode 100644 public/images/events/egg-update_zh-CN.png diff --git a/public/images/events/egg-update_de.png b/public/images/events/egg-update_de.png new file mode 100644 index 0000000000000000000000000000000000000000..5de94877d5ca33464f8b06e46d195668bd6b9d5f GIT binary patch literal 12951 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 literal 0 HcmV?d00001 diff --git a/public/images/events/egg-update_es.png b/public/images/events/egg-update_es.png new file mode 100644 index 0000000000000000000000000000000000000000..ec5f5c46d178e24ad4c18fd6211f2a62bc7b905f GIT binary patch literal 202251 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%0AMb6O@Ayt6>35?%Qjt<+ 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

tL^cYM2l`)rl(QkR8s8JsUBN9 zc)_T~%sjohhg}*F?!XG5jfk+((-4c4Mj6-1#!oRm)q6JE?~UX3pT(WcA2hJKN8Xf@ z0>?_zBRMiIZ+W2T>?2^%o$4%h>0U?4QaRp?_>H{DDXH##kL-iTtkSgS)Q>-sH=YpU zZdT5weP^J=kTFRFPnAiN3|fI?v?flr(_~srhP`4f>E_hC7qu_=?HsB)XlajNyf*l5 zSQsz{wd5L{+HhFMZq=#i6+5nM{__RYSm+g-!1MNU-@Qt3SK6mk&~}Q#+Honk;StmG zlY=Qer4npDI&6`!%+g#aHS=QI56_BPsEhQT50NmR?pVgO8L;FgNBgnzGYWO`Lp?xR z*pe3mfPV13M3+zwYx!NUe&%3gp6;+$Y+?j_=~#Wd`h13RPz|_m!LG?aZ&)-O_cr0c z+5j|}H#;Plb_=^}zTt6t6=%b_EP=uM!D}=aIUovdD!$wjxXLrtI+&;FcGNi4;@@bp zByWZ%k2m-DaO(nNv@Mbt>`<;u(IHmyt`h1`kQ}IV&!}Y`!gdJs&z4kd&Uk%wphtq9 z3h3K-?z3j(!!M=zjUn)Pd-=VTV4ADJAiz#ynS7eu=KM^A&%<1+;IS?=JP?V|Q1Epp zWZ7olch%z})hVv55Aw&imzqc$_e#bRGkybHU;U=H(5DyD6_Lp-HKlv^ucztDK#74SyG&*N z2AvqVH?;{AZH-54F{eQJbonMr zZnqWeY~a&%-SlQJFW1+8Lhnyk$~fUd8nHmiM( zQy4g-3vW8(9;j?!u~Rii9AOboW#q6GMk@DA7f%3|Br03F6cB%7_}+lr95rr<2lmQS z(70cJ+CXVBPhd2eRDsS*<0~d%8b2L~s|hAim6wKRnjhl^)Cr7N7h8wz{_o3L@k5UJ^FRTneEqR#}GXsW9n0}(j8?d95uWcv_u4w zAvMkd_-vW1Lb}jRCz^zL>Kp^J+F_N4+QzNTu)-p%j8bJNm|G4HvTa!z&-+O`^qh!! zr8kj2b)&!9;Qs#Eq!^EHSD98d`vy-W+<3b~;X>XQfn_B=3V%Yz1UfLTb$N8A76p}H zhfo51@+>#O9?(GB)r3Ko6ivN27BvBEpVx}NK2`S%rdL}({ahVLJK)@yh{TIht8#ww zwH@N*862iRdl+b>zvsE~&;@{_ZM8lkFIj>=l=E}njN>t(WrNNY!GEi2ZRK6IT%tNs zlz?BB#07*17cxdD9=dZ6!VI+gGV$Jyc;Ij0bd{PAQz|r+dDPZdndK(dIQHNsrB5(Y zVfF#f{&D#@r!p~&Ud^t)0M-=M>&$&nw-u0jRTmgXFQ0&?sc@Wjwg(3$2^DqDe>$6n-;i8_{@e10G+D;wDL8bfOXkcZ=jvXwi4-YNx2oUaL)uh zG6?vXyMPwRQ*<3i_W<2bm^Af@fVnspY@}!{SohRn$^*@ZssLbAXO+c5UGRu96-ubj ze32Ow*J9a{DQ3BpUi8q!F2#d#My%aN!J2t&xIvd!{)sCY#P@2Ock7Pr6W=}wr!R&x zq0=w@kxWH|H=%jT)W)Z# z4tL^~DR!UEp79JRI~zS)<>U!HA6{EHAU%q^(9W-qrR}n$JPfZTWK4@eCnt(1g_``u}L40I*ifijN z`*O^;RY}r%U|Q?w&dil*_I>A2d_IaUG8B*hvqh8(m;mpxx1-;fMGV#v(A8^uJZd;*_s0IwOe-2T7opbNSngelNY>6SYag-i* z!+*}K<>1KRgnMSApv4JuYDk?JEZE>NP%@qie|Uxl|Dkh8{n%RtoD8Va;H&{s;$amb zEn03f{gPRD&Kh4Gc_N5=U(^?g0ld7((hN+yIFiT>MK6sq_nk4i*J3%73VqyzO;WeG z8S;21hLiHLT)t8TuFL61=;`cIihzlV22xV_5B$;4579;j<7a=*Bhc>+;(ARGE9`ic zRSO{zh?O(o|byT($P<1A z_JXBLGBa3ZIGeSGY@~*!BQa?~;G2W3rEX?)LqX#-?ir^nFD~Rf)n8qI@Xk43SU6?=;zlE@=Iy@qnLwP~)Ydzt z+Zk{rf=`*~COi8cBECP5o46?!`FC~E%W-1REpi9JoyF!W^O>ZZCY#KESHHO7*qwZ~ z{dK#%^sxb{I2;+{dJ-%SlhgrDvPE$@#rwKlP^`kc>e1; zsQOGGz{uwup>tr9&|LqCf~y1@SG*RIvl>2zD=#+k4%>350VRAR+(?j@3*WXl;8ENj zw--{jK*-j=%j%xwi-bOmA2yo9q+rU@DU59>Ne!Lo=>BNBtFdtyg4tvO0zXv(2 zlyK3d-TJdq{I#N;J<|#cF_LytWt3^wXfA)3?usDyeoUmUVm_(@6X02ALmyaJSa0h9 zL8rkhJtelf)V^39bI3dQ%)8}mMtpt`_932UGDui$v16EmjY(IW+ z_{iX;9+%UDo{6BzcC|X~3HlCiYDdE9+?&js#dm2!<8r?-o_kelTa9BPu$nyU^?;Pw z|29aOARvSy-5Iy^lD~$_OCtr$dd0=s(}6t`qS3QZG`Mrzfr`Qb&_xRy&rpKAXdYat zvqL-ZENZLdM*hR_y$I$^my7R3vg2qzdWkV=xf39?5MMz>b)la~nvtf6o**6^w6IyK zEla`=QJaCg;_;G2PX1Tz&cBHI z;_c1l6j8cdK7r|tB~JzIVQ=Dt>{**40{J|wX#GhAJ=Xx}qp^{YxzYEASU8p|nGO+S@au%#q(<@Tb= zU$9?1Ve806*l6q&4XhXG!?OUP&2J|svfioiC-MkQ3Jy>~G=Nf|{{eNG8z#v_O25k4 zNh;t{SJYcb315ag6gNO$hEB#~7Khh}H+A+qn$697Iv1nY9|wfU^AcIygB%XqrJH9x zl+x^=Ak~&ZytbI3;_d+H%)yI#?>h{rAAkg=t498y80||8wx8lShg$ z8`XW#{@&&~#Y5{cU2=HNwBU^za!#pBtrhP8i2W70x5(O1rk}418N;tk)SpEX`u8bE zzU}$vH0T)1uen)?L?S3mq{lLqEx3VkpFknJoCm)gf z|Eh)_P@iS`9W%rvYMCNf5>EmvVFww=u5U(A)0Y5&uj$7D$#F{K;}dPE5zJb!9Nu@< z@W}<2HwXxN6gof2dj%%y0eNs&=a@95{ucsD%YnuG1c}hOH4j?F+434ZD6286vLxyD zah3Z`{aNUO8E|r81O!-QLj%}r3RAv&RcG`a@lf>Pj1PPEIF{vbL@B9t*jX)~A7eLx zcE5ih0k4&gpPKR0P=qqncs>wT3L)chbd^3Fxsm`c?nR0)rWPj1Vb0o!`(t|%s0lTj zeXNAJCdOljujUMpLWZ3hsuo-dQ4fZu{_68a7y*=|W8k*ZYq~^C#$img&x3M7n+nFa zlX^68;+!#ggNKW&Za36`aa%%e58jG2076>=+Kx=hxaXirM!>JZs|7Aw`wOGgUdkTY z+#&)5jJ;nGV}ad~oyjI(ka9vvE*r$Iq{^w5!9*9;k(bF2#sWx)|Fe3Mui@<_Cn=FEWJq_t=vTje))L04M}TwY9a?iQs1+K)$5o2M;m` zYfy#j%$1%@MUY((e&+o&-CGkF2)S{}P?H=62Gl0~ET}qEa1H!{E~yq*0jEnsx*o68 zD$unZ%8_gO4axlqGbGAqC7Fj=QqCldD^^Cp!rc5POo2^8s`GOK)-y+*ZMgougR|Lf z>o!I%D+Y+$Mh)It(7(ae4-_xzfgwqkY-;M_2P9GbqoE!O$9)hCf(@E3#7(NBo#^Hy z?yEfNiiGl?!^w-^lSN>qZ%9Lab2Av(zOLUiKw9*HRMt>?!0}>=XSURIo4sn091m$?`Y(=&rL1VRP=vz_+Om8Qr%u?6;N0+<{9@0p@FOTu}XV>Ba&j<<%%H=}@ z8DVT>ENmQH?1ld_RN;Q%r3Y&JE4wdxBosuJgawgm_VZ_%n zJFlz$o`-^tH4r;=SvrFe>CJj~7Zu>F=Y(>I{tHLE3aCCU@7{w#ynd zz-uxQxYcq2LQu+r!I8a!?Z0USWc6%lKyY1;ozHrKIM~%e&m*ZDh(D8iqaK}-;4MB% zB>2-2+JyA0ldnbDU7{E=eo8Z~W9?I0YXRYm&xE!Jnh0|iE&8?l2OzG(l4z&GHk(u< zaRb;i;)(w3l=ld>|3>h|v;l+Z2)DNBi{aLO@!fb_r@eE%;pW7f*=z0DGk?tMIr*IK zcc!K@84Tfw&|oO>ovtpT{b_h}@8qah!>mR_d%?S+{4q^McKOQ>78AiPC9+W<0%$-J z-5zp>7AHTbeBSgKXEODOc(PM}evpR=lr29GelaUGO``WEZ%MkT7$LsIl5W9PO$EZp_Z=vLr%1mB3 z5XCbmbi=WV`G~)?we>Y5wLtKIT8(PNEVGwfadLfjSt1qmRx^QB*L7yp{)B!VcBxp2 zWhfMi!|4Xh@$6@-B1c_30+^-5wuy`U*n++4Rd|8kOslW4hkqsfCn1;;ZR-J|4jEX| zN!*+~kX(OS4PrF9Hu9Uu{Yg+Gh|ysxcdp6W$Zv1vNV74+=C7*GHdLB5sO{Tii2AeP32;xO_Y;~i*CfKCMJkfy ziv4n*R$x$n#q?YtZy_@HEpq9;w>o=))FHhzhAF7W76

Ei*l&+?~})qL)ulQ?DBD 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 O!Yi?Zd5X?&{r?XwRU>l% literal 0 HcmV?d00001 diff --git a/public/images/events/egg-update_fr.png b/public/images/events/egg-update_fr.png new file mode 100644 index 0000000000000000000000000000000000000000..e0505fa96dd574a668a1e7bc5606829dde49d0db GIT binary patch literal 13387 zcma)j3p|u-_x3#q6(N;V4yE+A_nSjPa+

y(M<-c6N>>lVT`COqiK=(Sf3)LTD2y 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 O+njc8e(d1&>;C}+kLz>* literal 0 HcmV?d00001 diff --git a/public/images/events/egg-update_ja.png b/public/images/events/egg-update_ja.png new file mode 100644 index 0000000000000000000000000000000000000000..2259cbb4d9a9bd8dc3b26e76429f356922a58288 GIT binary patch literal 13612 zcmaib2|SeT7xp~}MbTzSnD&JXDWx4+xLFI&u>D{JoDV!IoG+)b&jic2lmXJvt$kcVD4V)UG@OT z!C%2!MS1vr&TN+n_+$2Y>*M|a7_314p@P%R1K~xji&n=j9wvBR407{31uReb_=otT z4_^#8d76MeLLm6Od;FaU02=Jwwev`D!bk_DUHd4hYfQ<)`esv__{aRUv#(s%Sfr}= zr0B?z9v8Usb9K z9=>vEUnZlMn!AObnQUJ4HJbKf`={v0)AK@fOv;uHeKIW?{3#?HJTVM=T6=U zn@H|`xh45*dD*5&GnII^d6V`@WnmejG|gn*Yn9kBy?NNr(FaYZKDG*q#}tC@kL_%n z3TkcMxTod}*)hKGD|QJneqGo}|1e3Xf{u$bCDB90$L%2hROTl^h%=?k()?+0%{^Tw z=di>TefXXLhS5i6WG;Cc7$%TP_8^x(69%5R0WFQ(mV9X|My1a0FXEMNT^VsQ^#FZ zR`O|0KSMuq9Y|ofyA1|xqG+U#?P-o3(>ieMWO*6KqB~hdK!n$$$b(ns##i$a1mo&T z|Js|LrJa7|n(58;`uy}{>|M#99pl+=s)A$tZuYwwSEag~@n5Shx=jFz*{^P74XC8E z$5N^_Ts@-X!vBmWDBoOd%dCvnogRy^$?RSrpVo2&U?!-?7eCF{d zJ@*6a{bwjE1y?{y#e`jqY10ZYFlN@|0naAhQii%+hN^=~S%ONr0$kx9X+@|nk)wLf z?2sJTkrWv!oryI#zX#N<07q7UMU(46-cl|mrh^v6d-q`6W19l4znL~xl2eUMQo&*8 z|Dj(iG1MVB#hPEPWEVc;jE6K%n4jxrjpGlH%tq~MzBk-w8g|ok&GbG_Jr6F*%NPsG#1t&bo%M`1IFDWwLTlW;Xu^>R2}~( zwAQ6Mq|)j1=G+bZRhqyZ!}roYPM&TpEWm%{@7ti0rYgJAQ6tZ*qS~{l_CoJFpV;s@ zz$C{I{o#gOVNuTgZC|2QupGP0krt<{p7eBDat@Dd+*x$tq2}2d1sqUZnGH>XlDZRk zUzUysH(|z%(oG`es8jR7v-w~n+$R};N^xy+@m2+K-~Zdpo>nhIrI6&PXXL2LC>-WK zc=a#B&F(}uLILE&T%&9$oL}GiidQA=E-s6}G z?a!t~{0%Jlh8iemhrEx@)eb1odu-fd7AB+kK>V$)m;)h? zIOCa}d4z7?@_E3dHoCu}f*|~IX>oIv_wql5q^+!v{LICZr<6cjPW##N2~2xi^yYq9 zG?2U9s{4t~s6&HIW&gLG;kLI0?L=(o$?h3%oAq$Y;u5G+uC?6JXBYF^Hf?<8%?2Yr z%vq=sZNw_kmJoN3oCvI3l}=M>RJyK#a-|9QeYAa;H6TwbqJNox%l=`2-f(>SRzu}% zFuMDD$j7B7cS@HgQO3P&Fa%@3(_vwz4L&>PXgWT*sVZ<%@)JBw)GFyqiezumoE<7p_>4aFIVa=`hZjjxqZq)D(p_S|_}<^wB>##2kNX;H`^7>&W0X%it~p z99XOIkDl}2H+rs>DY@ILw+~~^E;{OIwjb4%<7lv@J4@shpEYtUHzKl`l32rgc(!Qj zF&nc98x}0iUe6FToc8qDeuGkpB4l=m7itYrjI2p2@Z=GE?OA$YhiIQM`OC8DG2fhS zo;gI~))5IOb*_t`kqb&DUTOB(VIoY2hw>zc964=iYO+pw??Kzd%Bg%gMet=43g>qf zWs@&91c>#CqlJIYaC!6zt!QAIG@`g=@T z6ZikMRRd}$v_7&`)Ix7m*TBPx?yMe}j#ct4Y9f=3@-I#VBx!Puz>8x^64jXMDhcjo z``b`E&rZ&`xqD^vixB>L`==P*teyM7qq6IqM_0$e%R24EowGO zryV>Y%5D|>T_G|zx+SSU_Ih+B^ns=0W31GyDn9UX2qzETuu4>@A&?$Mxm?pR6W6eoHWgR>K132 z6j^N;8Jg99(~7b=e}D!}XGw$xS{L8u;TEr8t9*VouxENu31BPt=9)8^6G8DV4Hts~ z=dX~rjx$7yeiRbc7YlhR!iMP0l*5W({?C724>YJy1S(-bf@@zHt-d7mcO23|;bMNF zFoY2pjb?UcKMUo`=X~%S_QQg`<D$0w%>LEKX-#H9iJ(OexJA?#JGc5L8 z`9{#5vn{zc#%1al*--}aMo2A@gMmSS9|hoPp^Ny@+=O5A*ayzL`N6#Qd4 zyLs<6`4@%EXl@us;HfWLQgz?hhM+a%1S1sy)cL!?+T}Fv?I5Ae&8so<`IF1of1&KNO3I32i6$5fFwN|%E?Lgar;^0EQ2j$y`8 z7DwBFn^EG(r1(W1G)f_}p*eCi6SbY76D!LW!RY4%B(l2Z#Y z8@nR|hqeDTu-V!2{sZKqDSjMc=QMZ9WU}w}hP4V{??PGkWEFG-=<;iqB!$_YE)uEh zniP)tl6;ecpK<)4t-*8DY0rt#q_76nV=oMYo23qty))*515Y|{>_W~4lARg8qa?K$ zGdb$eh_%#NA%T=e>sNW_SvJ+djjpvCh49mcuOF!-8Fwo^_IXlFCx9!(12KPsE`#05 z14DW!%UJ*-p|Jve#YYq8x0>>u0j|@_>1+Yi#qDzg;@H0R2e=tqp42cJ&q@O40| z6NjBo5N-4JsYz(4%=K;62@N`e!ksaePgDKhL2)raRSjYpGHdu{D1&$&y((jvR z7Ol7#bo!UKRrAJAQ9R32)kJ=``U}@`oE7=<$bs5BatenTmDscHxX&nbQ?n>vf7BO- zAw2z7i5f^-RHNVu0WC`w_qjr3^RI)XznuHq&yckN6i^Fl7j-y`1(TU%e|y2L&*IaQ zlgumuSw((iGz{PWl3*bg{=LJ?>Fs1o;8?<$ZENU6om`W?Wla-jj!{&gO%TpX{dS`i zH4rL9wOWsPp$JYd2hs8}xI(U`5-J713Ds2o4pJ{HW(YEI8z6?JL^MCR1<#dMI#3#HGK_b`AhE>J2+)k_8MT8cq{{H zZcQ?{YmDdi?T^>Lxe@n0ySjtI-jsh(x3&Msoi;(u)#uOh+or=vh8oIWGhFaIi5ztl zIs&rp88!=-u8g9Bx=Dj0%fWCcvuwOHGgC581{Va$5qIzsVwx8*M?l{9*UzhYO{VPU z9XEXI*{@&Si?X5t^l7!bCS{9c;naO9L=`RrHb!cqC2O#fy_qaQIaPxgBjC;jzB*h< zzpfxnQ!@FXI(IMd-Z_L>S`e#OU9tOc%VX>SivihmB3&Nf10-}eMUZu*+IddY87b)! z`1(q*Jy;rAm&@Rk;^^nSS+lH%{H=iZqfE&SxB=GAScbE*KlnMlC0z#)b9?>5nn@QE zD<1U&ZvnU17EhskT?X=)Um?%f1+GMbls#bWl2)L~>W(pR!hRin@KPP^TlIIJ$3x#8 z_qMacxB|U4WMWD!hm^oNamJajEKP%f(6FFdtU!? z@D>9h>NPbdzb~$EA13JddqKIZI$d(FsTB7FbX7vL*2voPdKPHAAX%6h%gPqn*(-tD zFc)?YN3~^%?W2LJAdiwikUMrAB}Y}1E_!Nma+W?SWrrLY0k<}>T?cb?1zsSNp>Kvf-; z@(tP6YE=Z7W?st`CoP@~IqSCh64?(o48|PhDAg;fcHxJbjL@lMF5%dVGQ`+D+<_0{c)Q zNfor-`RpGK>~4TADeTk@=a|4eUy7%YZo!bRXfccWjI|}-b|1?1n9Kh37n%M^7T`)Y zupKe7J|*FsNt|^y+E214b`0->6U}JsZ3cnaiA^x$?SM7`<2Q@|Gni&)Q3&ekh3rtL z9zz8xmN@tLz6ru?1Dqdlsad$WohV8mb=k7~K`j%)qx-Vd9GLwArA|#1~U6bXLH2j3+IcmIv_E zZyBMdE=aQGgMF%?bOm@D1L}lW!CUZUX8v+ixYCQ#`OZQ>5E94%X+Ycec0M3x9s~pP zP$|xk(51bmlx>x?3g(5ZJsw@w@cEpFC9qaN4%}IFCfi3eleldFQPlQfl4D~HyALUX zxI68ecNp0xA8_v}#H7+Ai-xt=GlPEkOtkkT8g8(?vR)9>JQAc{dp}2p>Pxmr%EP25 zze}_?Tjq7;gV&ig_P#5?usF;fOZK%oLSsIruUXOrlV8?)V7*b^+V8u!Bl_}*_bQFk zU?toUsKMy}@b$lK0gh#f-HplJrpEg+C5Z&a>%jO_&Z&CLHyNsJw4v(IG0N%A@6*A( zq~6>etby@L-zaih=oS}FZ)cC7N`)rf7_iLabHtF|8{ZA14(eUFW~U+Le_e@ENkQ2O8meJJR9 zpiyjTq1avvmGbE^ioX;*6BipK%fBvuLlA`Te=(uV8#)XImT&ZyDX~eCgn0_v-&a<( zYymAxH*FBgoLDG(d6EbqZF+s41|da{;`dOqvRmwn!d;s$OH>yul1w)q*V1^P4%oUagnsH4Tb;-?#K!QEt?@`AKA(JB>zI+fQeuy~4;*6Z*7wt?Su4{`ozzifHcJ zy-nfLPM*IauRXVtoHmugXbJ=^q;tNtgU^EMJ(A4P??*_vUp4{jfZD7&RLv}ut3#>` z^`bC}`J9>65q=HjoTyT=dbfu4NFL==Z_zyaXe$P1OAzUOv@_Hta|v6kSp2Y2N5;K+ zIquIKdHIyD*Q6Cvt5)%}$>Y^9+uikO=+=<-JotvScCm{1Xi*u|O?%MFeRX z=urf6)I@up^Q!rvl-U^sm53q1YM=@%pub4dns6)d3JrSruf6xX)fXS0BWUQau-E%4 ztROoHe#TBOUENeJyqKlCEL$7I`PdW&YexXp&;yF#yOd)>K?A-9R{%wrAYKJ^#Ybvv z>Ux3)TliDQF2mSY;pNs42)xglTb%J2ds-}6-TbtW9++%#PVc>k>JO}iKA$x8>CsDO zveD?nYpX#OxjC|mH%2M`7JYE5PmZQ}VZKmLObiHs>8gPNWWidt8n0$iGt@*dfOXmU zw=;TR3gn_sc1hdY$bDAq>wt2Ng-VG*zjEHsA@j}MFY)=E(G?XHHklIEQC$-cCP06< z0t4Ox(lM&_Q({xDPiKL+|lHfq>_aGfk$X&#J zy5XrAX7|oH{vG}Op^YEB;v=))Z#@V-#NwQdKqGBqWGdF3*=+e_2&%OW&naWpgS~MY zu1dgJyHR(AeE11YT#7?1d{W)CMPo`;TaPHigd(k_f@@<$m$$R@ zCo+7KpbRt468Ah{*v45gY#oeJFc6Vbay1!T7vm%$j_h)$w*4;Vhh*xWm1og~GDh>c z!{t=x(aHt#CzbQuKiSx1`nUcNR0mI#U!Nwet5GoYL!}H^5u4dvbLB?`xrKHD$J~#n z{qaM*sxME9SeSIqgT_6OIUTGGbBGHvbnaiF)+WwRpuQerI;W3v86$KOvt#mp+s!re zIUN{UMM(ger1srb*Zk=)^OH>{3Ai?IQJO7$2>TCamTETnoCU~Ax5^{7Dx+JEcQyt*~|@ z>3&(qG*;byE}#>|+O}-tzV@6D#hq6y*Z9Pdl^KH*hJCfCuL*iq1cGCtm+Ze?`a>jq zOggPF97UTzg`e2<=sc0492Y@vqFG74UOKR;TYG!pUFRJI8q!?wBOLMpGbk1FO--a= zfNhMHux8WZvy_1e-3{^`*>qpWaZ(cHd*^iEqJCM8eBdgWH}VdBJ?LjaC*zrb7WUsJlLdZXNIiQzfZ}_tcp&$xwyZs5 zL{^Nqg9SF##|-$ZAV}rEr_PlKmKc-ypKP<6B_D#AC(Dt{6l`4q;MAZqAj3;3)<0aV zmnms#%-q!NpnV(jS>o5xzi-RWtM|QVE(efDSnqiPezsVu+#hr7OImc2c~ax2sI|nT zjM~)apqR5R!iq7nR7IcPaT;n>c+un8h+?Ke^q`(pk|hMQ9IIoIhfw!PMVIQF?!S=q z22rCFk?T-@feCxcw?HQ-*GTiqL(9Pa`(gJr+1c!i#&owBmcpq69T!dv_Qp8xU`EeI zKGe}5M^&#SI}Qdo$&_ePI8zOknSwLZ(}1rb>r-$|ZXI#+12#5~nEg;#z|e>i_va8^ z7S||w_4OCGoE;~><1RCy8A8l!xXfU^Bj3x&GUWk5O0JWc8a5~Jb>VRBKLH>W~TTncVA{BEpzU0p3m)CA{Hv3u4CwZX@;M;oILBrq@DAUGNL{{s9oZYPlv~ZB1<2m)hQfo% zZ>NPmj7$l)Ne;9~vni-CwZmeb4-{^f0rcJNqvBBmiHPsO$mhJSC)wxC@3X#0-O>c%lLJpC0yC{W6vg$7E z0cZe>!sO!i0I=v5(hKmb@`tzvM+m-n!-jb4f zOE3_qI|OUg{e?K^SFZ26uIXj0ErzKpSyvHgY&Mc9kqCdlvLzA=wO|#ZU;gKHRD)r} zpNrJ^w=1*64~qu4UyiP9!H(T+p7cBDcv=Intz-BcQ@Lz*r8I&@|~xp_2|&y?E%kt8J?F3rndDUl>|ENe;p< z+HmYuN`1gkhGVvh0deY`XFvAtI!8nP=q2Aj2iFHK-FxBBI~J;b)A?%)o%L-g2YjC; zaZPMxqMA5ftC}WK^}{cVLq44Utw}dX<;IOWWvSPp;Jk3*LRcr!m@5Y;a-evT`c^4( zc7YY^HrgV}4ON$TD1bd+S`8bb)0fVMN1r9x5N9QMuh$nhHpMj4c4L1|FB*X58)c}) z!4k1=Yc%Syff=k!7k)K!49zDfqk-$%d}5JFgmFf$$X3p_Z)ahQ95rxqP;0flK#h7# zV(tm*MjwuZY8*f$Is^~}Qg>1W)^|rbvR(%%d1xV?1Hd&)jn_CB=G~l3R@~?&TDJl6W!EplxifEM18d zZ-+{GZbey3AA=I&N?T-Go_J%wvL6yqDN(F5=NkK_>>Iu?HZ*At&IY}08yY!3m&$-m zQbdGaAl1wvXzD|8?%Cjl>bN_%H;2%&_kX;Ta z=7?N;K&$w~4z1?oiGn*J<=bYvLQg8dA>a#L0-Bpt#e=;GxWmW@xS)3v4ufP-zeuqv6 z*DnV)A+;q4jZo8oVG_MLRi=cnIwyWiP&;jxQXEy;`&=enq`;2O-`+`N{5Uu?#1i|! zdXNEs|KMb62lXmTUq4nt9s=p#d>w^5CDVfm!~Tx@Y^B2NXdeQ!79aMiS{( z2iH`4&0^ARq$kfKrgw}&#gkB6JQBEFU1uF}#4*02ys+l*3o8cUm^Yu7*RX40GAm63 zY!cK>y%pj^8PAW>!PVGzo*)J1e9QE~^#OZ2z? zys$}D74I;6dwuld1iX$#Mu9NAoV)59d<1xx_G;_XFoo9MSpi=PD{X7Yy74SiV4;(I z5S;gl=e{;=F0$12Kj5C&mU<9XvgghOArA|28MZ*c&+45RP5eE$}W|#^UVAr7bn*!db z>}9C>ORGXDQU``X4(37ReF3+2Lt{?+3v`j80K#Wo=9$J!`f6Llg6Tip{XKCdGiK;A zuZ3{u4bj0@@4e`9f~=gL$GbP(ZE9yZl`Rn- zF(!Kw{cny4{H6=cp)@ZV*$`F5t2@g+{o3*GnK~VmpV#e%+k=j6lEr;1WE~X@@OO0C z(z(TF9FKDKHg^QIi3$dOBzDDezg&Lg-#0Pwc4BPag^f5`{~4|1@hf9b?>>^`#G-H$ z#4C&WhD)TR*XkFA_+>0mb09K$auAv0b=!O(%-soE7UN|VAsLavgSRx3g#H4vp=2lZ zjAchjo8vt3M7p0Zw=K_LD(G2gJz;w?t^=FrQ|6VmEJFAhM-zC5;-7l+=d)HTxzhxG zA<8}#c@;!u3z7IqDEW`X0BpXi%nqx^G~ zI+K1*xO4i#1Vi%8znT}>@AL;F)py$e(Q_-t#m?gsRlJ?^SNg!{nqwu=b@EHlWDNFh zx$9C9m;^!`)l*BUl@|Ehkg3o#UR6$-w+jhJ=D`0kp|*otfGl;Ub=7&;9;FJc}NZ(!CzA^HS{$;20kvGpE zACERcdfR5Sh?zo-A}H<`)Eqf%z_vE|MqADPTu7Yj`XtCMzUaBGyP#EYo}|y`pQBi3 z)zplRYh2tRiDT*-P3`CrH|@yq6-U1p@A&I2^lbM8trFS>2tIt19PkR#EcbZ5uXvyG zb^3hgmeP{+-0SgKo~cFbmbVR+lG>2m_$+p5$L=@PF&oTkqcJYzy@S1UCpA8uSXN?? zyZDxCC$m3Gz|u4KDknkCoQgD_;TA#H9^s>bvNzLdp(O9rc1b%J{QRu2Xa!XKl5}L#nYfh4}&@y z83PW0^i9C!@uhW@@XFOLC(BhvTDF%Pz;#8xu$=nHkRNLQ6w~aI3{?McK>BThjwd(^ zuIpW5$Jh>AF_d6#vh-9pxAScI9o>)pL&jVFu8pbmuR_)?M|C^Fkyb*HeDflVu&`zf zR|9wVU*+s`(s}^w2!$TzdZ9aqY1I8+rTufp-G^6;9!>F~Wa~sXsoNr-x0IcA?Yn--m0$divgSWS<7|rNwQ5I~*eETO>j9tiwsm9Xng|ZZc514LCE5iro zBVDl8QsM6WmPJqms?&`(ddL|MINKaImOMRIGEczI}twz7PXs7t|fzcRev zIubTCLRqm4Dkr)W&R%2jR4wIXc?Hqu_~2xJ^2K|aF{RD?>`!X)kQKtBD(p3b9cNh` zKL@wmAEPnEljyeS;yN1AyJarHRM1?+KS!p!rE-FXn=}RDNBqjp;ApCgq*EhHNogpY z9c-EESpZgQBF!l`=fVH&0s~*S5O@qvVKGBuY)l?`P}|gLas;^6<2OW1$oUkEHZ)Xv zz{9fz!PN;~OPFkIV?P}AQ^;h0iS^DWR+48dihH>u!>?F#A$%x+6=y|2g2g9Y1jeAW z55I7Fia=!X`%?31kcagAUY~|J_8*xwF;>BSpVm|bH?(B!%whiR+a1!gwXdp~=HfM_ z6f@5cf6zS9Tum>dpeFjhWl$B;K?_@=VKX#r@^$d%B^h_RgiimB=ixnt1&763Ka#Gu zK9GdeYM(5Z(EC>;4wo&K9HCz+l0?~5wLqUbEd!#+#Vu|)1HOtA@sTD$d}x|oqTz!o zIduWUpx5>d)e;-dQVdR*zT}KAD#Z<3NqE6xr{!Rm;T+5+ci4jrn^$4`rzz5oyxR@- zenRyJ^5)RrsQ*5?ROx!lf7}F{@(#sXO5q6>rDi&pVIdBYOP?OD=5<-BOt#LC*SlBr zmNVX{27BSpHurRow2{x2lS1m3;hl;mdV~tBRSMxDJF`5ypEXpfBqbz2{ytbe?Z72Y zJlb9rYgz@H-2P){*44U2YZ!ipHqv4Q*V$``8d1yqm z2>K@O^*v246}@Nq(Bgcd(aYe_4}}&h7X4nNbSZ?p{WpKi=FE6g$H*Hkj`Y>^nr*+^s}!66$sB-Z|_K-fyMj zFIiEx8RYw=YZ5|!8W@wiv>a$I%%FM#tTX$iN=8Gx;>Xg}1)@%W$Q|>fm7KaS45@mp%9)Ww<@H) zzK+rs;K#6M@Y4T$CJJ_0?b5hX(aR%GTabNxs-i7F05$&U+fia&ytuxB6@Fr%@cdO& zT(@Ae5=njCdumG*d9S!ribSeN@8!S8mzv`%*mwxj4XDUNEgnwvPoz=te+Px-Av7qt zER_YHsDg6OD#LE|{grD<0+&kuO4r(lp(V8sZ*hbDgt;Al`I<2!=55iw6-owXLQ-~{ zF6H9&W^vk2i!$|p`=4~D{&@2NT%C{$KLuNLZ+y$He-G3|r}z2RW2RwcP!0KGfSV_k zA+kDavtTS;-W_rI-y1yR%zsFAJ)rf=MR4e%y1M`Nv)D37r(kS%mBw?sBZ}bgqXV0} zPh*Iwns~~fp3Ro?P}H}#El`)v5cp5=c6;W9oYx<&msb_4N^1l}8W(c}TqA8ims5H1@o%qs4SzCXqEr$wMtN)XE2p>Ik|m>;&3S=nFeJ>F&BL zf+bK4hdrVH;i1T{Es#XSz(3`Y>N1c`THfTqQ7D1J^MQTSNL!uEKX{Wd0+EO)Pyo~CDG7>#%4j#r^6P>TV&17^ fdp&J!!Fu?+l)S;84TtZ*?_jUhfn6CEu7CX>GBq?0 literal 0 HcmV?d00001 diff --git a/public/images/events/egg-update_ko.png b/public/images/events/egg-update_ko.png new file mode 100644 index 0000000000000000000000000000000000000000..99dcc6624029946c861922311a805267c387d57d GIT binary patch literal 12565 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 literal 0 HcmV?d00001 diff --git a/public/images/events/egg-update_zh-CN.png b/public/images/events/egg-update_zh-CN.png new file mode 100644 index 0000000000000000000000000000000000000000..02d780fab89e1869730e7f52385da310f0390c4b GIT binary patch literal 51829 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 S(o>TF0000 !party[0].scene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0, 1), ].map(m => { m.setTier(ModifierTier.COMMON); return m; }), @@ -1615,7 +1616,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.BASE_STAT_BOOSTER, 3), new WeightedModifierType(modifierTypes.TERA_SHARD, 1), new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 4 : 0), - new WeightedModifierType(modifierTypes.VOUCHER, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(1 - rerollCount, 0) : 0, 1), + new WeightedModifierType(modifierTypes.VOUCHER, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(3 - rerollCount * 3, 0) : 0, 3), ].map(m => { m.setTier(ModifierTier.GREAT); return m; }), @@ -1696,7 +1697,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.RARE_FORM_CHANGE_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 6, 24), new WeightedModifierType(modifierTypes.MEGA_BRACELET, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 9, 36), new WeightedModifierType(modifierTypes.DYNAMAX_BAND, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 50), 4) * 9, 36), - new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(3 - rerollCount * 1, 0) : 0, 3), + new WeightedModifierType(modifierTypes.VOUCHER_PLUS, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily ? Math.max(9 - rerollCount * 3, 0) : 0, 9), ].map(m => { m.setTier(ModifierTier.ROGUE); return m; }), @@ -1705,7 +1706,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.SHINY_CHARM, 14), new WeightedModifierType(modifierTypes.HEALING_CHARM, 18), new WeightedModifierType(modifierTypes.MULTI_LENS, 18), - new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5), + new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(15 - rerollCount * 5, 0) : 0, 15), new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24), new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) ? 1 : 0, 1), ].map(m => { diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index a38874c9acd..7815244c35c 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -30,7 +30,7 @@ export class TrainerVictoryPhase extends BattlePhase { const trainerType = this.scene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct? if (vouchers.hasOwnProperty(TrainerType[trainerType])) { if (!this.scene.validateVoucher(vouchers[TrainerType[trainerType]]) && this.scene.currentBattle.trainer?.config.isBoss) { - this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][vouchers[TrainerType[trainerType]].voucherType])); + this.scene.unshiftPhase(new ModifierRewardPhase(this.scene, [modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][vouchers[TrainerType[trainerType]].voucherType])); } } diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 874bf6a8b46..9bfa3bdf54a 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -25,14 +25,14 @@ interface TimedEvent extends EventBanner { const timedEvents: TimedEvent[] = [ { - name: "September Update", + name: "Egg Skip Update", eventType: EventType.GENERIC, - startDate: new Date(Date.UTC(2024, 7, 28, 0)), - endDate: new Date(Date.UTC(2024, 8, 15, 0)), - bannerKey: "september-update", + startDate: new Date(Date.UTC(2024, 8, 8, 0)), + endDate: new Date(Date.UTC(2024, 8, 12, 0)), + bannerKey: "egg-update", xPosition: 19, - yPosition: 115, - scale: 0.30, + yPosition: 120, + scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es", "pt-BR", "zh-CN"] } ]; @@ -94,9 +94,9 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { let key = this.event.bannerKey; if (lang && this.event.availableLangs && this.event.availableLangs.length > 0) { if (this.event.availableLangs.includes(lang)) { - key += "-"+lang; + key += "_"+lang; } else { - key += "-en"; + key += "_en"; } } console.log(this.event.bannerKey); From 0bdb6970772572ba0749838733551cbe98c93173 Mon Sep 17 00:00:00 2001 From: James Diefenbach <105332964+j-diefenbach@users.noreply.github.com> Date: Sun, 8 Sep 2024 16:18:51 +1000 Subject: [PATCH 02/37] [Hotfix] Show enemy item icons after egg summary (#4101) Co-authored-by: James Diefenbach --- src/phases/egg-summary-phase.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index 190af17c724..1aa432829a1 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -45,6 +45,7 @@ export class EggSummaryPhase extends Phase { end() { this.eggHatchHandler.clear(); this.scene.ui.setModeForceTransition(Mode.MESSAGE).then(() => {}); + this.scene.time.delayedCall(250, () => this.scene.setModifiersVisible(true)); super.end(); } } From 8082e6dc58ecdc1961c412e1312fbc037f942161 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 7 Sep 2024 23:29:49 -0700 Subject: [PATCH 03/37] [Hotfix] Fix harsh weather cancelling moves based on base type (#4097) --- src/data/weather.ts | 8 +++++--- src/field/arena.ts | 4 ++-- src/phases/move-phase.ts | 2 +- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/data/weather.ts b/src/data/weather.ts index 2421f719e6e..afdd0a958cf 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -88,12 +88,14 @@ export class Weather { return 1; } - isMoveWeatherCancelled(move: Move): boolean { + isMoveWeatherCancelled(user: Pokemon, move: Move): boolean { + const moveType = user.getMoveType(move); + switch (this.weatherType) { case WeatherType.HARSH_SUN: - return move instanceof AttackMove && move.type === Type.WATER; + return move instanceof AttackMove && moveType === Type.WATER; case WeatherType.HEAVY_RAIN: - return move instanceof AttackMove && move.type === Type.FIRE; + return move instanceof AttackMove && moveType === Type.FIRE; } return false; diff --git a/src/field/arena.ts b/src/field/arena.ts index e8defbd1a8e..1e1df38af21 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -391,8 +391,8 @@ export class Arena { return true; } - isMoveWeatherCancelled(move: Move) { - return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(move); + isMoveWeatherCancelled(user: Pokemon, move: Move) { + return this.weather && !this.weather.isEffectSuppressed(this.scene) && this.weather.isMoveWeatherCancelled(user, move); } isMoveTerrainCancelled(user: Pokemon, targets: BattlerIndex[], move: Move) { diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 0ccf19a462f..975e3d32185 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -204,7 +204,7 @@ export class MovePhase extends BattlePhase { let success = this.move.getMove().applyConditions(this.pokemon, targets[0], this.move.getMove()); const cancelled = new Utils.BooleanHolder(false); let failedText = this.move.getMove().getFailedText(this.pokemon, targets[0], this.move.getMove(), cancelled); - if (success && this.scene.arena.isMoveWeatherCancelled(this.move.getMove())) { + if (success && this.scene.arena.isMoveWeatherCancelled(this.pokemon, this.move.getMove())) { success = false; } else if (success && this.scene.arena.isMoveTerrainCancelled(this.pokemon, this.targets, this.move.getMove())) { success = false; From 7ab0bbbd94014a8a4809e408f01d3e86381cf015 Mon Sep 17 00:00:00 2001 From: James Diefenbach <105332964+j-diefenbach@users.noreply.github.com> Date: Sun, 8 Sep 2024 16:45:30 +1000 Subject: [PATCH 04/37] [Hotfix] Fix cases where hatched Pokemon don't get an egg move (#4102) Co-authored-by: James Diefenbach --- src/phases/egg-hatch-phase.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 4b03aa62f02..90aceeb46bc 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -448,6 +448,7 @@ export class EggHatchPhase extends Phase { */ generatePokemon(): PlayerPokemon { this.eggHatchData = this.eggLapsePhase.generatePokemon(this.egg); + this.eggMoveIndex = this.eggHatchData.eggMoveIndex; return this.eggHatchData.pokemon; } } From 55b89e82c77a1fc9ba492d023519d49a666a4efe Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Sat, 7 Sep 2024 23:46:56 -0700 Subject: [PATCH 05/37] [Hotfix] Remove extra Roark victory line, fix baton pass i18n in `achv.ts` (#4103) --- src/data/dialogue.ts | 3 +-- src/system/achv.ts | 4 ++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index a2ba06b657f..355f05523d1 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -1569,8 +1569,7 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { "dialogue:roark.victory.1", "dialogue:roark.victory.2", "dialogue:roark.victory.3", - "dialogue:roark.victory.4", - "dialogue:roark.victory.5" + "dialogue:roark.victory.4" ], defeat: [ "dialogue:roark.defeat.1", diff --git a/src/system/achv.ts b/src/system/achv.ts index 89e5493eb2e..6170fe23e1d 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -7,7 +7,7 @@ import * as Utils from "../utils"; import { PlayerGender } from "#enums/player-gender"; import { Challenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge, InverseBattleChallenge } from "#app/data/challenge"; import { ConditionFn } from "#app/@types/common"; -import { Stat, getShortenedStatKey } from "#app/enums/stat"; +import { Stat, getShortenedStatKey } from "#app/enums/stat"; import { Challenges } from "#app/enums/challenges"; export enum AchvTier { @@ -197,7 +197,7 @@ export function getAchievementDescription(localizationKey: string): string { case "100_RIBBONS": return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "TRANSFER_MAX_STAT_STAGE": - return i18next.t("achv:TRANSFER_MAX_BATTLE_STAT.description", { context: genderStr }); + return i18next.t("achv:TRANSFER_MAX_STAT_STAGE.description", { context: genderStr }); case "MAX_FRIENDSHIP": return i18next.t("achv:MAX_FRIENDSHIP.description", { context: genderStr }); case "MEGA_EVOLVE": From 4a98c3642787f7599a797293fdb217e9194b2ceb Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Sat, 7 Sep 2024 23:58:24 -0700 Subject: [PATCH 06/37] [Hotfix] Properly whitelisting fused Pokemon that happen to have Pokemon with alt. forms (#4104) --- src/battle-scene.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 9123a213f4c..8a4e98b25e8 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2767,7 +2767,7 @@ export default class BattleScene extends SceneBase { keys.push("pkmn__" + p.species.getSpriteId(p.gender === Gender.FEMALE, p.species.formIndex, p.shiny, p.variant, true)); keys.push("cry/" + p.species.getCryKey(p.species.formIndex)); if (p.fusionSpecies && p.getSpeciesForm() !== p.getFusionSpeciesForm()) { - keys.push("cry/"+p.getFusionSpeciesForm().getCryKey(p.fusionSpecies.formIndex)); + keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); } }); // enemyParty has to be operated on separately from playerParty because playerPokemon =/= enemyPokemon @@ -2776,7 +2776,7 @@ export default class BattleScene extends SceneBase { keys.push(p.species.getSpriteKey(p.gender === Gender.FEMALE, p.species.formIndex, p.shiny, p.variant)); keys.push("cry/" + p.species.getCryKey(p.species.formIndex)); if (p.fusionSpecies && p.getSpeciesForm() !== p.getFusionSpeciesForm()) { - keys.push("cry/"+p.getFusionSpeciesForm().getCryKey(p.fusionSpecies.formIndex)); + keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); } }); return keys; From 22c60ab532d620072e0eeb327f346a08048928f7 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Sun, 8 Sep 2024 13:42:11 -0700 Subject: [PATCH 07/37] [Hotfix][Bug] Retrieves the correct cry for Fused Pokemon (#4116) * [DOCS] adding JSDocs to `arena.ts` (#3590) * adding some docs * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * seems like battleStats changed to statStages * Apply suggestions from code review editing doc text Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * Update tsdocs, convert comment to tsdoc in `pokemon.ts` --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * [Bug] Fix scrappy (+ some immunity move and ability) in inverse battle (#4067) * fix scrappy + etc. update inverse battle test code * update test code following request from swain * fix and optimize imports (#4061) - remove any `.js` extension imports - remove unncessary dynamic imports of `modifier.ts` file. The file was being imported statically & dynamically. Made it pure static - increase vite chunk-size warning limit Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> * Fusion hotfix * Revert "fix and optimize imports (#4061)" This reverts commit 287d671cfdc8b2d45b2d206386e980c11ee85f8e. * Revert "[Bug] Fix scrappy (+ some immunity move and ability) in inverse battle (#4067)" This reverts commit 9fd34c95d565efb78240321062521e8acbc28739. * Revert "[DOCS] adding JSDocs to `arena.ts` (#3590)" This reverts commit 0742efd1963b8b9e0b17797ceb3dd576a765ecf6. * typo * Fixed fusionFaintCry to return correct cry --------- Co-authored-by: DustinLin <39450497+DustinLin@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Co-authored-by: frutescens --- src/field/pokemon.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index f522d50f357..7d7fae064cf 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2829,7 +2829,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } private fusionFaintCry(callback: Function): void { - const key = `cry/${this.getSpeciesForm().getCryKey(this.formIndex)}`; + const key = `cry/${this.species.getCryKey(this.formIndex)}`; let i = 0; let rate = 0.85; const cry = this.scene.playSound(key, { rate: rate }) as AnySound; @@ -2837,7 +2837,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const tintSprite = this.getTintSprite(); let duration = cry.totalDuration * 1000; - const fusionCryKey = `cry/${this.getFusionSpeciesForm().getCryKey(this.fusionFormIndex)}`; + const fusionCryKey = `cry/${this.fusionSpecies?.getCryKey(this.fusionFormIndex)}`; let fusionCry = this.scene.playSound(fusionCryKey, { rate: rate }) as AnySound; fusionCry.stop(); duration = Math.min(duration, fusionCry.totalDuration * 1000); From 021f31b589d40e97c5ca422ce190a2945925b1fe Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Sun, 8 Sep 2024 16:03:37 -0700 Subject: [PATCH 08/37] [Hotfix] Retrieve the right cry when alternate-form Pokemon faint + retrieve the correct sprite key (#4117) * [DOCS] adding JSDocs to `arena.ts` (#3590) * adding some docs * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * seems like battleStats changed to statStages * Apply suggestions from code review editing doc text Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * Update tsdocs, convert comment to tsdoc in `pokemon.ts` --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * [Bug] Fix scrappy (+ some immunity move and ability) in inverse battle (#4067) * fix scrappy + etc. update inverse battle test code * update test code following request from swain * fix and optimize imports (#4061) - remove any `.js` extension imports - remove unncessary dynamic imports of `modifier.ts` file. The file was being imported statically & dynamically. Made it pure static - increase vite chunk-size warning limit Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> * Fusion hotfix * returned main * Faint cry properly retrieved for non fused Pokemon with forms * Revert "[DOCS] adding JSDocs to `arena.ts` (#3590)" This reverts commit b73fd97760bc7fbd7c35062d3763d30820ddbded. * Revert "[Bug] Fix scrappy (+ some immunity move and ability) in inverse battle (#4067)" This reverts commit 31fcbf49f49ee1106b25fe5d9737507b3e7615e8. * Revert "fix and optimize imports (#4061)" This reverts commit d1bd6974e435c9ddd2222194b8ef282a87b03047. * Fixed sprite key generation --------- Co-authored-by: DustinLin <39450497+DustinLin@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Co-authored-by: frutescens --- src/battle-scene.ts | 6 +++--- src/field/pokemon.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 8a4e98b25e8..12f424f63b3 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2763,8 +2763,8 @@ export default class BattleScene extends SceneBase { const keys: string[] = []; const playerParty = this.getParty(); playerParty.forEach(p => { - keys.push("pkmn__" + p.species.getSpriteId(p.gender === Gender.FEMALE, p.species.formIndex, p.shiny, p.variant)); - keys.push("pkmn__" + p.species.getSpriteId(p.gender === Gender.FEMALE, p.species.formIndex, p.shiny, p.variant, true)); + keys.push(p.getSpriteKey(true)); + keys.push(p.getBattleSpriteKey(true, true)); keys.push("cry/" + p.species.getCryKey(p.species.formIndex)); if (p.fusionSpecies && p.getSpeciesForm() !== p.getFusionSpeciesForm()) { keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); @@ -2773,7 +2773,7 @@ export default class BattleScene extends SceneBase { // enemyParty has to be operated on separately from playerParty because playerPokemon =/= enemyPokemon const enemyParty = this.getEnemyParty(); enemyParty.forEach(p => { - keys.push(p.species.getSpriteKey(p.gender === Gender.FEMALE, p.species.formIndex, p.shiny, p.variant)); + keys.push(p.getSpriteKey(true)); keys.push("cry/" + p.species.getCryKey(p.species.formIndex)); if (p.fusionSpecies && p.getSpeciesForm() !== p.getFusionSpeciesForm()) { keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 7d7fae064cf..91b57501371 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2771,7 +2771,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.fusionFaintCry(callback); } - const key = `cry/${this.getSpeciesForm().getCryKey(this.formIndex)}`; + const key = `cry/${this.species.getCryKey(this.formIndex)}`; //eslint-disable-next-line @typescript-eslint/no-unused-vars let i = 0; let rate = 0.85; From 93d6375894d78e3c63045034c0861ac59f564e76 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Mon, 9 Sep 2024 09:57:44 +1000 Subject: [PATCH 09/37] Updated all fields (except passwords) to allow for 20 characters (#4119) --- src/ui/form-modal-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 8c4ea5f6768..331154263ad 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -60,7 +60,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { const inputBg = addWindow(this.scene, 0, 0, 80, 16, false, false, 0, 0, WindowVariant.XTHIN); const isPassword = field.includes(i18next.t("menu:password")) || field.includes(i18next.t("menu:confirmPassword")); - const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 18 }); + const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 20 }); input.setOrigin(0, 0); inputContainer.add(inputBg); From 38cb10ff97a7e5404ec8be6e992f9ededfd066c0 Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Sun, 8 Sep 2024 21:50:00 -0400 Subject: [PATCH 10/37] [Hotfix] Fix System Data Conversion Failure (#4123) --- src/system/version-converter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/system/version-converter.ts b/src/system/version-converter.ts index ed65fcd99b8..0aa2b16b695 100644 --- a/src/system/version-converter.ts +++ b/src/system/version-converter.ts @@ -102,7 +102,7 @@ export function applySystemDataPatches(data: SystemSaveData) { // --- PATCHES --- // Fix Starter Data - if (data.gameVersion) { + if (data.starterData) { for (const starterId of defaultStarterSpecies) { data.starterData[starterId].abilityAttr |= AbilityAttr.ABILITY_1; data.dexData[starterId].caughtAttr |= DexAttr.FEMALE; From a30201f185df88bfffce1e419d0b40d9aac6023d Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Sun, 8 Sep 2024 19:12:37 -0700 Subject: [PATCH 11/37] [Hotfix] Retrieving the correct form index for correct cry keys (#4121) * [DOCS] adding JSDocs to `arena.ts` (#3590) * adding some docs * Update src/field/pokemon.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * seems like battleStats changed to statStages * Apply suggestions from code review editing doc text Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * Update tsdocs, convert comment to tsdoc in `pokemon.ts` --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * [Bug] Fix scrappy (+ some immunity move and ability) in inverse battle (#4067) * fix scrappy + etc. update inverse battle test code * update test code following request from swain * fix and optimize imports (#4061) - remove any `.js` extension imports - remove unncessary dynamic imports of `modifier.ts` file. The file was being imported statically & dynamically. Made it pure static - increase vite chunk-size warning limit Co-authored-by: Mumble <171087428+frutescens@users.noreply.github.com> * returned main * Fixed cry key * Revert "[DOCS] adding JSDocs to `arena.ts` (#3590)" This reverts commit 675e6a063590ad8b7f3c8c951cfeddc9a74db274. * Revert "[Bug] Fix scrappy (+ some immunity move and ability) in inverse battle (#4067)" This reverts commit 45af0dd170afd50e045bdbef4b05002b1f1e0fcf. * Revert "fix and optimize imports (#4061)" This reverts commit e12548cdb0d53f109c8c5d80b2e0dd2c22c2fc8b. --------- Co-authored-by: DustinLin <39450497+DustinLin@users.noreply.github.com> Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Co-authored-by: frutescens --- src/battle-scene.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 12f424f63b3..8e6f9afb34c 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2765,8 +2765,8 @@ export default class BattleScene extends SceneBase { playerParty.forEach(p => { keys.push(p.getSpriteKey(true)); keys.push(p.getBattleSpriteKey(true, true)); - keys.push("cry/" + p.species.getCryKey(p.species.formIndex)); - if (p.fusionSpecies && p.getSpeciesForm() !== p.getFusionSpeciesForm()) { + keys.push("cry/" + p.species.getCryKey(p.formIndex)); + if (p.fusionSpecies) { keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); } }); @@ -2774,8 +2774,8 @@ export default class BattleScene extends SceneBase { const enemyParty = this.getEnemyParty(); enemyParty.forEach(p => { keys.push(p.getSpriteKey(true)); - keys.push("cry/" + p.species.getCryKey(p.species.formIndex)); - if (p.fusionSpecies && p.getSpeciesForm() !== p.getFusionSpeciesForm()) { + keys.push("cry/" + p.species.getCryKey(p.formIndex)); + if (p.fusionSpecies) { keys.push("cry/"+p.fusionSpecies.getCryKey(p.fusionFormIndex)); } }); From 16fc3a87b7c550041cccf91855b7ee8d2cae98f8 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 9 Sep 2024 09:07:05 -0400 Subject: [PATCH 12/37] Fix usedTMs crash (#4132) --- src/field/pokemon.ts | 2 -- src/phases/learn-move-phase.ts | 6 ++++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 91b57501371..2f918eaca2f 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3524,7 +3524,6 @@ export default interface Pokemon { export class PlayerPokemon extends Pokemon { public compatibleTms: Moves[]; - public usedTms: Moves[]; constructor(scene: BattleScene, species: PokemonSpecies, level: integer, abilityIndex?: integer, formIndex?: integer, gender?: Gender, shiny?: boolean, variant?: Variant, ivs?: integer[], nature?: Nature, dataSource?: Pokemon | PokemonData) { super(scene, 106, 148, species, level, abilityIndex, formIndex, gender, shiny, variant, ivs, nature, dataSource); @@ -3548,7 +3547,6 @@ export class PlayerPokemon extends Pokemon { } } this.generateCompatibleTms(); - this.usedTms = []; } initBattleInfo(): void { diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 201019e8860..26088f5b835 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -44,6 +44,9 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { if (emptyMoveIndex > -1) { pokemon.setMove(emptyMoveIndex, this.moveId); if (this.fromTM) { + if (!pokemon.usedTMs) { + pokemon.usedTMs = []; + } pokemon.usedTMs.push(this.moveId); } initMoveAnim(this.scene, this.moveId).then(() => { @@ -91,6 +94,9 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { this.scene.ui.showText(i18next.t("battle:learnMoveForgetSuccess", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: pokemon.moveset[moveIndex]!.getName() }), null, () => { // TODO: is the bang correct? this.scene.ui.showText(i18next.t("battle:learnMoveAnd"), null, () => { if (this.fromTM) { + if (!pokemon.usedTMs) { + pokemon.usedTMs = []; + } pokemon.usedTMs.push(this.moveId); } pokemon.setMove(moveIndex, Moves.NONE); From ebb09dda34f0d5a369939684c36665332404baf5 Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Tue, 10 Sep 2024 05:37:23 -0400 Subject: [PATCH 13/37] [Hotfix] Fix Lures Refreshing on Reload (#4146) --- src/system/version-converter.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/system/version-converter.ts b/src/system/version-converter.ts index 0aa2b16b695..d54238812c8 100644 --- a/src/system/version-converter.ts +++ b/src/system/version-converter.ts @@ -31,7 +31,7 @@ export function applySessionDataPatches(data: SessionSaveData) { // From [ stat, battlesLeft ] to [ stat, maxBattles, battleCount ] m.args = [ newStat, 5, m.args[1] ]; - } else if (m.className === "DoubleBattleChanceBoosterModifier") { + } else if (m.className === "DoubleBattleChanceBoosterModifier" && m.args.length === 1) { let maxBattles: number; switch (m.typeId) { case "MAX_LURE": @@ -53,6 +53,8 @@ export function applySessionDataPatches(data: SessionSaveData) { data.enemyModifiers.forEach((m) => { if (m.className === "PokemonBaseStatModifier") { m.className = "BaseStatModifier"; + } else if (m.className === "PokemonResetNegativeStatStageModifier") { + m.className = "ResetNegativeStatStageModifier"; } }); } From 7dd18320729ff94f84e682e5a1c73d6d6238334d Mon Sep 17 00:00:00 2001 From: James Diefenbach <105332964+j-diefenbach@users.noreply.github.com> Date: Tue, 10 Sep 2024 23:23:13 +1000 Subject: [PATCH 14/37] [Hotfix] fix UI transition causing unusual freezes after egg summary shown (#4126) * console logs n stuff * fix bad ui transition for egg summary freeze bug (logs included) * cleanup egg lapse phase * touchup * add back removed whitespace * remove console logs --------- Co-authored-by: James Diefenbach --- src/phases/egg-summary-phase.ts | 6 +++--- src/ui/egg-summary-ui-handler.ts | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/phases/egg-summary-phase.ts b/src/phases/egg-summary-phase.ts index 1aa432829a1..75c6939daf1 100644 --- a/src/phases/egg-summary-phase.ts +++ b/src/phases/egg-summary-phase.ts @@ -43,9 +43,9 @@ export class EggSummaryPhase extends Phase { } end() { - this.eggHatchHandler.clear(); - this.scene.ui.setModeForceTransition(Mode.MESSAGE).then(() => {}); this.scene.time.delayedCall(250, () => this.scene.setModifiersVisible(true)); - super.end(); + this.scene.ui.setModeForceTransition(Mode.MESSAGE).then(() => { + super.end(); + }); } } diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index af82ab33438..52516196093 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -97,6 +97,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.pokemonIconsContainer.removeAll(true); this.eggHatchBg.setVisible(false); this.getUi().hideTooltip(); + // Note: Questions on garbage collection go to @frutescens const activeKeys = this.scene.getActiveKeys(); // Removing unnecessary sprites from animation manager @@ -117,7 +118,6 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.eggHatchData.length = 0; // Removes Pokemon icons in EggSummaryUiHandler this.iconAnimHandler.removeAll(); - console.log("Egg Summary Handler cleared"); } /** @@ -256,7 +256,6 @@ export default class EggSummaryUiHandler extends MessageUiHandler { if (phase instanceof EggSummaryPhase) { phase.end(); } - ui.revertMode(); success = true; } else { const count = this.eggHatchData.length; From 9c4c19b5fb1870911e420f692644374ed1c6fe97 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Tue, 10 Sep 2024 16:12:17 +0200 Subject: [PATCH 15/37] [UI Bug] Fix HA icon not always showing in egg summary screen (#4150) --- src/ui/egg-summary-ui-handler.ts | 104 +++++++++++++++++-------------- src/ui/pokemon-info-container.ts | 2 +- 2 files changed, 57 insertions(+), 49 deletions(-) diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts index af82ab33438..1d18e75f530 100644 --- a/src/ui/egg-summary-ui-handler.ts +++ b/src/ui/egg-summary-ui-handler.ts @@ -29,8 +29,10 @@ export default class EggSummaryUiHandler extends MessageUiHandler { private summaryContainer: Phaser.GameObjects.Container; /** container for the mini pokemon sprites */ private pokemonIconSpritesContainer: Phaser.GameObjects.Container; - /** container for the icons displayed alongside the mini icons (e.g. shiny, HA capsule) */ + /** container for the icons displayed on top of the mini pokemon sprites (e.g. shiny, HA capsule) */ private pokemonIconsContainer: Phaser.GameObjects.Container; + /** container for the elements displayed behind the mini pokemon sprites (e.g. egg rarity bg) */ + private pokemonBackgroundContainer: Phaser.GameObjects.Container; /** hatch info container that displays the current pokemon / hatch (main element on left hand side) */ private infoContainer: PokemonHatchInfoContainer; /** handles jumping animations for the pokemon sprite icons */ @@ -71,15 +73,17 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.eggHatchBg.setOrigin(0, 0); this.eggHatchContainer.add(this.eggHatchBg); - this.pokemonIconsContainer = this.scene.add.container(iconContainerX, iconContainerY); - this.pokemonIconSpritesContainer = this.scene.add.container(iconContainerX, iconContainerY); - this.summaryContainer.add(this.pokemonIconsContainer); - this.summaryContainer.add(this.pokemonIconSpritesContainer); - this.cursorObj = this.scene.add.image(0, 0, "select_cursor"); this.cursorObj.setOrigin(0, 0); this.summaryContainer.add(this.cursorObj); + this.pokemonIconSpritesContainer = this.scene.add.container(iconContainerX, iconContainerY); + this.pokemonIconsContainer = this.scene.add.container(iconContainerX, iconContainerY); + this.pokemonBackgroundContainer = this.scene.add.container(iconContainerX, iconContainerY); + this.summaryContainer.add(this.pokemonBackgroundContainer); + this.summaryContainer.add(this.pokemonIconSpritesContainer); + this.summaryContainer.add(this.pokemonIconsContainer); + this.infoContainer = new PokemonHatchInfoContainer(this.scene, this.summaryContainer); this.infoContainer.setup(); this.infoContainer.changeToEggSummaryLayout(); @@ -95,6 +99,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler { this.summaryContainer.setVisible(false); this.pokemonIconSpritesContainer.removeAll(true); this.pokemonIconsContainer.removeAll(true); + this.pokemonBackgroundContainer.removeAll(true); this.eggHatchBg.setVisible(false); this.getUi().hideTooltip(); // Note: Questions on garbage collection go to @frutescens @@ -164,25 +169,25 @@ export default class EggSummaryUiHandler extends MessageUiHandler { const offset = 2; const rightSideX = 12; - const bg = this.scene.add.image(x+2, y+5, "passive_bg"); - bg.setOrigin(0, 0); - bg.setScale(0.75); - bg.setVisible(true); - this.pokemonIconsContainer.add(bg); + const rarityBg = this.scene.add.image(x + 2, y + 5, "passive_bg"); + rarityBg.setOrigin(0, 0); + rarityBg.setScale(0.75); + rarityBg.setVisible(true); + this.pokemonBackgroundContainer.add(rarityBg); // set tint for passive bg switch (getEggTierForSpecies(displayPokemon.species)) { case EggTier.COMMON: - bg.setVisible(false); + rarityBg.setVisible(false); break; case EggTier.GREAT: - bg.setTint(0xabafff); + rarityBg.setTint(0xabafff); break; case EggTier.ULTRA: - bg.setTint(0xffffaa); + rarityBg.setTint(0xffffaa); break; case EggTier.MASTER: - bg.setTint(0xdfffaf); + rarityBg.setTint(0xdfffaf); break; } const species = displayPokemon.species; @@ -192,35 +197,31 @@ export default class EggSummaryUiHandler extends MessageUiHandler { const isShiny = displayPokemon.shiny; // set pokemon icon (and replace with base sprite if there is a mismatch) - const icon = this.scene.add.sprite(x - offset, y + offset, species.getIconAtlasKey(formIndex, isShiny, variant)); - icon.setScale(0.5); - icon.setOrigin(0, 0); - icon.setFrame(species.getIconId(female, formIndex, isShiny, variant)); + const pokemonIcon = this.scene.add.sprite(x - offset, y + offset, species.getIconAtlasKey(formIndex, isShiny, variant)); + pokemonIcon.setScale(0.5); + pokemonIcon.setOrigin(0, 0); + pokemonIcon.setFrame(species.getIconId(female, formIndex, isShiny, variant)); - if (icon.frame.name !== species.getIconId(female, formIndex, isShiny, variant)) { + if (pokemonIcon.frame.name !== species.getIconId(female, formIndex, isShiny, variant)) { console.log(`${species.name}'s variant icon does not exist. Replacing with default.`); - icon.setTexture(species.getIconAtlasKey(formIndex, false, variant)); - icon.setFrame(species.getIconId(female, formIndex, false, variant)); + pokemonIcon.setTexture(species.getIconAtlasKey(formIndex, false, variant)); + pokemonIcon.setFrame(species.getIconId(female, formIndex, false, variant)); } - this.pokemonIconSpritesContainer.add(icon); - this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); + this.pokemonIconSpritesContainer.add(pokemonIcon); - const shiny = this.scene.add.image(x + rightSideX, y + offset * 2, "shiny_star_small"); - shiny.setScale(0.5); - shiny.setVisible(displayPokemon.shiny); - shiny.setTint(getVariantTint(displayPokemon.variant)); - this.pokemonIconsContainer.add(shiny); + const shinyIcon = this.scene.add.image(x + rightSideX, y + offset, "shiny_star_small"); + shinyIcon.setOrigin(0, 0); + shinyIcon.setScale(0.5); + shinyIcon.setVisible(displayPokemon.shiny); + shinyIcon.setTint(getVariantTint(displayPokemon.variant)); + this.pokemonIconsContainer.add(shinyIcon); - const ha = this.scene.add.image(x + rightSideX, y + 7, "ha_capsule"); - ha.setScale(0.5); - ha.setVisible((displayPokemon.hasAbility(displayPokemon.species.abilityHidden))); - this.pokemonIconsContainer.add(ha); + const haIcon = this.scene.add.image(x + rightSideX, y + offset * 4, "ha_capsule"); + haIcon.setOrigin(0, 0); + haIcon.setScale(0.5); + haIcon.setVisible(displayPokemon.abilityIndex === 2); + this.pokemonIconsContainer.add(haIcon); - const pb = this.scene.add.image(x + rightSideX, y + offset * 7, "icon_owned"); - pb.setOrigin(0, 0); - pb.setScale(0.5); - - // add animation for new unlocks (new catch or new shiny or new form) const dexEntry = value.dexEntryBeforeUpdate; const caughtAttr = dexEntry.caughtAttr; const newShiny = BigInt(1 << (displayPokemon.shiny ? 1 : 0)); @@ -228,17 +229,24 @@ export default class EggSummaryUiHandler extends MessageUiHandler { const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0)); const newForm = (BigInt(1 << displayPokemon.formIndex) * DexAttr.DEFAULT_FORM & caughtAttr) === BigInt(0); - pb.setVisible(!caughtAttr || newForm); - if (!caughtAttr || newShinyOrVariant || newForm) { - this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE); - } - this.pokemonIconsContainer.add(pb); + const pokeballIcon = this.scene.add.image(x + rightSideX, y + offset * 7, "icon_owned"); + pokeballIcon.setOrigin(0, 0); + pokeballIcon.setScale(0.5); + pokeballIcon.setVisible(!caughtAttr || newForm); + this.pokemonIconsContainer.add(pokeballIcon); - const em = this.scene.add.image(x, y + offset, "icon_egg_move"); - em.setOrigin(0, 0); - em.setScale(0.5); - em.setVisible(value.eggMoveUnlocked); - this.pokemonIconsContainer.add(em); + const eggMoveIcon = this.scene.add.image(x, y + offset, "icon_egg_move"); + eggMoveIcon.setOrigin(0, 0); + eggMoveIcon.setScale(0.5); + eggMoveIcon.setVisible(value.eggMoveUnlocked); + this.pokemonIconsContainer.add(eggMoveIcon); + + // add animation to the Pokemon sprite for new unlocks (new catch, new shiny or new form) + if (!caughtAttr || newShinyOrVariant || newForm) { + this.iconAnimHandler.addOrUpdate(pokemonIcon, PokemonIconAnimMode.PASSIVE); + } else { + this.iconAnimHandler.addOrUpdate(pokemonIcon, PokemonIconAnimMode.NONE); + } }); this.setCursor(0); diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 49bfd4d7293..3c54e529d43 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -262,7 +262,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonFormText.disableInteractive(); } - const abilityTextStyle = pokemon.abilityIndex === (pokemon.species.ability2 ? 2 : 1) ? TextStyle.MONEY : TextStyle.WINDOW; + const abilityTextStyle = pokemon.abilityIndex === 2 ? TextStyle.MONEY : TextStyle.WINDOW; this.pokemonAbilityText.setText(pokemon.getAbility(true).name); this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false, this.scene.uiTheme)); this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true, this.scene.uiTheme)); From 4b8083211ab114c94d7f194494a168bf353647b1 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Tue, 10 Sep 2024 09:13:16 -0500 Subject: [PATCH 16/37] [P3 Bug] Fix Transform SFX not playing on quiet form changes (#4144) --- src/phases/quiet-form-change-phase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts index 6a1d31d137d..dde500e156a 100644 --- a/src/phases/quiet-form-change-phase.ts +++ b/src/phases/quiet-form-change-phase.ts @@ -65,7 +65,7 @@ export class QuietFormChangePhase extends BattlePhase { pokemonFormTintSprite.setVisible(false); pokemonFormTintSprite.setTintFill(0xFFFFFF); - this.scene.playSound("PRSFX- Transform"); + this.scene.playSound("battle_anims/PRSFX- Transform"); this.scene.tweens.add({ targets: pokemonTintSprite, From 5bf21a4f7519d2a8850e6ea5b4c7e12b9d89909d Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Tue, 10 Sep 2024 10:15:07 -0400 Subject: [PATCH 17/37] [Bug] Fix rare egg move and species rates for Manaphy eggs (#4125) --- src/data/egg.ts | 12 ++- src/test/eggs/manaphy-egg.test.ts | 118 ++++++++++++++++++++++++++++++ 2 files changed, 127 insertions(+), 3 deletions(-) create mode 100644 src/test/eggs/manaphy-egg.test.ts diff --git a/src/data/egg.ts b/src/data/egg.ts index ce27030ebef..1cd5c65fc18 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -222,7 +222,7 @@ export class Egg { let pokemonSpecies = getPokemonSpecies(this._species); // Special condition to have Phione eggs also have a chance of generating Manaphy - if (this._species === Species.PHIONE) { + if (this._species === Species.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) { pokemonSpecies = getPokemonSpecies(Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY); } @@ -326,7 +326,8 @@ export class Egg { break; } - return Utils.randSeedInt(baseChance * Math.pow(2, 3 - this.tier)) ? Utils.randSeedInt(3) : 3; + const tierMultiplier = this.isManaphyEgg() ? 2 : Math.pow(2, 3 - this.tier); + return Utils.randSeedInt(baseChance * tierMultiplier) ? Utils.randSeedInt(3) : 3; } private getEggTierDefaultHatchWaves(eggTier?: EggTier): number { @@ -361,7 +362,12 @@ export class Egg { * the species that was the legendary focus at the time */ if (this.isManaphyEgg()) { - const rand = Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE); + /** + * Adding a technicality to make unit tests easier: By making this check pass + * when Utils.randSeedInt(8) = 1, and by making the generatePlayerPokemon() species + * check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests. + */ + const rand = (Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1); return rand ? Species.PHIONE : Species.MANAPHY; } else if (this.tier === EggTier.MASTER && this._sourceType === EggSourceType.GACHA_LEGENDARY) { diff --git a/src/test/eggs/manaphy-egg.test.ts b/src/test/eggs/manaphy-egg.test.ts new file mode 100644 index 00000000000..257bf330bb8 --- /dev/null +++ b/src/test/eggs/manaphy-egg.test.ts @@ -0,0 +1,118 @@ +import { Egg } from "#app/data/egg"; +import { EggSourceType } from "#app/enums/egg-source-types"; +import { EggTier } from "#app/enums/egg-type"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Manaphy Eggs", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const EGG_HATCH_COUNT: integer = 48; + let rngSweepProgress: number = 0; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + game = new GameManager(phaserGame); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + vi.restoreAllMocks(); + }); + + beforeEach(async () => { + await game.importData("src/test/utils/saves/everything.prsv"); + + /** + * In our tests, we will perform an "RNG sweep" by letting rngSweepProgress + * increase uniformly from 0 to 1 in order to get a uniform sample of the + * possible RNG outcomes. This will let us quickly and consistently find + * the probability of each RNG outcome. + */ + vi.spyOn(Phaser.Math.RND, "realInRange").mockImplementation((min: number, max: number) => { + return rngSweepProgress * (max - min) + min; + }); + }); + + it("should have correct Manaphy rates and Rare Egg Move rates, from the egg gacha", () => { + const scene = game.scene; + + let manaphyCount = 0; + let phioneCount = 0; + let rareEggMoveCount = 0; + for (let i = 0; i < EGG_HATCH_COUNT; i++) { + rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT); + + const newEgg = new Egg({ scene, tier: EggTier.COMMON, sourceType: EggSourceType.GACHA_SHINY, id: 204 }); + const newHatch = newEgg.generatePlayerPokemon(scene); + if (newHatch.species.speciesId === Species.MANAPHY) { + manaphyCount++; + } else if (newHatch.species.speciesId === Species.PHIONE) { + phioneCount++; + } + if (newEgg.eggMoveIndex === 3) { + rareEggMoveCount++; + } + } + + expect(manaphyCount + phioneCount).toBe(EGG_HATCH_COUNT); + expect(manaphyCount).toBe(1/8 * EGG_HATCH_COUNT); + expect(rareEggMoveCount).toBe(1/12 * EGG_HATCH_COUNT); + }); + + it("should have correct Manaphy rates and Rare Egg Move rates, from Phione species eggs", () => { + const scene = game.scene; + + let manaphyCount = 0; + let phioneCount = 0; + let rareEggMoveCount = 0; + for (let i = 0; i < EGG_HATCH_COUNT; i++) { + rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT); + + const newEgg = new Egg({ scene, species: Species.PHIONE, sourceType: EggSourceType.SAME_SPECIES_EGG }); + const newHatch = newEgg.generatePlayerPokemon(scene); + if (newHatch.species.speciesId === Species.MANAPHY) { + manaphyCount++; + } else if (newHatch.species.speciesId === Species.PHIONE) { + phioneCount++; + } + if (newEgg.eggMoveIndex === 3) { + rareEggMoveCount++; + } + } + + expect(manaphyCount + phioneCount).toBe(EGG_HATCH_COUNT); + expect(manaphyCount).toBe(1/8 * EGG_HATCH_COUNT); + expect(rareEggMoveCount).toBe(1/6 * EGG_HATCH_COUNT); + }); + + it("should have correct Manaphy rates and Rare Egg Move rates, from Manaphy species eggs", () => { + const scene = game.scene; + + let manaphyCount = 0; + let phioneCount = 0; + let rareEggMoveCount = 0; + for (let i = 0; i < EGG_HATCH_COUNT; i++) { + rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT); + + const newEgg = new Egg({ scene, species: Species.MANAPHY, sourceType: EggSourceType.SAME_SPECIES_EGG }); + const newHatch = newEgg.generatePlayerPokemon(scene); + if (newHatch.species.speciesId === Species.MANAPHY) { + manaphyCount++; + } else if (newHatch.species.speciesId === Species.PHIONE) { + phioneCount++; + } + if (newEgg.eggMoveIndex === 3) { + rareEggMoveCount++; + } + } + + expect(phioneCount).toBe(0); + expect(manaphyCount).toBe(EGG_HATCH_COUNT); + expect(rareEggMoveCount).toBe(1/6 * EGG_HATCH_COUNT); + }); +}); From bd4729b4c5f9c38addfadf662f002572b95b9fa9 Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Tue, 10 Sep 2024 11:53:40 -0400 Subject: [PATCH 18/37] [Hotfix] Fix Lapsing Modifiers Not Rolling (#4152) --- src/modifier/modifier.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index c1d58a7bf39..1cd8ddf57d0 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -367,6 +367,10 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { return container; } + getIconStackText(_scene: BattleScene, _virtual?: boolean): Phaser.GameObjects.BitmapText | null { + return null; + } + getBattleCount(): number { return this.battleCount; } @@ -384,7 +388,8 @@ export abstract class LapsingPersistentModifier extends PersistentModifier { } getMaxStackCount(_scene: BattleScene, _forThreshold?: boolean): number { - return 1; + // Must be an abitrary number greater than 1 + return 2; } } @@ -787,7 +792,7 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { /** * Modifier used for held items, specifically vitamins like Carbos, Hp Up, etc., that * increase the value of a given {@linkcode PermanentStat}. - * @extends LapsingPersistentModifier + * @extends PokemonHeldItemModifier * @see {@linkcode apply} */ export class BaseStatModifier extends PokemonHeldItemModifier { From 150ab3d1b29a7191bfef6d2107e3ffe43a38aa54 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 10 Sep 2024 11:54:23 -0400 Subject: [PATCH 19/37] [UI/UX] Make "CH-CHING!" sound when unlocking passive (#4151) * Make "CH-CHING!" sound when unlocking passive * Remove unused parameters in line above sound --- src/ui/starter-select-ui-handler.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index e1269499b10..89f1b87bcf4 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1724,7 +1724,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); ui.setMode(Mode.STARTER_SELECT); - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, undefined); + this.setSpeciesDetails(this.lastSpecies); + this.scene.playSound("se/buy"); // if starterContainer exists, update the passive background if (starterContainer) { From d1b058fe3e4224343283a74e44d98589d6702a20 Mon Sep 17 00:00:00 2001 From: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> Date: Tue, 10 Sep 2024 20:00:50 +0200 Subject: [PATCH 20/37] [UI] fix candy upgrade icon not updating after purchasing eggs (#4153) --- src/ui/starter-select-ui-handler.ts | 53 +++++++++++++++++------------ 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 89f1b87bcf4..0c3d8de61b0 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1220,6 +1220,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } } + /** + * Update the display of candy upgrade icons or animations for the given StarterContainer + * @param starterContainer the container for the Pokemon to update + */ + updateCandyUpgradeDisplay(starterContainer: StarterContainer) { + if (this.isUpgradeIconEnabled() ) { + this.setUpgradeIcon(starterContainer); + } + if (this.isUpgradeAnimationEnabled()) { + this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true); + } + } + /** * Processes an {@linkcode CandyUpgradeNotificationChangedEvent} sent when the corresponding setting changes * @param event {@linkcode Event} sent by the callback @@ -1624,7 +1637,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } }); } - const candyCount = starterData.candyCount; + const passiveAttr = starterData.passiveAttr; if (passiveAttr & PassiveAttr.UNLOCKED) { // this is for enabling and disabling the passive if (!(passiveAttr & PassiveAttr.ENABLED)) { @@ -1705,8 +1718,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { return true; } }); - const showUseCandies = () => { // this lets you use your candies + + // Purchases with Candy + const candyCount = starterData.candyCount; + const showUseCandies = () => { const options: any[] = []; // TODO: add proper type + + // Unlock passive option if (!(passiveAttr & PassiveAttr.UNLOCKED)) { const passiveCost = getPassiveCandyCount(speciesStarters[this.lastSpecies.speciesId]); options.push({ @@ -1727,16 +1745,9 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.setSpeciesDetails(this.lastSpecies); this.scene.playSound("se/buy"); - // if starterContainer exists, update the passive background + // update the passive background and icon/animation for available upgrade if (starterContainer) { - // Update the candy upgrade display - if (this.isUpgradeIconEnabled() ) { - this.setUpgradeIcon(starterContainer); - } - if (this.isUpgradeAnimationEnabled()) { - this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true); - } - + this.updateCandyUpgradeDisplay(starterContainer); starterContainer.starterPassiveBgs.setVisible(!!this.scene.gameData.starterData[this.lastSpecies.speciesId].passiveAttr); } return true; @@ -1747,6 +1758,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler { itemArgs: starterColors[this.lastSpecies.speciesId] }); } + + // Reduce cost option const valueReduction = starterData.valueReduction; if (valueReduction < valueReductionMax) { const reductionCost = getValueReductionCandyCounts(speciesStarters[this.lastSpecies.speciesId])[valueReduction]; @@ -1768,19 +1781,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.setMode(Mode.STARTER_SELECT); this.scene.playSound("se/buy"); - // if starterContainer exists, update the value reduction background + // update the value label and icon/animation for available upgrade if (starterContainer) { this.updateStarterValueLabel(starterContainer); - - // If the notification setting is set to 'On', update the candy upgrade display - if (this.scene.candyUpgradeNotification === 2) { - if (this.isUpgradeIconEnabled() ) { - this.setUpgradeIcon(starterContainer); - } - if (this.isUpgradeAnimationEnabled()) { - this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true); - } - } + this.updateCandyUpgradeDisplay(starterContainer); } return true; } @@ -1813,6 +1817,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ui.setMode(Mode.STARTER_SELECT); this.scene.playSound("se/buy"); + // update the icon/animation for available upgrade + if (starterContainer) { + this.updateCandyUpgradeDisplay(starterContainer); + } + return true; } return false; From 14ace406344b02151ad7e1bdedcc3c77a599d04d Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Tue, 10 Sep 2024 13:34:50 -0700 Subject: [PATCH 21/37] [Misc] eslint rule to prevent `.js` imports (#4160) * add `eslint-plugin-import-x` module * add import eslint rules * remove .js extensions * rename account.spec to account.test * move fontFace.setup into `setupFiles` instead of importing it in `vitest.setup.ts` --- eslint.config.js | 7 +- package-lock.json | 200 ++++++++++++++++++ package.json | 1 + src/phases/weather-effect-phase.ts | 2 +- src/system/version-converter.ts | 2 +- src/test/{account.spec.ts => account.test.ts} | 0 .../double_battle_chance_booster.test.ts | 12 +- src/test/vitest.setup.ts | 1 - vitest.config.ts | 2 +- 9 files changed, 214 insertions(+), 13 deletions(-) rename src/test/{account.spec.ts => account.test.ts} (100%) diff --git a/eslint.config.js b/eslint.config.js index eeea38e3178..80e9e67b525 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,7 +1,7 @@ import tseslint from '@typescript-eslint/eslint-plugin'; import stylisticTs from '@stylistic/eslint-plugin-ts' import parser from '@typescript-eslint/parser'; -// import imports from 'eslint-plugin-import'; // Disabled due to not being compatible with eslint v9 +import importX from 'eslint-plugin-import-x'; export default [ { @@ -11,7 +11,7 @@ export default [ parser: parser }, plugins: { - // imports: imports.configs.recommended // Disabled due to not being compatible with eslint v9 + "import-x": importX, '@stylistic/ts': stylisticTs, '@typescript-eslint': tseslint }, @@ -39,7 +39,8 @@ export default [ }], "space-before-blocks": ["error", "always"], // Enforces a space before blocks "keyword-spacing": ["error", { "before": true, "after": true }], // Enforces spacing before and after keywords - "comma-spacing": ["error", { "before": false, "after": true }] // Enforces spacing after comma + "comma-spacing": ["error", { "before": false, "after": true }], // Enforces spacing after comma + "import-x/extensions": ["error", "never", { "json": "always" }], // Enforces no extension for imports unless json } } ] diff --git a/package-lock.json b/package-lock.json index 0605b299dab..4a447554819 100644 --- a/package-lock.json +++ b/package-lock.json @@ -28,6 +28,7 @@ "@vitest/coverage-istanbul": "^2.0.4", "dependency-cruiser": "^16.3.10", "eslint": "^9.7.0", + "eslint-plugin-import-x": "^4.2.1", "jsdom": "^24.0.0", "lefthook": "^1.6.12", "phaser3spectorjs": "^0.0.8", @@ -2505,6 +2506,19 @@ "node": ">=8" } }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -2687,6 +2701,155 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import-x": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.2.1.tgz", + "integrity": "sha512-WWi2GedccIJa0zXxx3WDnTgouGQTtdYK1nhXMwywbqqAgB0Ov+p1pYBsWh3VaB0bvBOwLse6OfVII7jZD9xo5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.1.0", + "debug": "^4.3.4", + "doctrine": "^3.0.0", + "eslint-import-resolver-node": "^0.3.9", + "get-tsconfig": "^4.7.3", + "is-glob": "^4.0.3", + "minimatch": "^9.0.3", + "semver": "^7.6.3", + "stable-hash": "^0.0.4", + "tslib": "^2.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/scope-manager": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", + "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/types": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", + "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", + "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/visitor-keys": "8.5.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/utils": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", + "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.5.0", + "@typescript-eslint/types": "8.5.0", + "@typescript-eslint/typescript-estree": "8.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", + "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.5.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, "node_modules/eslint-scope": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", @@ -3143,6 +3306,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz", + "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -4854,6 +5030,16 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -5069,6 +5255,13 @@ "node": ">=0.10.0" } }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, + "license": "MIT" + }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -5460,6 +5653,13 @@ "node": ">=6" } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "dev": true, + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 83e82585d1e..dddf5aedebd 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@vitest/coverage-istanbul": "^2.0.4", "dependency-cruiser": "^16.3.10", "eslint": "^9.7.0", + "eslint-plugin-import-x": "^4.2.1", "jsdom": "^24.0.0", "lefthook": "^1.6.12", "phaser3spectorjs": "^0.0.8", diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index e85ef0326f6..73de44389d0 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -1,5 +1,5 @@ import BattleScene from "#app/battle-scene"; -import { applyPreWeatherEffectAbAttrs, SuppressWeatherEffectAbAttr, PreWeatherDamageAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr } from "#app/data/ability.js"; +import { applyPreWeatherEffectAbAttrs, SuppressWeatherEffectAbAttr, PreWeatherDamageAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { Weather, getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather"; import { BattlerTagType } from "#app/enums/battler-tag-type"; diff --git a/src/system/version-converter.ts b/src/system/version-converter.ts index ed65fcd99b8..1a7c7b2026a 100644 --- a/src/system/version-converter.ts +++ b/src/system/version-converter.ts @@ -1,4 +1,4 @@ -import { allSpecies } from "#app/data/pokemon-species.js"; +import { allSpecies } from "#app/data/pokemon-species"; import { AbilityAttr, defaultStarterSpecies, DexAttr, SessionSaveData, SystemSaveData } from "./game-data"; import { SettingKeys } from "./settings/settings"; diff --git a/src/test/account.spec.ts b/src/test/account.test.ts similarity index 100% rename from src/test/account.spec.ts rename to src/test/account.test.ts diff --git a/src/test/items/double_battle_chance_booster.test.ts b/src/test/items/double_battle_chance_booster.test.ts index f581af7afc5..1d5051fa9e9 100644 --- a/src/test/items/double_battle_chance_booster.test.ts +++ b/src/test/items/double_battle_chance_booster.test.ts @@ -1,13 +1,13 @@ -import { Moves } from "#app/enums/moves.js"; -import { Species } from "#app/enums/species.js"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; import { DoubleBattleChanceBoosterModifier } from "#app/modifier/modifier"; import GameManager from "#test/utils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; -import { ShopCursorTarget } from "#app/enums/shop-cursor-target.js"; -import { Mode } from "#app/ui/ui.js"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler.js"; -import { Button } from "#app/enums/buttons.js"; +import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; +import { Mode } from "#app/ui/ui"; +import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import { Button } from "#app/enums/buttons"; describe("Items - Double Battle Chance Boosters", () => { let phaserGame: Phaser.Game; diff --git a/src/test/vitest.setup.ts b/src/test/vitest.setup.ts index eaa987c1a66..bf806cd053a 100644 --- a/src/test/vitest.setup.ts +++ b/src/test/vitest.setup.ts @@ -1,4 +1,3 @@ -import "#test/fontFace.setup"; import "vitest-canvas-mock"; import { initLoggedInUser } from "#app/account"; diff --git a/vitest.config.ts b/vitest.config.ts index 9a765a89ae7..bfa380ec5fa 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -2,7 +2,7 @@ import { defineProject, UserWorkspaceConfig } from 'vitest/config'; import { defaultConfig } from './vite.config'; export const defaultProjectTestConfig: UserWorkspaceConfig["test"] = { - setupFiles: ['./src/test/vitest.setup.ts'], + setupFiles: ['./src/test/fontFace.setup.ts', './src/test/vitest.setup.ts'], server: { deps: { inline: ['vitest-canvas-mock'], From e17bf592c22a7e53d7a06e6e891d975dc0962ffe Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Tue, 10 Sep 2024 14:13:42 -0700 Subject: [PATCH 22/37] [Bug] Use silent mode during tests (unless debugging!) + test workflow optimization (#4154) * add :silent to all tests but disable it if the runner is in debug mode! * fix: use `--silent` instead of `:silent` Cause the previous was npm scrpt specific (whops) * remove env and replace with logic in each call * reduce redundancy by checking out once * move pre-test into `needs` after `checkout` * use cache approach in pre-test * add node.js install step to `setup` job * WIP: setup -> pre-test -> all other tests with using cache * use matrix approach for tests * fix matrix approach for tests * fix wrong use of env var in `run-test-template.yml` * test: out-comment `run-tests` to see whats wrong * test: see if this works * let's try using matrix again... * make `node-version` input a string * remove `node-version` input for now * test: without a matrix fornow * change usage of reuseable workflow call * fix call of matrix.project * try using working-dir * try setup for pre-tests * remove `runs-on` from run-tests * fix some identations for run-tests * add pre-test as requirement for running tests * use `1` instead of `'1'` to check `runner.debug` * add `options` input. Possible fix for debug = not silent * try again... * not as an ENV but inside * move 2nd ${{ !runner.debug && '--silent' }} check into test-template * fix printing `false` instead of empty-string on runner-debug check * try a yml array approach * test running with file include path * make `project` always `main` for now * remove all extra vitest workspaces * adopt `shards` workflow in vitest * fix workflow reference in tests.yml * add missing `$` in test-shard-template.yml` * chore: fix vitest.config.ts after merge man.. cant trust these machines * make `project` a variable. try to use inputs on job names * adjust `test-shard-template` job name --- .github/workflows/test-shard-template.yml | 30 +++++++ .github/workflows/tests.yml | 98 +++++------------------ vitest.config.ts | 84 +++++++++---------- vitest.workspace.ts | 54 ------------- 4 files changed, 90 insertions(+), 176 deletions(-) create mode 100644 .github/workflows/test-shard-template.yml diff --git a/.github/workflows/test-shard-template.yml b/.github/workflows/test-shard-template.yml new file mode 100644 index 00000000000..ac89b503f0c --- /dev/null +++ b/.github/workflows/test-shard-template.yml @@ -0,0 +1,30 @@ +name: Test Template + +on: + workflow_call: + inputs: + project: + required: true + type: string + shard: + required: true + type: number + totalShards: + required: true + type: number + +jobs: + test: + name: Shard ${{ inputs.shard }} of ${{ inputs.totalShards }} + runs-on: ubuntu-latest + steps: + - name: Check out Git repository + uses: actions/checkout@v4 + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install Node.js dependencies + run: npm ci + - name: Run tests + run: npx vitest --project ${{ inputs.project }} --shard=${{ inputs.shard }}/${{ inputs.totalShards }} ${{ !runner.debug && '--silent' || '' }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 2a78ec252b8..66cc3ecc139 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -15,91 +15,33 @@ on: types: [checks_requested] jobs: - run-misc-tests: # Define a job named "run-tests" - name: Run misc tests # Human-readable name for the job - runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job - - steps: - - name: Check out Git repository # Step to check out the repository - uses: actions/checkout@v4 # Use the checkout action version 4 - - - name: Set up Node.js # Step to set up Node.js environment - uses: actions/setup-node@v4 # Use the setup-node action version 4 - with: - node-version: 20 # Specify Node.js version 20 - - - name: Install Node.js dependencies # Step to install Node.js dependencies - run: npm ci # Use 'npm ci' to install dependencies - - - name: pre-test # pre-test to check overrides - run: npx vitest run --project pre - - name: test misc - run: npx vitest --project misc - - run-abilities-tests: - name: Run abilities tests - runs-on: ubuntu-latest + pre-test: + name: Run Pre-test + runs-on: ubuntu-latest steps: - name: Check out Git repository uses: actions/checkout@v4 + with: + path: tests-action - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Install Node.js dependencies + working-directory: tests-action run: npm ci - - name: pre-test - run: npx vitest run --project pre - - name: test abilities - run: npx vitest --project abilities + - name: Run Pre-test + working-directory: tests-action + run: npx vitest run --project pre ${{ !runner.debug && '--silent' || '' }} - run-items-tests: - name: Run items tests - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v4 - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: Install Node.js dependencies - run: npm ci - - name: pre-test - run: npx vitest run --project pre - - name: test items - run: npx vitest --project items - - run-moves-tests: - name: Run moves tests - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v4 - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: Install Node.js dependencies - run: npm ci - - name: pre-test - run: npx vitest run --project pre - - name: test moves - run: npx vitest --project moves - - run-battle-tests: - name: Run battle tests - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v4 - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: Install Node.js dependencies - run: npm ci - - name: pre-test - run: npx vitest run --project pre - - name: test battle - run: npx vitest --project battle \ No newline at end of file + run-tests: + name: Run Tests + needs: [pre-test] + strategy: + matrix: + shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + uses: ./.github/workflows/test-shard-template.yml + with: + project: main + shard: ${{ matrix.shard }} + totalShards: 10 \ No newline at end of file diff --git a/vitest.config.ts b/vitest.config.ts index bfa380ec5fa..54462675704 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,46 +1,42 @@ -import { defineProject, UserWorkspaceConfig } from 'vitest/config'; -import { defaultConfig } from './vite.config'; - -export const defaultProjectTestConfig: UserWorkspaceConfig["test"] = { - setupFiles: ['./src/test/fontFace.setup.ts', './src/test/vitest.setup.ts'], - server: { - deps: { - inline: ['vitest-canvas-mock'], - //@ts-ignore - optimizer: { - web: { - include: ['vitest-canvas-mock'], - } - } - } - }, - environment: 'jsdom' as const, - environmentOptions: { - jsdom: { - resources: 'usable', - }, - }, - threads: false, - trace: true, - restoreMocks: true, - watch: false, - coverage: { - provider: 'istanbul' as const, - reportsDirectory: 'coverage' as const, - reporters: ['text-summary', 'html'], - }, -} +import { defineProject } from "vitest/config"; +import { defaultConfig } from "./vite.config"; export default defineProject(({ mode }) => ({ - ...defaultConfig, - test: { - ...defaultProjectTestConfig, - name: "main", - include: ["./src/test/**/*.{test,spec}.ts"], - exclude: ["./src/test/pre.test.ts"], - }, - esbuild: { - pure: mode === 'production' ? [ 'console.log' ] : [], - keepNames: true, - }, -})) + ...defaultConfig, + test: { + setupFiles: ["./src/test/fontFace.setup.ts", "./src/test/vitest.setup.ts"], + server: { + deps: { + inline: ["vitest-canvas-mock"], + //@ts-ignore + optimizer: { + web: { + include: ["vitest-canvas-mock"], + }, + }, + }, + }, + environment: "jsdom" as const, + environmentOptions: { + jsdom: { + resources: "usable", + }, + }, + threads: false, + trace: true, + restoreMocks: true, + watch: false, + coverage: { + provider: "istanbul" as const, + reportsDirectory: "coverage" as const, + reporters: ["text-summary", "html"], + }, + name: "main", + include: ["./src/test/**/*.{test,spec}.ts"], + exclude: ["./src/test/pre.test.ts"], + }, + esbuild: { + pure: mode === "production" ? ["console.log"] : [], + keepNames: true, + }, +})); diff --git a/vitest.workspace.ts b/vitest.workspace.ts index a885b77dc9d..38121942004 100644 --- a/vitest.workspace.ts +++ b/vitest.workspace.ts @@ -1,6 +1,5 @@ import { defineWorkspace } from "vitest/config"; import { defaultConfig } from "./vite.config"; -import { defaultProjectTestConfig } from "./vitest.config"; export default defineWorkspace([ { @@ -11,58 +10,5 @@ export default defineWorkspace([ environment: "jsdom", }, }, - { - ...defaultConfig, - test: { - ...defaultProjectTestConfig, - name: "misc", - include: [ - "src/test/achievements/**/*.{test,spec}.ts", - "src/test/arena/**/*.{test,spec}.ts", - "src/test/battlerTags/**/*.{test,spec}.ts", - "src/test/eggs/**/*.{test,spec}.ts", - "src/test/field/**/*.{test,spec}.ts", - "src/test/inputs/**/*.{test,spec}.ts", - "src/test/localization/**/*.{test,spec}.ts", - "src/test/phases/**/*.{test,spec}.ts", - "src/test/settingMenu/**/*.{test,spec}.ts", - "src/test/sprites/**/*.{test,spec}.ts", - "src/test/ui/**/*.{test,spec}.ts", - "src/test/*.{test,spec}.ts", - ], - }, - }, - { - ...defaultConfig, - test: { - ...defaultProjectTestConfig, - name: "abilities", - include: ["src/test/abilities/**/*.{test,spec}.ts"], - }, - }, - { - ...defaultConfig, - test: { - ...defaultProjectTestConfig, - name: "battle", - include: ["src/test/battle/**/*.{test,spec}.ts"], - }, - }, - { - ...defaultConfig, - test: { - ...defaultProjectTestConfig, - name: "items", - include: ["src/test/items/**/*.{test,spec}.ts"], - }, - }, - { - ...defaultConfig, - test: { - ...defaultProjectTestConfig, - name: "moves", - include: ["src/test/moves/**/*.{test,spec}.ts"], - }, - }, "./vitest.config.ts", ]); From 4808c07cf9e92714e4b7c0ba77a6b5e96fbe9c34 Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Tue, 10 Sep 2024 18:05:48 -0400 Subject: [PATCH 23/37] [Hotfix] Fix System Data Conversion Failure 2 (#4159) --- src/system/version-converter.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/system/version-converter.ts b/src/system/version-converter.ts index d54238812c8..f7996124886 100644 --- a/src/system/version-converter.ts +++ b/src/system/version-converter.ts @@ -76,7 +76,7 @@ export function applySystemDataPatches(data: SystemSaveData) { if (data.starterData) { // Migrate ability starter data if empty for caught species Object.keys(data.starterData).forEach(sd => { - if (data.dexData[sd].caughtAttr && !data.starterData[sd].abilityAttr) { + if (data.dexData[sd]?.caughtAttr && (data.starterData[sd] && !data.starterData[sd].abilityAttr)) { data.starterData[sd].abilityAttr = 1; } }); @@ -104,9 +104,11 @@ export function applySystemDataPatches(data: SystemSaveData) { // --- PATCHES --- // Fix Starter Data - if (data.starterData) { - for (const starterId of defaultStarterSpecies) { + for (const starterId of defaultStarterSpecies) { + if (data.starterData[starterId]?.abilityAttr) { data.starterData[starterId].abilityAttr |= AbilityAttr.ABILITY_1; + } + if (data.dexData[starterId]?.caughtAttr) { data.dexData[starterId].caughtAttr |= DexAttr.FEMALE; } } From e657322294bc39f9f398b72c0f8fdcd8f4d496d5 Mon Sep 17 00:00:00 2001 From: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Date: Wed, 11 Sep 2024 12:45:53 +0900 Subject: [PATCH 24/37] [Enhancement] Update instruction for gamepad in run history UI (#4053) * update instruction for pad in run history UI * move getGamepadType function to ui.ts * Update src/ui/ui.ts Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --------- Co-authored-by: Adrian T. <68144167+torranx@users.noreply.github.com> --- src/ui/run-info-ui-handler.ts | 23 +++++++++++++++++++---- src/ui/ui.ts | 17 +++++++++++++++++ 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index d6bafb8599e..f398abed6f5 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -21,6 +21,7 @@ import { getVariantTint } from "#app/data/variant"; import * as Modifier from "../modifier/modifier"; import { Species } from "#enums/species"; import { PlayerGender } from "#enums/player-gender"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; /** * RunInfoUiMode indicates possible overlays of RunInfoUiHandler. @@ -151,7 +152,13 @@ export default class RunInfoUiHandler extends UiHandler { const headerBgCoords = headerBg.getTopRight(); const abilityButtonContainer = this.scene.add.container(0, 0); const abilityButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHeldItems"), TextStyle.WINDOW, {fontSize:"34px"}); - const abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, "keyboard", "E.png"); + const gamepadType = this.getUi().getGamepadType(); + let abilityButtonElement: Phaser.GameObjects.Sprite; + if (gamepadType === "touch") { + abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, "keyboard", "E.png"); + } else { + abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Ability)); + } abilityButtonContainer.add([abilityButtonText, abilityButtonElement]); abilityButtonContainer.setPosition(headerBgCoords.x - abilityButtonText.displayWidth - abilityButtonElement.displayWidth - 8, 10); this.runContainer.add(abilityButtonContainer); @@ -180,11 +187,19 @@ export default class RunInfoUiHandler extends UiHandler { if (this.isVictory) { const hallofFameInstructionContainer = this.scene.add.container(0, 0); const shinyButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHallOfFame"), TextStyle.WINDOW, {fontSize:"65px"}); - const shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, "keyboard", "R.png"); + const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, {fontSize:"65px"}); + const gamepadType = this.getUi().getGamepadType(); + let shinyButtonElement: Phaser.GameObjects.Sprite; + let formButtonElement: Phaser.GameObjects.Sprite; + if (gamepadType === "touch") { + shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, "keyboard", "R.png"); + formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, "keyboard", "F.png"); + } else { + shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Shiny)); + formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Form)); + } hallofFameInstructionContainer.add([shinyButtonText, shinyButtonElement]); - const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, {fontSize:"65px"}); - const formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, "keyboard", "F.png"); hallofFameInstructionContainer.add([formButtonText, formButtonElement]); hallofFameInstructionContainer.setPosition(12, 25); diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 50fb240aad8..82b3ee6b4fa 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -52,6 +52,7 @@ import RunInfoUiHandler from "./run-info-ui-handler"; import EggSummaryUiHandler from "./egg-summary-ui-handler"; import TestDialogueUiHandler from "#app/ui/test-dialogue-ui-handler"; import AutoCompleteUiHandler from "./autocomplete-ui-handler"; +import { Device } from "#enums/devices"; export enum Mode { MESSAGE, @@ -578,4 +579,20 @@ export default class UI extends Phaser.GameObjects.Container { public getModeChain(): Mode[] { return this.modeChain; } + + /** + * getGamepadType - returns the type of gamepad being used + * inputMethod could be "keyboard" or "touch" or "gamepad" + * if inputMethod is "keyboard" or "touch", then the inputMethod is returned + * if inputMethod is "gamepad", then the gamepad type is returned it could be "xbox" or "dualshock" + * @returns gamepad type + */ + public getGamepadType(): string { + const scene = this.scene as BattleScene; + if (scene.inputMethod === "gamepad") { + return scene.inputController.getConfig(scene.inputController.selectedDevice[Device.GAMEPAD]).padType; + } else { + return scene.inputMethod; + } + } } From 89dac46dfc2830491c17942174d61e2a74b8ceb8 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Wed, 11 Sep 2024 22:46:26 +0200 Subject: [PATCH 25/37] [Localization] Localization batch - [Not meant to be merged until last minute] (#4127) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: sodam <66295123+sodaMelon@users.noreply.github.com> Co-authored-by: José Ricardo Co-authored-by: Chapybara-jp Co-authored-by: Asdar Co-authored-by: Niccolò <123510358+NicusPulcis@users.noreply.github.com> Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Enoch Co-authored-by: DanStevensonx <114961842+DanStevensonx@users.noreply.github.com> Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> Co-authored-by: SangaraSorama <100420976+SangaraSorama@users.noreply.github.com> --- src/locales/de/battler-tags.json | 3 +- src/locales/en/fight-ui-handler.json | 4 +- src/locales/es/battler-tags.json | 3 +- src/locales/es/fight-ui-handler.json | 3 +- src/locales/es/move-trigger.json | 3 +- src/locales/fr/battler-tags.json | 3 +- src/locales/fr/berry.json | 24 +- src/locales/fr/dialogue.json | 10 +- src/locales/fr/fight-ui-handler.json | 5 +- src/locales/fr/modifier-type.json | 2 +- src/locales/fr/move-trigger.json | 7 +- src/locales/fr/pokemon-info.json | 2 +- src/locales/it/battler-tags.json | 3 +- src/locales/it/fight-ui-handler.json | 7 +- src/locales/it/move-trigger.json | 5 +- src/locales/ja/battler-tags.json | 3 +- src/locales/ja/fight-ui-handler.json | 5 +- src/locales/ja/move-trigger.json | 3 +- src/locales/ko/battler-tags.json | 3 +- src/locales/ko/fight-ui-handler.json | 7 +- src/locales/ko/move-trigger.json | 3 +- src/locales/pt_BR/battler-tags.json | 3 +- src/locales/pt_BR/fight-ui-handler.json | 5 +- src/locales/pt_BR/move-trigger.json | 3 +- src/locales/zh_CN/ability.json | 4 +- src/locales/zh_CN/achv.json | 22 +- src/locales/zh_CN/battle.json | 2 +- src/locales/zh_CN/battler-tags.json | 3 +- src/locales/zh_CN/bgm-name.json | 6 +- src/locales/zh_CN/dialogue-double-battle.json | 6 +- src/locales/zh_CN/dialogue-misc.json | 2 +- src/locales/zh_CN/dialogue.json | 34 +- src/locales/zh_CN/fight-ui-handler.json | 7 +- src/locales/zh_CN/modifier-type.json | 10 +- src/locales/zh_CN/move-trigger.json | 9 +- src/locales/zh_CN/party-ui-handler.json | 4 +- src/locales/zh_CN/pokemon-form.json | 4 +- src/locales/zh_CN/splash-messages.json | 4 +- .../zh_CN/starter-select-ui-handler.json | 6 +- src/locales/zh_TW/ability-trigger.json | 55 ++- src/locales/zh_TW/ability.json | 4 +- src/locales/zh_TW/achv.json | 26 +- src/locales/zh_TW/arena-flyout.json | 44 +- src/locales/zh_TW/arena-tag.json | 48 +- src/locales/zh_TW/battle.json | 123 +++-- src/locales/zh_TW/battler-tags.json | 4 +- src/locales/zh_TW/bgm-name.json | 142 +++++- src/locales/zh_TW/challenges.json | 8 +- src/locales/zh_TW/common.json | 6 +- src/locales/zh_TW/dialogue-double-battle.json | 6 +- src/locales/zh_TW/dialogue-misc.json | 2 +- src/locales/zh_TW/dialogue.json | 457 +++++++++++++++++- src/locales/zh_TW/egg.json | 8 +- src/locales/zh_TW/fight-ui-handler.json | 7 +- src/locales/zh_TW/menu-ui-handler.json | 9 +- src/locales/zh_TW/menu.json | 22 +- .../zh_TW/modifier-select-ui-handler.json | 13 +- src/locales/zh_TW/modifier-type.json | 22 +- src/locales/zh_TW/modifier.json | 1 + src/locales/zh_TW/move-trigger.json | 9 +- src/locales/zh_TW/move.json | 4 +- src/locales/zh_TW/party-ui-handler.json | 43 +- src/locales/zh_TW/pokemon-form-battle.json | 8 +- src/locales/zh_TW/pokemon-form.json | 171 ++++++- src/locales/zh_TW/pokemon-info.json | 6 +- src/locales/zh_TW/pokemon-summary.json | 46 +- src/locales/zh_TW/settings.json | 4 +- src/locales/zh_TW/splash-messages.json | 5 +- .../zh_TW/starter-select-ui-handler.json | 9 +- src/locales/zh_TW/status-effect.json | 66 ++- src/locales/zh_TW/trainer-classes.json | 4 +- src/locales/zh_TW/trainer-names.json | 30 +- src/locales/zh_TW/trainer-titles.json | 23 +- src/locales/zh_TW/weather.json | 3 +- 74 files changed, 1419 insertions(+), 261 deletions(-) diff --git a/src/locales/de/battler-tags.json b/src/locales/de/battler-tags.json index e65e1ddfe75..1a04d3d4486 100644 --- a/src/locales/de/battler-tags.json +++ b/src/locales/de/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}} wurde durch den Fluch verletzt!", "stockpilingOnAdd": "{{pokemonNameWithAffix}} hortet {{stockpiledCount}}!", "disabledOnAdd": " {{moveName}} von {{pokemonNameWithAffix}} wurde blockiert!", - "disabledLapse": "{{moveName}} von {{pokemonNameWithAffix}} ist nicht länger blockiert!" + "disabledLapse": "{{moveName}} von {{pokemonNameWithAffix}} ist nicht länger blockiert!", + "tarShotOnAdd": "{{pokemonNameWithAffix}} ist nun schwach gegenüber Feuer-Attacken!" } diff --git a/src/locales/en/fight-ui-handler.json b/src/locales/en/fight-ui-handler.json index 1b8bd1f5c71..bd6bec878c8 100644 --- a/src/locales/en/fight-ui-handler.json +++ b/src/locales/en/fight-ui-handler.json @@ -2,7 +2,7 @@ "pp": "PP", "power": "Power", "accuracy": "Accuracy", - "abilityFlyInText": " {{pokemonName}}'s {{passive}}{{abilityName}}", + "abilityFlyInText": " {{pokemonName}}’s\n{{passive}}{{abilityName}}", "passive": "Passive ", "teraHover": "{{type}} Terastallized" -} \ No newline at end of file +} diff --git a/src/locales/es/battler-tags.json b/src/locales/es/battler-tags.json index 891fda53c5d..49efed6e8b4 100644 --- a/src/locales/es/battler-tags.json +++ b/src/locales/es/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "¡{{pokemonNameWithAffix}} es víctima de una maldición!", "stockpilingOnAdd": "¡{{pokemonNameWithAffix}} ha reservado energía por {{stockpiledCount}}ª vez!", "disabledOnAdd": "¡Se ha anulado el movimiento {{moveName}}\nde {{pokemonNameWithAffix}}!", - "disabledLapse": "¡El movimiento {{moveName}} de {{pokemonNameWithAffix}} \n ya no está anulado!" + "disabledLapse": "¡El movimiento {{moveName}} de {{pokemonNameWithAffix}} ya no está anulado!", + "tarShotOnAdd": "¡{{pokemonNameWithAffix}} se ha vuelto débil ante el fuego!" } diff --git a/src/locales/es/fight-ui-handler.json b/src/locales/es/fight-ui-handler.json index dc8140b61fc..fa13f2e0e77 100644 --- a/src/locales/es/fight-ui-handler.json +++ b/src/locales/es/fight-ui-handler.json @@ -3,5 +3,6 @@ "power": "Potencia", "accuracy": "Precisión", "abilityFlyInText": " {{passive}}{{pokemonName}}\n{{abilityName}}", - "passive": "Pasiva de " + "passive": "Pasiva de ", + "teraHover": "Tera-tipo {{type}}" } diff --git a/src/locales/es/move-trigger.json b/src/locales/es/move-trigger.json index f92b7950a07..2322a49056f 100644 --- a/src/locales/es/move-trigger.json +++ b/src/locales/es/move-trigger.json @@ -12,5 +12,6 @@ "stoleItem": "¡{{pokemonName}} robó el objeto\n{{itemName}} de {{targetName}}!", "statEliminated": "¡Los cambios en estadísticas fueron eliminados!", "revivalBlessing": "¡{{pokemonName}} ha revivido!", - "safeguard": "¡{{targetName}} está protegido por Velo Sagrado!" + "safeguard": "¡{{targetName}} está protegido por Velo Sagrado!", + "afterYou": "¡{{pokemonName}} ha decidido aprovechar la oportunidad!" } diff --git a/src/locales/fr/battler-tags.json b/src/locales/fr/battler-tags.json index f523eb7f07d..c4a88bb91aa 100644 --- a/src/locales/fr/battler-tags.json +++ b/src/locales/fr/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}} est touché par la malédiction !", "stockpilingOnAdd": "{{pokemonNameWithAffix}} utilise\nla capacité Stockage {{stockpiledCount}} fois !", "disabledOnAdd": "La capacité {{moveName}}\nde {{pokemonNameWithAffix}} est mise sous entrave !", - "disabledLapse": "La capacité {{moveName}}\nde {{pokemonNameWithAffix}} n’est plus sous entrave !" + "disabledLapse": "La capacité {{moveName}}\nde {{pokemonNameWithAffix}} n’est plus sous entrave !", + "tarShotOnAdd": "{{pokemonNameWithAffix}} est maintenant\nvulnérable au feu !" } diff --git a/src/locales/fr/berry.json b/src/locales/fr/berry.json index 833e1d1d8fd..17f28fb8dd0 100644 --- a/src/locales/fr/berry.json +++ b/src/locales/fr/berry.json @@ -1,46 +1,46 @@ { "SITRUS": { "name": "Baie Sitrus", - "effect": "Restaure 25% des PV s’ils sont inférieurs à 50%." + "effect": "Restaure 25% des PV du porteur s’ils sont inférieurs à 50%." }, "LUM": { "name": "Baie Prine", - "effect": "Soigne tout problème de statut permanant et la confusion." + "effect": "Soigne tout problème de statut et la confusion du porteur." }, "ENIGMA": { "name": "Baie Enigma", - "effect": "Restaure 25% des PV si touché par une capacité super efficace." + "effect": "Restaure 25% des PV du porteur s’il est touché par une capacité super efficace." }, "LIECHI": { "name": "Baie Lichii", - "effect": "Augmente l’Attaque si les PV sont inférieurs à 25%." + "effect": "Augmente l’Attaque du porteur si ses PV sont inférieurs à 25%." }, "GANLON": { "name": "Baie Lingan", - "effect": "Augmente la Défense si les PV sont inférieurs à 25%." + "effect": "Augmente la Défense du porteur si ses PV sont inférieurs à 25%." }, "PETAYA": { "name": "Baie Pitaye", - "effect": "Augmente l’Atq. Spé. si les PV sont inférieurs à 25%." + "effect": "Augmente l’Atq. Spé. du porteur si ses PV sont inférieurs à 25%." }, "APICOT": { "name": "Baie Abriko", - "effect": "Augmente la Déf. Spé. si les PV sont inférieurs à 25%." + "effect": "Augmente la Déf. Spé. du porteur si ses PV sont inférieurs à 25%." }, "SALAC": { "name": "Baie Sailak", - "effect": "Augmente la Vitesse si les PV sont inférieurs à 25%." + "effect": "Augmente la Vitesse du porteur si ses PV sont inférieurs à 25%." }, "LANSAT": { "name": "Baie Lansat", - "effect": "Augmente le taux de coups critiques si les PV sont inférieurs à 25%." + "effect": "Augmente le taux de coups critiques du porteur si ses PV sont inférieurs à 25%." }, "STARF": { "name": "Baie Frista", - "effect": "Augmente énormément une statistique au hasard si les PV sont inférieurs à 25%." + "effect": "Augmente énormément une statistique au hasard du porteur si ses PV sont inférieurs à 25%." }, "LEPPA": { "name": "Baie Mepo", - "effect": "Restaure 10 PP à une capacité dès que ses PP tombent à 0." + "effect": "Restaure 10 PP à une capacité du porteur dès que ses PP tombent à 0." } -} \ No newline at end of file +} diff --git a/src/locales/fr/dialogue.json b/src/locales/fr/dialogue.json index dddd0d8e5b7..adc58de0563 100644 --- a/src/locales/fr/dialogue.json +++ b/src/locales/fr/dialogue.json @@ -54,8 +54,8 @@ "3": "J’espère que j’aurai ma revanche un jour.", "4": "C’était super amusant ! Mais ce combat m’a épuisée…", "5": "Tu m’as appris une belle leçon ! T’es vraiment incroyable !", - "6": "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais tu es vraiment très cool.", - "6_female": "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais t’es vraiment très cool.", + "6": "Vraiment ? J’ai perdu… ? Bon, ça arrive, mais c’était cool quand même.", + "6_female": "Vraiment ? J’ai perdu… ? Bon, ça arrive, mais c’était cool quand même.", "7": "J’ai pas besoin de ce genre de souvenirs.\n*Suppression de mémoire en cours…*", "8": "Hé ! Je t’avais dit d’y aller doucement avec moi ! Mais t’es vraiment si cool quand tu te bats sérieusement…", "9": "J’en ai marre des combats Pokémon…\nJe vais chercher d’autres trucs à faire…" @@ -314,8 +314,8 @@ "3": "On est juste des gars et des meufs normaux, on voit un Pokémon on le prend !", "4": "Pourquoi tu te la joue comme ça ? C'est avec tes dents que t’vas jouer frérot.", "4_female": "Pourquoi tu te la joue comme ça ? C'est avec tes dents que t’vas jouer ma reus.", - "5": "Cousin, écoute-nous bien ! ♪\nSe taper dessus, ça sert à rien ! ♪\n$Tu t’incrustes chez nous, ça s’fait pas ! ♪\n$Mais on est sympa, on a un plan pour toi ! ♪", - "5_female": "Cousine, écoute-nous bien ! ♪\nSe taper dessus, ça sert à rien ! ♪\n$Tu t’incrustes chez nous, ça s’fait pas ! ♪\n$Mais on est sympa, on a un plan pour toi ! ♪" + "5": "Cousin, écoute-nous bien ! ♪\nSe taper dessus, ça sert à rien ! ♪\n$Tu t’incrustes chez nous, ça s’fait pas ! ♪\nMais on est sympa, on a un plan pour toi ! ♪", + "5_female": "Cousine, écoute-nous bien ! ♪\nSe taper dessus, ça sert à rien ! ♪\n$Tu t’incrustes chez nous, ça s’fait pas ! ♪\nMais on est sympa, on a un plan pour toi ! ♪" }, "victory": { "1": "Hein ? C’est déjà terminé ?", @@ -687,7 +687,7 @@ }, "rival_6": { "encounter": { - "1": "@c{smile_eclosed}Nous y revoilà.\n$@c{neutral}J’ai eu du temps pour réfléchir à tout ça.\nIl y a une raison à pourquoi tout semble étrange.\n$@c{neutral_eclosed}Ton rêve, ma volonté de te battre…\nFont partie de quelque chose de plus grand.\n$@c{serious}C’est même pas à propos de moi, ni de toi… Mais du monde, @c{serious_mhalf_fists}et te repousser dans tes limites est ma mission.\n$@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir.\n$@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds.\n$@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ?\n$@c{serious}… et c’est comme si quelque chose ici me parlait.\n$Comme si c’était tout ce que ce monde avait toujours connu.\n$Ces précieux moments ensemble semblent si proches ne sont rien de plus qu’un lointain souvenir.\n$@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ?\n$@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es la seule à en être capable.\n$@c{serious_smile_fists}Difficile de comprendre le sens de tout ça, je sais juste que c’est la réalité.\n$@c{serious_mopen_fists}Si tu ne parviens pas à me battre ici et maintenant, tu n’as aucune chance." + "1": "@c{smile_eclosed}Nous y revoilà.\n$@c{neutral}J’ai eu du temps pour réfléchir à tout ça.\nIl y a une raison à pourquoi tout semble étrange.\n$@c{neutral_eclosed}Ton rêve, ma volonté de te battre…\nFont partie de quelque chose de plus grand.\n$@c{serious}C’est même pas à propos de moi, ni de toi… Mais du monde, @c{serious_mhalf_fists}et te repousser dans tes limites est ma mission.\n$@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir.\n$@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds.\n$@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ?\n$@c{serious}… et c’est comme si quelque chose ici me parlait.\n$Comme si c’était tout ce que ce monde avait toujours connu.\n$Ces précieux moments ensemble qui semblent si proches ne sont rien de plus qu’un lointain souvenir.\n$@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ?\n$@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es la seule à en être capable.\n$@c{serious_smile_fists}Difficile de comprendre le sens de tout ça, je sais juste que c’est la réalité.\n$@c{serious_mopen_fists}Si tu ne parviens pas à me battre ici et maintenant, tu n’as aucune chance." }, "victory": { "1": "@c{smile_eclosed}J’ai fait ce que j’avais à faire.\n$Promets-moi juste une chose.\n@c{smile}Après avoir réparé ce monde… Rentre à la maison." diff --git a/src/locales/fr/fight-ui-handler.json b/src/locales/fr/fight-ui-handler.json index e8b41661995..bd4e6b52566 100644 --- a/src/locales/fr/fight-ui-handler.json +++ b/src/locales/fr/fight-ui-handler.json @@ -3,5 +3,6 @@ "power": "Puissance", "accuracy": "Précision", "abilityFlyInText": " {{passive}}{{abilityName}}\nde {{pokemonName}}", - "passive": "Passif " -} \ No newline at end of file + "passive": "Passif ", + "teraHover": "Téracristal {{type}}" +} diff --git a/src/locales/fr/modifier-type.json b/src/locales/fr/modifier-type.json index 78be62cd88f..4f8033b50d7 100644 --- a/src/locales/fr/modifier-type.json +++ b/src/locales/fr/modifier-type.json @@ -202,7 +202,7 @@ "GOLDEN_PUNCH": { "name": "Poing Doré", "description": "La moitié des dégâts infligés sont convertis en argent." }, "COIN_CASE": { "name": "Boite Jetons", "description": "Tous les 10 combats, recevez 10% de votre argent en intérêts." }, - "LOCK_CAPSULE": { "name": "Poké Écrin", "description": "Permet de conserver la rareté des objets si vous relancez les objets proposés." }, + "LOCK_CAPSULE": { "name": "Poké Écrin", "description": "Permet de choisir de bloquer le niveau de rareté lors d’une relance des objets gratuits proposés." }, "GRIP_CLAW": { "name": "Accro Griffe" }, "WIDE_LENS": { "name": "Loupe" }, diff --git a/src/locales/fr/move-trigger.json b/src/locales/fr/move-trigger.json index d9d800c52cc..3704bc90718 100644 --- a/src/locales/fr/move-trigger.json +++ b/src/locales/fr/move-trigger.json @@ -1,9 +1,9 @@ { "hitWithRecoil": "{{pokemonName}} est blessé par le contrecoup !", - "cutHpPowerUpMove": "{{pokemonName}} sacrifie des PV\net augmente la puissance ses capacités !", + "cutHpPowerUpMove": "{{pokemonName}} sacrifie des PV\net augmente la puissance de ses capacités !", "absorbedElectricity": "{{pokemonName}} absorbe de l’électricité !", "switchedStatChanges": "{{pokemonName}} permute\nles changements de stats avec ceux de sa cible !", - "switchedTwoStatChanges": "{{pokemonName}} permute les changements de {{firstStat} et de {{secondStat}} avec ceux de sa cible !", + "switchedTwoStatChanges": "{{pokemonName}} permute les changements de {{firstStat}} et de {{secondStat}} avec ceux de sa cible !", "switchedStat": "{{pokemonName}} et sa cible échangent leur {{stat}} !", "sharedGuard": "{{pokemonName}} additionne sa garde à celle de sa cible et redistribue le tout équitablement !", "sharedPower": "{{pokemonName}} additionne sa force à celle de sa cible et redistribue le tout équitablement !", @@ -66,5 +66,6 @@ "revivalBlessing": "{{pokemonName}} a repris connaissance\net est prêt à se battre de nouveau !", "swapArenaTags": "Les effets affectant chaque côté du terrain\nont été échangés par {{pokemonName}} !", "exposedMove": "{{targetPokemonName}} est identifié\npar {{pokemonName}} !", - "safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !" + "safeguard": "{{targetName}} est protégé\npar la capacité Rune Protect !", + "afterYou": "{{pokemonName}} accepte\navec joie !" } diff --git a/src/locales/fr/pokemon-info.json b/src/locales/fr/pokemon-info.json index a23b320ea3e..4e53a31035d 100644 --- a/src/locales/fr/pokemon-info.json +++ b/src/locales/fr/pokemon-info.json @@ -17,7 +17,7 @@ "HPStat": "PV" }, "Type": { - "UNKNOWN": "Inconnu", + "UNKNOWN": "???", "NORMAL": "Normal", "FIGHTING": "Combat", "FLYING": "Vol", diff --git a/src/locales/it/battler-tags.json b/src/locales/it/battler-tags.json index e8bda9cfd1e..bd24f380f9e 100644 --- a/src/locales/it/battler-tags.json +++ b/src/locales/it/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}} subisce la maledizione!", "stockpilingOnAdd": "{{pokemonNameWithAffix}} ha usato Accumulo per la\n{{stockpiledCount}}ª volta!", "disabledOnAdd": "La mossa {{moveName}} di\n{{pokemonNameWithAffix}} è stata bloccata!", - "disabledLapse": "La mossa {{moveName}} di\n{{pokemonNameWithAffix}} non è più bloccata!" + "disabledLapse": "La mossa {{moveName}} di\n{{pokemonNameWithAffix}} non è più bloccata!", + "tarShotOnAdd": "{{pokemonNameWithAffix}} è diventato vulnerabile\nal tipo Fuoco!" } diff --git a/src/locales/it/fight-ui-handler.json b/src/locales/it/fight-ui-handler.json index 969d8dad370..1c24112a1a7 100644 --- a/src/locales/it/fight-ui-handler.json +++ b/src/locales/it/fight-ui-handler.json @@ -2,6 +2,7 @@ "pp": "PP", "power": "Potenza", "accuracy": "Precisione", - "abilityFlyInText": "{{passive}} {{pokemonName}} {{abilityName}}", - "passive": "Passiva di " -} \ No newline at end of file + "abilityFlyInText": "{{passive}}{{pokemonName}}\n{{abilityName}}", + "passive": "Passiva di ", + "teraHover": "Teracristallizzato {{type}}" +} diff --git a/src/locales/it/move-trigger.json b/src/locales/it/move-trigger.json index 785972b90f9..c8fb390e53f 100644 --- a/src/locales/it/move-trigger.json +++ b/src/locales/it/move-trigger.json @@ -66,5 +66,6 @@ "revivalBlessing": "{{pokemonName}} torna in forze!", "swapArenaTags": "{{pokemonName}} ha invertito gli effetti attivi\nnelle due metà del campo!", "exposedMove": "{{pokemonName}} ha identificato\n{{targetPokemonName}}!", - "safeguard": "Salvaguardia protegge {{targetName}}!" -} \ No newline at end of file + "safeguard": "Salvaguardia protegge {{targetName}}!", + "afterYou": "{{pokemonName}} approfitta della cortesia!" +} diff --git a/src/locales/ja/battler-tags.json b/src/locales/ja/battler-tags.json index 2b6382a3a9f..f8c6d44c0b4 100644 --- a/src/locales/ja/battler-tags.json +++ b/src/locales/ja/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}}は のろわれている!", "stockpilingOnAdd": "{{pokemonNameWithAffix}}は {{stockpiledCount}}つ たくわえた!", "disabledOnAdd": "{{pokemonNameWithAffix}}の\n{{moveName}}\nを 封じこめた!", - "disabledLapse": "{{pokemonNameWithAffix}}の\nかなしばりが 解けた!" + "disabledLapse": "{{pokemonNameWithAffix}}の\nかなしばりが 解けた!", + "tarShotOnAdd": "{{pokemonNameWithAffix}}は ほのおに 弱くなった!" } diff --git a/src/locales/ja/fight-ui-handler.json b/src/locales/ja/fight-ui-handler.json index c0c725ccaf3..72cf32f1cd5 100644 --- a/src/locales/ja/fight-ui-handler.json +++ b/src/locales/ja/fight-ui-handler.json @@ -2,6 +2,7 @@ "pp": "PP", "power": "威力", "accuracy": "命中", - "abilityFlyInText": " {{pokemonName}}の\n{{passive}} {{abilityName}}", - "passive": "パッシブ " + "abilityFlyInText": " {{pokemonName}}の\n{{passive}}{{abilityName}}", + "passive": "パッシブ ", + "teraHover": "{{type}}テラスタル" } diff --git a/src/locales/ja/move-trigger.json b/src/locales/ja/move-trigger.json index 7449d8c6e4b..fbefe883836 100644 --- a/src/locales/ja/move-trigger.json +++ b/src/locales/ja/move-trigger.json @@ -65,5 +65,6 @@ "suppressAbilities": "{{pokemonName}}の 特性が 効かなくなった!", "revivalBlessing": "{{pokemonName}}は\n復活して 戦えるようになった!", "swapArenaTags": "{{pokemonName}}は\nお互いの 場の 効果を 入れ替えた!", - "exposedMove": "{{pokemonName}}は {{targetPokemonName}}の\n正体を 見破った!" + "exposedMove": "{{pokemonName}}は {{targetPokemonName}}の\n正体を 見破った!", + "afterYou": "{{pokemonName}}は\nお言葉に 甘えることにした!" } diff --git a/src/locales/ko/battler-tags.json b/src/locales/ko/battler-tags.json index 0993cafa04a..21e548a01a6 100644 --- a/src/locales/ko/battler-tags.json +++ b/src/locales/ko/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}}[[는]]\n저주받고 있다!", "stockpilingOnAdd": "{{pokemonNameWithAffix}}[[는]]\n{{stockpiledCount}}개 비축했다!", "disabledOnAdd": "{{pokemonNameWithAffix}}의 {{moveName}}[[는]]\n사용할 수 없다!", - "disabledLapse": "{{pokemonNameWithAffix}}의 {{moveName}}[[는]]\n이제 사용할 수 있다." + "disabledLapse": "{{pokemonNameWithAffix}}의 {{moveName}}[[는]]\n이제 사용할 수 있다.", + "tarShotOnAdd": "{{pokemonNameWithAffix}}[[는]] 불꽃에 약해졌다!" } diff --git a/src/locales/ko/fight-ui-handler.json b/src/locales/ko/fight-ui-handler.json index a5f961095e1..d950e605896 100644 --- a/src/locales/ko/fight-ui-handler.json +++ b/src/locales/ko/fight-ui-handler.json @@ -2,6 +2,7 @@ "pp": "PP", "power": "위력", "accuracy": "명중률", - "abilityFlyInText": " {{pokemonName}}의 {{passive}}{{abilityName}}", - "passive": "패시브 " -} \ No newline at end of file + "abilityFlyInText": " {{pokemonName}}의\n{{passive}}{{abilityName}}", + "passive": "패시브 ", + "teraHover": "{{type}} 테라스탈" +} diff --git a/src/locales/ko/move-trigger.json b/src/locales/ko/move-trigger.json index 2a38bb13b0a..8a3a699d628 100644 --- a/src/locales/ko/move-trigger.json +++ b/src/locales/ko/move-trigger.json @@ -66,5 +66,6 @@ "revivalBlessing": "{{pokemonName}}[[는]]\n정신을 차려 싸울 수 있게 되었다!", "swapArenaTags": "{{pokemonName}}[[는]]\n서로의 필드 효과를 교체했다!", "exposedMove": "{{pokemonName}}[[는]]\n{{targetPokemonName}}의 정체를 꿰뚫어 보았다!", - "safeguard": "{{targetName}}[[는]] 신비의 베일이 지켜 주고 있다!" + "safeguard": "{{targetName}}[[는]] 신비의 베일이 지켜 주고 있다!", + "afterYou": "{{pokemonName}}[[는]]\n배려를 받아들이기로 했다!" } diff --git a/src/locales/pt_BR/battler-tags.json b/src/locales/pt_BR/battler-tags.json index 9c0f4732013..ec6559e12e5 100644 --- a/src/locales/pt_BR/battler-tags.json +++ b/src/locales/pt_BR/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}} foi ferido pelo Curse!", "stockpilingOnAdd": "{{pokemonNameWithAffix}} estocou {{stockpiledCount}}!", "disabledOnAdd": "{{moveName}} de {{pokemonNameWithAffix}}\nfoi desabilitado!", - "disabledLapse": "{{moveName}} de {{pokemonNameWithAffix}}\nnão está mais desabilitado." + "disabledLapse": "{{moveName}} de {{pokemonNameWithAffix}}\nnão está mais desabilitado.", + "tarShotOnAdd": "{{pokemonNameWithAffix}} tornou-se mais fraco ao fogo!" } diff --git a/src/locales/pt_BR/fight-ui-handler.json b/src/locales/pt_BR/fight-ui-handler.json index f5c4379126d..8fc41f523eb 100644 --- a/src/locales/pt_BR/fight-ui-handler.json +++ b/src/locales/pt_BR/fight-ui-handler.json @@ -3,5 +3,6 @@ "power": "Poder", "accuracy": "Precisão", "abilityFlyInText": " {{passive}}{{pokemonName}}\n{{abilityName}}", - "passive": "Passiva de " -} \ No newline at end of file + "passive": "Passiva de ", + "teraHover": "Terastalizado {{type}}" +} diff --git a/src/locales/pt_BR/move-trigger.json b/src/locales/pt_BR/move-trigger.json index 9aa13dedad5..4549f83cdf1 100644 --- a/src/locales/pt_BR/move-trigger.json +++ b/src/locales/pt_BR/move-trigger.json @@ -62,5 +62,6 @@ "revivalBlessing": "{{pokemonName}} foi reanimado!", "swapArenaTags": "{{pokemonName}} trocou os efeitos de batalha que afetam cada lado do campo!", "exposedMove": "{{pokemonName}} identificou\n{{targetPokemonName}}!", - "safeguard": "{{targetName}} está protegido por Safeguard!" + "safeguard": "{{targetName}} está protegido por Safeguard!", + "afterYou": "{{pokemonName}} aceitou a gentil oferta!" } diff --git a/src/locales/zh_CN/ability.json b/src/locales/zh_CN/ability.json index 7c70c84f55c..31e3c08161d 100644 --- a/src/locales/zh_CN/ability.json +++ b/src/locales/zh_CN/ability.json @@ -469,7 +469,7 @@ }, "honeyGather": { "name": "采蜜", - "description": "The Pokémon gat\nhers Honey afte\nr a battle. The\n Honey is then \nsold for money." + "description": "战斗结束时,有时候会捡来甜甜蜜。\n甜甜蜜会转换成金钱。" }, "frisk": { "name": "察觉", @@ -1239,4 +1239,4 @@ "name": "毒傀儡", "description": "因桃歹郎的招式而陷入中毒状态的\n对手同时也会陷入混乱状态。" } -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/achv.json b/src/locales/zh_CN/achv.json index 90dfda0e3c1..b93345d876b 100644 --- a/src/locales/zh_CN/achv.json +++ b/src/locales/zh_CN/achv.json @@ -23,7 +23,7 @@ }, "DamageAchv": { - "description": "在单次攻击中造成 {{damageAmount}} 点伤害" + "description": "在单次攻击中造成\n {{damageAmount}} 点伤害" }, "250_DMG": { "name": "重拳出击" @@ -39,7 +39,7 @@ }, "HealAchv": { - "description": "通过技能、能力或携带的道具一次性治疗 {{healAmount}} {{HP}}点" + "description": "通过技能、能力或携带的道具\n一次性治疗 {{healAmount}} {{HP}}点" }, "250_HEAL": { "name": "新手奶妈" @@ -88,11 +88,11 @@ "TRANSFER_MAX_STAT_STAGE": { "name": "团队协作", - "description": "在一项属性强化至最大时用接力棒传递给其他宝可梦" + "description": "在一项属性强化至最大时用\n接力棒传递给其他宝可梦" }, "MAX_FRIENDSHIP": { "name": "亲密无间", - "description": "使一只宝可梦的亲密度达到最大值" + "description": "使一只宝可梦的亲密度\n达到最大值" }, "MEGA_EVOLVE": { "name": "大变身", @@ -112,7 +112,7 @@ }, "SPLICE": { "name": "无限融合", - "description": "使用基因之楔将两只宝可梦融合在一起" + "description": "使用基因之楔将两只宝可梦\n融合在一起" }, "MINI_BLACK_HOLE": { "name": "一大洞的道具", @@ -136,7 +136,7 @@ }, "SHINY_PARTY": { "name": "呕心沥血", - "description": "拥有一支由闪光宝可梦组成的满员队伍" + "description": "拥有一支由闪光宝可梦组成\n的满员队伍" }, "HATCH_MYTHICAL": { "name": "幻兽蛋", @@ -144,7 +144,7 @@ }, "HATCH_SUB_LEGENDARY": { "name": "二级传说蛋", - "description": "从蛋中孵化出一只二级传说宝可梦" + "description": "从蛋中孵化出一只二级传说\n宝可梦" }, "HATCH_LEGENDARY": { "name": "传说蛋", @@ -156,19 +156,19 @@ }, "HIDDEN_ABILITY": { "name": "隐藏实力", - "description": "捕捉一只拥有隐藏特性的宝可梦" + "description": "捕捉一只拥有隐藏特性\n的宝可梦" }, "PERFECT_IVS": { "name": "合格证", - "description": "获得一只拥有完美个体值的宝可梦" + "description": "获得一只拥有完美个体值\n的宝可梦" }, "CLASSIC_VICTORY": { "name": "战无不胜", "description": "在经典模式中通关游戏" }, "UNEVOLVED_CLASSIC_VICTORY": { - "name": "带孩子来上班", - "description": "通关经典模式时队伍中至少有一名未进化的宝可梦" + "name": "带孩上班", + "description": "通关经典模式时队伍中至少有\n一名未进化的宝可梦" }, "MONO_GEN_ONE": { diff --git a/src/locales/zh_CN/battle.json b/src/locales/zh_CN/battle.json index 4197786b7d8..ccf0e560805 100644 --- a/src/locales/zh_CN/battle.json +++ b/src/locales/zh_CN/battle.json @@ -15,7 +15,7 @@ "moneyPickedUp": "捡到了₽{{moneyAmount}}!", "pokemonCaught": "{{pokemonName}}被抓住了!", "addedAsAStarter": "增加了{{pokemonName}}作为\n一个新的基础宝可梦!", - "partyFull": "你的队伍已满员。是否放生其他宝可梦\n为{{pokemonName}}腾出空间?", + "partyFull": "你的队伍已满员。是否放生其他宝可梦\n为{{pokemonName}}腾出空间?", "pokemon": "宝可梦", "sendOutPokemon": "上吧!\n{{pokemonName}}!", "hitResultCriticalHit": "击中了要害!", diff --git a/src/locales/zh_CN/battler-tags.json b/src/locales/zh_CN/battler-tags.json index 792551d1ab1..7a01f5dff23 100644 --- a/src/locales/zh_CN/battler-tags.json +++ b/src/locales/zh_CN/battler-tags.json @@ -69,5 +69,6 @@ "cursedLapse": "{{pokemonNameWithAffix}}\n正受到诅咒!", "stockpilingOnAdd": "{{pokemonNameWithAffix}}蓄力了{{stockpiledCount}}次!", "disabledOnAdd": "封住了{{pokemonNameWithAffix}}的\n{{moveName}}!", - "disabledLapse": "{{pokemonNameWithAffix}}的\n定身法解除了!" + "disabledLapse": "{{pokemonNameWithAffix}}的\n定身法解除了!", + "tarShotOnAdd": "{{pokemonNameWithAffix}}\n变得怕火了!" } diff --git a/src/locales/zh_CN/bgm-name.json b/src/locales/zh_CN/bgm-name.json index d0508a49661..065347e3bb6 100644 --- a/src/locales/zh_CN/bgm-name.json +++ b/src/locales/zh_CN/bgm-name.json @@ -57,7 +57,7 @@ "battle_legendary_dusk_dawn": "究极日月「战斗!日食・月食 奈克洛兹玛」", "battle_legendary_ultra_nec": "究极日月「战斗!究极奈克洛兹玛」", "battle_legendary_zac_zam": "剑盾「战斗!苍响・藏玛然特」", - "battle_legendary_glas_spec": "剑盾「战斗! 雪暴马・灵幽马」", + "battle_legendary_glas_spec": "剑盾「战斗! 雪暴马・灵幽马」", "battle_legendary_calyrex": "剑盾「战斗!蕾冠王」", "battle_legendary_birds_galar": "剑盾「战斗!传说的鸟宝可梦」", "battle_legendary_ruinous": "朱紫「战斗!灾厄宝可梦」", @@ -117,9 +117,9 @@ "plains": "空之探险队「天空顶端(草原)」", "power_plant": "空之探险队「电气平原 深处」", "ruins": "空之探险队「封印岩地 深处」", - "sea": "Andr06 - Marine Mystique", + "sea": "Andr06 - 海洋之秘", "seabed": "Firel - 海底", - "slum": "Andr06 - Sneaky Snom", + "slum": "Andr06 - 狡猾的雪吞虫", "snowy_forest": "空之探险队「天空顶端(雪山)」", "space": "Firel - 太空", "swamp": "空之探险队「封闭之海」", diff --git a/src/locales/zh_CN/dialogue-double-battle.json b/src/locales/zh_CN/dialogue-double-battle.json index 5ab6bf49890..629de3aff3e 100644 --- a/src/locales/zh_CN/dialogue-double-battle.json +++ b/src/locales/zh_CN/dialogue-double-battle.json @@ -9,10 +9,10 @@ }, "red_blue_double": { "encounter": { - "1": "赤红: ...!$青绿: 他人狠话不多。$青绿: 但别被他耍了,\n毕竟他可是个冠军!" + "1": "赤红: ...!$青绿: 他人狠话不多。$青绿: 但别被他耍了,\n毕竟他可是个冠军!" }, "victory": { - "1": "赤红: ...!$青绿: 下次我们一定会赢你!" + "1": "赤红: ...!$青绿: 下次我们一定会赢你!" } }, "tate_liza_double": { @@ -79,4 +79,4 @@ "1": "聂梓:这首歌献给大家!$玛俐:哥哥……" } } -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/dialogue-misc.json b/src/locales/zh_CN/dialogue-misc.json index 07aa336d4f6..b26a3a5f208 100644 --- a/src/locales/zh_CN/dialogue-misc.json +++ b/src/locales/zh_CN/dialogue-misc.json @@ -1,4 +1,4 @@ { "ending": "@c{shock}你回来了?@d{32} 也就是说…@d{96} 你赢了呀!?\n@c{smile_ehalf}我应该早料到了。\n$@c{smile_eclosed}当然…我一直有这种感觉\n@c{smile}一切都结束了,对么? 你打破了循环。\n$@c{smile_ehalf}你也完成了自己的梦想,不是吗?\n你甚至一次都没失败。\n$我是唯一能够记得你所作所为的人\n@c{angry_mopen}我会努力不忘掉哒!\n$@c{smile_wave_wink}开玩笑啦,@d{64} @c{smile}我才不会忘呢。@d{32}\n你的传奇将永远留存于我们心中。\n$@c{smile_wave}不管了,@d{64} 时候不早了@d{96} ,应该吧?\n在这地方还真搞不清楚。\n$一起回家吧。 @c{smile_wave_wink}可能明天,我们再来打一场,为了重温回忆嘛~", - "ending_female": "@c{smile}哦?你赢了?@d{96} @c{smile_eclosed}我应该早猜到了\n你回来了。\n$@c{smile}结束了。@d{64} 你终结了这个循环。\n$@c{serious_smile_fists}你也完成了自己的梦想,不是吗?\n你甚至一次都没失败。\n$@c{neutral}我是唯一能够记得你所作所为的人@d{96}\n我觉得这应该也还行吧?\n$@c{serious_smile_fists}你的传奇将永远留存于我们心中。\n$@c{smile_eclosed}不管了,我真是受够这个地方了,你也一样吗?我们回家吧。\n$@c{serious_smile_fists}可能等我们回家以后,再打一场?\n要是你想的话" + "ending_female": "@c{smile}哦?你赢了?@d{96} @c{smile_eclosed}我应该早猜到了\n你回来了。\n$@c{smile}结束了。@d{64} 你终结了这个循环。\n$@c{serious_smile_fists}你也完成了自己的梦想,不是吗?\n你甚至一次都没失败。\n$@c{neutral}我是唯一能够记得你所作所为的人@d{96}\n我觉得这应该也还行吧?\n$@c{serious_smile_fists}你的传奇将永远留存于我们心中。\n$@c{smile_eclosed}不管了,我真是受够这个地方了,你也一样吗?我们回家吧。\n$@c{serious_smile_fists}可能等我们回家以后,再打一场?\n要是你想的话" } diff --git a/src/locales/zh_CN/dialogue.json b/src/locales/zh_CN/dialogue.json index 5a4615fac54..dd0fa3fb3cc 100644 --- a/src/locales/zh_CN/dialogue.json +++ b/src/locales/zh_CN/dialogue.json @@ -388,7 +388,7 @@ "victory": { "1": "大失误……", "2": "以我现在的实力,无法胜任我的任务……", - "3": "原……谅我,坂木。\n我竟被一名训练师打败了。." + "3": "原……谅我,坂木。\n我竟被一名训练师打败了。" } }, "ariana": { @@ -1230,14 +1230,14 @@ }, "crasher_wake": { "encounter": { - "1": "极限! 极限! 看好了!$极限假面…就此…登场!", - "2": "极限! 极限! 极限假面!", + "1": "极限! 极限! 看好了!$极限假面…就此…登场!", + "2": "极限! 极限! 极限假面!", "3": "我是滔滔巨浪,将你冲走!" }, "victory": { "1": "我真是笑得合不拢嘴啊!$哈哈哈!那真是太有趣了!", "2": "呼哇!结束收尾了!$我该怎么说呢……$我还想再对战!我还想再继续战斗!", - "3": "啊啊啊啊啊!?" + "3": "啊啊啊啊啊!?" }, "defeat": { "1": "耶!就是这样!", @@ -1254,7 +1254,7 @@ "victory": { "1": "明白了……我会礼貌地退场。", "2": "输了就是输了。你确实很强大。", - "3": "…行吧! 嗯, 我输了。" + "3": "…行吧! 嗯, 我输了。" }, "defeat": { "1": "爸爸!我用你珍爱的飞行宝可梦赢了……", @@ -1576,7 +1576,7 @@ }, "clay": { "encounter": { - "1": "咳咳! 让我好等,不是吗,孩子?$好吧,是时候看看你能做到什么了!" + "1": "咳咳! 让我好等,不是吗,孩子?$好吧,是时候看看你能做到什么了!" }, "victory": { "1": "真是的……我先说好,\n我可没有手下留情。" @@ -1802,7 +1802,7 @@ "1": "够野的!你的想法比我的还要毒!" }, "defeat": { - "1": "嘿,拜托!认真点!\n你要加把劲啊!" + "1": "嘿,拜托!认真点!\n你要加把劲啊!" } }, "olivia": { @@ -1884,7 +1884,7 @@ }, "wikstrom": { "encounter": { - "1": "年轻的挑战者,幸会!\n我乃是著名的钢铁之刃,公爵雁铠! $让我们开始战斗吧!预备!" + "1": "年轻的挑战者,幸会!\n我乃是著名的钢铁之刃,公爵雁铠! $让我们开始战斗吧!预备!" }, "victory": { "1": "辉煌!你与你尊贵的\n宝可梦之间的信任居然胜过了我!" @@ -1921,7 +1921,7 @@ "2": "我知道你能走这么远。让我们开始吧。" }, "victory": { - "1": "被你拿下了啊。你太出色了!", + "1": "被你拿下了啊。你太出色了!", "2": "我从没想到会有另一个训练师打败我……$我很惊讶。" }, "defeat": { @@ -2025,13 +2025,13 @@ }, "red": { "encounter": { - "1": "…!" + "1": "…!" }, "victory": { - "1": "…?" + "1": "…?" }, "defeat": { - "1": "…!" + "1": "…!" } }, "jasmine": { @@ -2303,7 +2303,7 @@ }, "grant": { "encounter": { - "1": "我只期待一件事。. $通过超越彼此,\n我们找到通往更高境界的道路。" + "1": "我只期待一件事。$通过超越彼此,\n我们找到通往更高境界的道路。" }, "victory": { "1": "你是一堵我无法逾越的墙!" @@ -2413,7 +2413,7 @@ }, "marnie": { "encounter": { - "1": "事实上,言而总之… \n人家自己也想当冠军呀! $所以别认为我在针对你!" + "1": "事实上,言而总之… \n人家自己也想当冠军呀! $所以别认为我在针对你!" }, "victory": { "1": "好吧,我还是输了……\n但是我看到了很多你和你宝可梦的优点哦" @@ -2468,13 +2468,13 @@ }, "ryme": { "encounter": { - "1": "宝贝, 一起! \n摇滚摇到骨子里!" + "1": "宝贝, 一起! \n摇滚摇到骨子里!" }, "victory": { "1": "你好酷!我佩服!\n我的灵魂为你哭!" }, "defeat": { - "1": "再会, 宝贝!" + "1": "再会, 宝贝!" } }, "grusha": { @@ -2625,7 +2625,7 @@ }, "rival_3_female": { "encounter": { - "1": "@c{smile_wave}好久不见!还没输过,对吧。$@c{angry}我觉得你点烦了。@c{smile_wave_wink}开玩笑啦!$@c{smile_ehalf}但说真的,你现在不想家吗?\n不想…我吗?$我……我的意思是,我们真的很想你。$@c{smile_eclosed}我支持你的一切,包括你的梦想。\n但现实就是你早晚会经历失败。$@c{smile}当你失败的时候,我想像往常一样陪在你身边。$@c{angry_mopen}现在,给你看看我变得多强了吧!" + "1": "@c{smile_wave}好久不见!还没输过,对吧。$@c{angry}我觉得你点烦了。@c{smile_wave_wink}开玩笑啦!$@c{smile_ehalf}但说真的,你现在不想家吗?\n不想…我吗?$我……我的意思是,我们真的很想你。$@c{smile_eclosed}我支持你的一切,包括你的梦想。\n但现实就是你早晚会经历失败。$@c{smile}当你失败的时候,我想像往常一样陪在你身边。$@c{angry_mopen}现在,给你看看我变得多强了吧!" }, "victory": { "1": "@c{shock}都这样了……还是不够吗?$这样下去,你就永远不会回来了……" diff --git a/src/locales/zh_CN/fight-ui-handler.json b/src/locales/zh_CN/fight-ui-handler.json index 8496bf2c1ea..aa8bf4f77c5 100644 --- a/src/locales/zh_CN/fight-ui-handler.json +++ b/src/locales/zh_CN/fight-ui-handler.json @@ -2,6 +2,7 @@ "pp": "PP", "power": "威力", "accuracy": "命中", - "abilityFlyInText": " {{pokemonName}} 的 {{passive}}{{abilityName}}", - "passive": "被动 " -} \ No newline at end of file + "abilityFlyInText": " {{pokemonName}} 的\n{{passive}}{{abilityName}}", + "passive": "被动 ", + "teraHover": "{{type}} 太晶化" +} diff --git a/src/locales/zh_CN/modifier-type.json b/src/locales/zh_CN/modifier-type.json index 26e4c2dc110..981f26a1603 100644 --- a/src/locales/zh_CN/modifier-type.json +++ b/src/locales/zh_CN/modifier-type.json @@ -95,7 +95,7 @@ "description": "招式命中率增加{{accuracyAmount}}(最大100)。" }, "PokemonMultiHitModifierType": { - "description": "攻击以40/25/12.5%的伤害造成2/3/4次伤害" + "description": "攻击以60/75/82.5%的伤害造成2/3/4次伤害。" }, "TmModifierType": { "name": "招式学习器\n{{moveId}} - {{moveName}}", @@ -314,19 +314,19 @@ }, "BERRY_POUCH": { "name": "树果袋", - "description": "使用树果时有30%的几率不会消耗树果。" + "description": "使用树果时增加30%的几率不会消耗树果。" }, "FOCUS_BAND": { "name": "气势头带", - "description": "携带该道具的宝可梦有10%几率在受到攻击\n而将陷入濒死状态时,保留1点HP不陷入濒死状态。" + "description": "携带该道具的宝可梦增加10%几率在受到攻击\n而将陷入濒死状态时,保留1点HP不陷入濒死状态。" }, "QUICK_CLAW": { "name": "先制之爪", - "description": "有10%的几率无视速度优先使出招式\n(先制技能优先)。" + "description": "增加10%的几率无视速度优先使出招式\n(先制技能优先)。" }, "KINGS_ROCK": { "name": "王者之证", - "description": "使用任意原本不会造成畏缩状态的攻击,\n有10%几率使目标陷入畏缩状态。" + "description": "使用任意原本不会造成畏缩状态的攻击,\n增加10%几率使目标陷入畏缩状态。" }, "LEFTOVERS": { "name": "吃剩的东西", diff --git a/src/locales/zh_CN/move-trigger.json b/src/locales/zh_CN/move-trigger.json index 1eb4c397f45..436f1805c4e 100644 --- a/src/locales/zh_CN/move-trigger.json +++ b/src/locales/zh_CN/move-trigger.json @@ -42,12 +42,12 @@ "incineratedItem": "{{pokemonName}}烧没了\n{{targetName}}的{{itemName}}!", "knockedOffItem": "{{pokemonName}}拍落了\n{{targetName}}的{{itemName}}!", "tookMoveAttack": "{{pokemonName}}\n受到了{{moveName}}的攻击!", - "cutOwnHpAndMaximizedStat": "{{pokemonName}}\n削减了体力并释放了全部{{statName}}!", + "cutOwnHpAndMaximizedStat": "{{pokemonName}}\n削减了体力并释放了全部{{statName}}!", "copiedStatChanges": "{{pokemonName}}复制了\n{{targetName}}的能力变化!", "magnitudeMessage": "震级{{magnitude}}!", "tookAimAtTarget": "{{pokemonName}}将目标对准了\n{{targetName}}!", "transformedIntoType": "{{pokemonName}} \n变成了{{typeName}}属性!", - "copiedMove": "{{pokemonName}}\n复制了{{moveName}}!", + "copiedMove": "{{pokemonName}}\n复制了{{moveName}}!", "sketchedMove": "{{pokemonName}}\n对{{moveName}}进行了写生!", "acquiredAbility": "{{pokemonName}}的特性\n变为{{abilityName}}了!", "copiedTargetAbility": "{{pokemonName}}复制了\n{{targetName}}的{{abilityName}}!", @@ -66,5 +66,6 @@ "revivalBlessing": "{{pokemonName}}复活了!", "swapArenaTags": "{{pokemonName}}\n交换了双方的场地效果!", "exposedMove": "{{pokemonName}}识破了\n{{targetPokemonName}}的原型!", - "safeguard": "{{targetName}}\n正受到神秘之幕的保护!" -} \ No newline at end of file + "safeguard": "{{targetName}}\n正受到神秘之幕的保护!", + "afterYou": "{{pokemonName}}\n接受了对手的好意!" +} diff --git a/src/locales/zh_CN/party-ui-handler.json b/src/locales/zh_CN/party-ui-handler.json index db364d29ab2..8dff1ffb75c 100644 --- a/src/locales/zh_CN/party-ui-handler.json +++ b/src/locales/zh_CN/party-ui-handler.json @@ -23,7 +23,7 @@ "tooManyItems": "{{pokemonName}}拥有\n太多这个道具了!", "anyEffect": "即便使用也无效果哦。", "unpausedEvolutions": "{{pokemonName}}的进化停止了。", - "unspliceConfirmation": "真的要把{{fusionName}}\n从{{pokemonName}}身上分离吗? {{fusionName}}会就此消失。", + "unspliceConfirmation": "真的要把{{fusionName}}\n从{{pokemonName}}身上分离吗?{{fusionName}}会就此消失。", "wasReverted": "{{fusionName}}恢复成了{{pokemonName}}。", "releaseConfirmation": "你真要放生{{pokemonName}}吗?", "releaseInBattle": "你无法放生正在战斗中的宝可梦!", @@ -44,4 +44,4 @@ "untilWeMeetAgain": "下次再见了,{{pokemonName}}!", "sayonara": "撒由那拉,{{pokemonName}}!", "smellYaLater": "拜拜了您嘞,{{pokemonName}}!" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/pokemon-form.json b/src/locales/zh_CN/pokemon-form.json index 09ec54be804..e77f9bdb9fa 100644 --- a/src/locales/zh_CN/pokemon-form.json +++ b/src/locales/zh_CN/pokemon-form.json @@ -1,5 +1,5 @@ { - "pikachuCosplay": "服装", + "pikachuCosplay": "换装", "pikachuCoolCosplay": "摇滚巨星", "pikachuBeautyCosplay": "贵妇", "pikachuCuteCosplay": "流行偶像", @@ -167,4 +167,4 @@ "paldeaTaurosCombat": "斗战种", "paldeaTaurosBlaze": "火炽种", "paldeaTaurosAqua": "水澜种" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/splash-messages.json b/src/locales/zh_CN/splash-messages.json index f679c43cdb9..4d2d208edfd 100644 --- a/src/locales/zh_CN/splash-messages.json +++ b/src/locales/zh_CN/splash-messages.json @@ -6,7 +6,7 @@ "optionalSaveScumming": "可用SL大法!", "biomes": "35种地区!", "openSource": "开源!", - "playWithSpeed": "请五倍速游玩!", + "playWithSpeed": "请五倍速游玩!", "liveBugTesting": "随时修复BUG!", "heavyInfluence": "深受雨中冒险2影响!", "pokemonRiskAndPokemonRain": "雨中宝可梦冒险!", @@ -33,4 +33,4 @@ "eeveeExpo": "伊布博览会!", "ynoproject": "Yume Nikki 页游项目!", "breedersInSpace": "饲养员也能上太空?" -} \ No newline at end of file +} diff --git a/src/locales/zh_CN/starter-select-ui-handler.json b/src/locales/zh_CN/starter-select-ui-handler.json index d184d5f7c63..4851468ab7c 100644 --- a/src/locales/zh_CN/starter-select-ui-handler.json +++ b/src/locales/zh_CN/starter-select-ui-handler.json @@ -21,8 +21,8 @@ "toggleIVs": "显示个体", "manageMoves": "管理招式", "manageNature": "管理性格", - "addToFavorites": "Add to Favorites", - "removeFromFavorites": "Remove from Favorites", + "addToFavorites": "添加到最爱", + "removeFromFavorites": "移出最爱", "useCandies": "使用糖果", "selectNature": "选择性格", "selectMoveSwapOut": "选择要替换的招式。", @@ -42,4 +42,4 @@ "locked": "未解锁", "disabled": "已禁用", "uncaught": "未捕获" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/ability-trigger.json b/src/locales/zh_TW/ability-trigger.json index f31fb12bc35..c4b53fa5126 100644 --- a/src/locales/zh_TW/ability-trigger.json +++ b/src/locales/zh_TW/ability-trigger.json @@ -3,11 +3,62 @@ "badDreams": "{{pokemonName}} 被折磨着!", "costar": "{{pokemonName}} 複製了 {{allyName}} 的\n能力變化!", "iceFaceAvoidedDamage": "{{pokemonNameWithAffix}} 因爲 {{abilityName}}\n避免了傷害!", - "trace": "{{pokemonName}} 複製了 {{targetName}} 的\n{{abilityName}}!", - "windPowerCharged": "受 {{moveName}} 的影響, {{pokemonName}} 提升了能力!", + "perishBody": "因爲{{pokemonName}}的{{abilityName}}\n雙方將在3回合後滅亡!", + "poisonHeal": "{{pokemonName}}因{{abilityName}}\n回複了少許HP!", + "trace": "{{pokemonName}}複制了{{targetName}}的\n{{abilityName}}!", + "windPowerCharged": "受{{moveName}}的影響,{{pokemonName}}提升了能力!", + "quickDraw":"因爲速擊效果發動,\n{{pokemonName}}比平常出招更快了!", "disguiseAvoidedDamage": "{{pokemonNameWithAffix}}的畫皮脫落了!", + "blockItemTheft": "{{pokemonNameWithAffix}}的{{abilityName}}\n阻止了對方奪取道具!", + "typeImmunityHeal": "{{pokemonNameWithAffix}}因{{abilityName}}\n回複了少許HP!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}\n避免了傷害!", "fullHpResistType": "{{pokemonNameWithAffix}}讓甲殼綻放光輝,扭曲了屬性相剋關係!", + "moveImmunity": "對{{pokemonNameWithAffix}}沒有效果!", + "reverseDrain": "{{pokemonNameWithAffix}}\n吸到了汙泥漿!", + "postDefendTypeChange": "{{pokemonNameWithAffix}}因{{abilityName}}\n變成了{{typeName}}屬性!", + "postDefendContactDamage": "{{pokemonNameWithAffix}}的{{abilityName}}\n使對方受到了傷害!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}}\n互換了各自的特性!", + "postDefendAbilityGive": "因爲{{pokemonNameWithAffix}}\n對方的特性變成了{{abilityName}}!", + "postDefendMoveDisable": "封住了{{pokemonNameWithAffix}}的\n{{moveName}}!", + "pokemonTypeChange": "{{pokemonNameWithAffix}}\n變成了{{moveType}}屬性!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}}從{{defenderName}}那裏\n奪取了{{stolenItemType}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}}從{{attackerName}}那裏\n奪取了{{stolenItemType}}!", + "copyFaintedAllyAbility": "繼承了{{pokemonNameWithAffix}}的\n{{abilityName}}!", + "intimidateImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}沒有受到威嚇!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}}喝光了\n{{pokemonName}}泡的茶!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}的\n能力變化消失了!", + "postSummonTransform": "{{pokemonNameWithAffix}}\n變身成了{{targetName}}!", + "protectStat": "因{{pokemonNameWithAffix}}的{{abilityName}}\n{{statName}}不會降低!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}因{{abilityName}}\n{{statusEffectName}}沒有效果!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}\n異常狀態沒有效果!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}\n而不會{{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}}讀取了\n{{moveName}}!", + "frisk": "{{pokemonNameWithAffix}}察覺到了\n{{opponentName}}的{{opponentAbilityName}}!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}因{{abilityName}}\n回複了少許HP!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}}\n因{{abilityName}}而受到了傷害!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}}\n收獲了{{berryName}}!", + "postTurnHeal": "{{pokemonNameWithAffix}}因{{abilityName}}\n回複了少許HP!", + "fetchBall": "{{pokemonNameWithAffix}}\n撿回了{{pokeballName}}!", + "healFromBerryUse": "{{pokemonNameWithAffix}}因{{abilityName}}\n回複了HP!", + "arenaTrap": "因{{pokemonNameWithAffix}}的{{abilityName}}\n而無法進行替換!", + "postBattleLoot": "{{pokemonNameWithAffix}}撿到了\n{{itemName}}!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}的{{abilityName}}\n使對方受到了傷害!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}的{{abilityName}}\n使對方受到了傷害!", + "postSummonPressure": "從{{pokemonNameWithAffix}}的身上\n感到了一種壓迫感!", "weatherEffectDisappeared": "天氣的影響消失了!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}}\n打破了常規!", + "postSummonAnticipation": "{{pokemonNameWithAffix}}\n發抖了!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}}\n正在釋放熾焰氣場!", + "postSummonTeravolt": "{{pokemonNameWithAffix}}\n正在釋放濺射氣場!", + "postSummonDarkAura": "{{pokemonNameWithAffix}}\n正在釋放暗黑氣場!", + "postSummonFairyAura": "{{pokemonNameWithAffix}}\n正在釋放妖精氣場!", "postSummonAuraBreak": "{{pokemonNameWithAffix}}壓制了所有氣場!", + "postSummonNeutralizingGas": "周圍充滿了\n{{pokemonNameWithAffix}}的化學變化氣體!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}}\n同時擁有了兩種特性!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}}\n同時擁有了兩種特性!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}的災禍之鼎\n令周圍的寶可夢的{{statName}}減弱了!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}的災禍之劍\n令周圍的寶可夢的{{statName}}減弱了!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}的災禍之簡\n令周圍的寶可夢的{{statName}}減弱了!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}的災禍之玉\n令周圍的寶可夢的{{statName}}減弱了!", "preventBerryUse": "{{pokemonNameWithAffix}}因太緊張\n而無法食用樹果!" } diff --git a/src/locales/zh_TW/ability.json b/src/locales/zh_TW/ability.json index ddfe2783794..21206c5362a 100644 --- a/src/locales/zh_TW/ability.json +++ b/src/locales/zh_TW/ability.json @@ -469,7 +469,7 @@ }, "honeyGather": { "name": "採蜜", - "description": "The Pokémon gathers Honey after a battle. The Honey is then sold for money." + "description": "戰鬥結束時,有時候會撿來甜甜蜜。\n甜甜蜜會轉換成金錢。" }, "frisk": { "name": "察覺", @@ -1239,4 +1239,4 @@ "name": "毒傀儡", "description": "因為桃歹郎的招式而陷入中\n毒狀態的對手同時也會陷入\n混亂狀態。" } -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/achv.json b/src/locales/zh_TW/achv.json index 9edce2e368d..804ec0c5089 100644 --- a/src/locales/zh_TW/achv.json +++ b/src/locales/zh_TW/achv.json @@ -21,7 +21,7 @@ "name": "暴發戶" }, "DamageAchv": { - "description": "在單次攻擊中造成 {{damageAmount}} 點傷害" + "description": "在單次攻擊中造成\n {{damageAmount}} 點傷害" }, "250_DMG": { "name": "重拳出擊" @@ -36,7 +36,7 @@ "name": "一拳超人" }, "HealAchv": { - "description": "通過技能、能力或攜帶的道具一次性治療 {{healAmount}} {{HP}}點" + "description": "通過技能、能力或攜帶的道具\n一次性治療 {{healAmount}} {{HP}}點" }, "250_HEAL": { "name": "新手奶媽" @@ -82,11 +82,11 @@ }, "TRANSFER_MAX_STAT_STAGE": { "name": "團隊協作", - "description": "在一項屬性強化至最大時用接力棒傳遞給其他寶可夢" + "description": "在一項屬性強化至最大時用\n接力棒傳遞給其他寶可夢" }, "MAX_FRIENDSHIP": { "name": "親密無間", - "description": "使一隻寶可夢的親密度達到最大值" + "description": "使一隻寶可夢的親密度\n達到最大值" }, "MEGA_EVOLVE": { "name": "大變身", @@ -106,7 +106,7 @@ }, "SPLICE": { "name": "無限融合", - "description": "使用基因之楔將兩隻寶可夢融合在一起" + "description": "使用基因之楔將兩隻寶可夢\n融合在一起" }, "MINI_BLACK_HOLE": { "name": "一大洞的道具", @@ -130,7 +130,7 @@ }, "SHINY_PARTY": { "name": "嘔心瀝血", - "description": "擁有一支由閃光寶可夢組成的滿員隊伍" + "description": "擁有一支由閃光寶可夢組成\n的滿員隊伍" }, "HATCH_MYTHICAL": { "name": "幻獸蛋", @@ -138,7 +138,7 @@ }, "HATCH_SUB_LEGENDARY": { "name": "二級傳說蛋", - "description": "從蛋中孵化出一隻準傳說寶可夢" + "description": "從蛋中孵化出一隻準傳說\n寶可夢" }, "HATCH_LEGENDARY": { "name": "傳說蛋", @@ -150,16 +150,20 @@ }, "HIDDEN_ABILITY": { "name": "隱藏實力", - "description": "捕捉一隻擁有隱藏特性的寶可夢" + "description": "捕捉一隻擁有隱藏特性\n的寶可夢" }, "PERFECT_IVS": { "name": "合格證", - "description": "獲得一隻擁有完美個體值的寶可夢" + "description": "獲得一隻擁有完美個體值\n的寶可夢" }, "CLASSIC_VICTORY": { "name": "戰無不勝", "description": "在經典模式中通關遊戲" }, + "UNEVOLVED_CLASSIC_VICTORY": { + "name": "帶孩上班", + "description": "通關經典模式時隊伍中至少有\n一名未進化的寶可夢" + }, "MONO_GEN_ONE": { "name": "最初的勁敵", "description": "完成僅限第一世代的挑戰." @@ -253,6 +257,10 @@ "MONO_FAIRY": { "name": "林克,醒醒!" }, + "FRESH_START": { + "name": "初次嘗試!", + "description": "完成初次嘗試挑戰" + }, "INVERSE_BATTLE": { "name": "鏡子子鏡", "description": "完成逆轉之戰挑戰\n戰挑戰之轉逆成完" diff --git a/src/locales/zh_TW/arena-flyout.json b/src/locales/zh_TW/arena-flyout.json index 9e26dfeeb6e..e201b683543 100644 --- a/src/locales/zh_TW/arena-flyout.json +++ b/src/locales/zh_TW/arena-flyout.json @@ -1 +1,43 @@ -{} \ No newline at end of file +{ + "activeBattleEffects": "當前戰鬥效果", + "player": "我方", + "neutral": "全局", + "enemy": "敵方", + + "sunny": "大晴天", + "rain": "下雨", + "sandstorm": "沙暴", + "hail": "冰雹", + "snow": "下雪", + "fog": "起霧", + "heavyRain": "大雨", + "harshSun": "大日照", + "strongWinds": "亂流", + + "misty": "薄霧場地", + "electric": "電氣場地", + "grassy": "青草場地", + "psychic": "精神場地", + + "mudSport": "玩泥巴", + "waterSport": "玩水", + "spikes": "撒菱", + "toxicSpikes": "毒菱", + "mist": "白霧", + "futureSight": "預知未來", + "doomDesire": "破滅之願", + "wish": "祈願", + "stealthRock": "隱形岩", + "stickyWeb": "黏黏網", + "trickRoom": "戲法空間", + "gravity": "重力", + "reflect": "反射壁", + "lightScreen": "光牆", + "auroraVeil": "極光幕", + "quickGuard": "快速防守", + "wideGuard": "廣域防守", + "matBlock": "掀榻榻米", + "craftyShield": "戲法防守", + "tailwind": "順風", + "happyHour": "快樂時光" +} diff --git a/src/locales/zh_TW/arena-tag.json b/src/locales/zh_TW/arena-tag.json index 78246d9c44f..a6224f300a3 100644 --- a/src/locales/zh_TW/arena-tag.json +++ b/src/locales/zh_TW/arena-tag.json @@ -1,11 +1,57 @@ { + "yourTeam": "我方隊伍", + "opposingTeam": "敵方隊伍", + "arenaOnRemove": "{{moveName}}的效果消失了!", + "arenaOnRemovePlayer": "{{moveName}}在我方的效果消失了!", + "arenaOnRemoveEnemy": "{{moveName}}在敵方的效果消失了!", + "mistOnAdd": "{{pokemonNameWithAffix}}的一方被\n白霧包圍了!", + "mistApply": "正受到白霧的保護\n能力不會被降低!", + "reflectOnAdd": "反射壁使\n物理抗性提高了!", + "reflectOnAddPlayer": "反射壁使我方的\n物理抗性提高了!", + "reflectOnAddEnemy": "反射壁使敵方的\n物理抗性提高了!", + "lightScreenOnAdd": "光牆使\n特殊抗性提高了!", + "lightScreenOnAddPlayer": "光牆使我方的\n特殊抗性提高了!", + "lightScreenOnAddEnemy": "光牆使敵方的\n特殊抗性提高了!", + "auroraVeilOnAdd": "極光幕使\n物理和特殊抗性提高了!", + "auroraVeilOnAddPlayer": "極光幕使我方的\n物理和特殊抗性提高了!", + "auroraVeilOnAddEnemy": "極光幕使敵方的\n物理和特殊抗性提高了!", + "conditionalProtectOnAdd": "{{moveName}}\n保護了!", + "conditionalProtectOnAddPlayer": "{{moveName}}\n保護了我方!", + "conditionalProtectOnAddEnemy": "{{moveName}}\n保護了敵方!", + "conditionalProtectApply": "{{moveName}}\n保護了{{pokemonNameWithAffix}}!", + "matBlockOnAdd": "{{pokemonNameWithAffix}}正在\n伺機使出掀榻榻米!", "noCritOnAddPlayer": "{{moveName}}保護了你的\n隊伍不被擊中要害!", "noCritOnAddEnemy": "{{moveName}}保護了對方的\n隊伍不被擊中要害!", "noCritOnRemove": "{{pokemonNameWithAffix}}的{{moveName}}\n效果消失了!", + "wishTagOnAdd": "{{pokemonNameWithAffix}}的\n祈願實現了!", + "mudSportOnAdd": "電氣的威力減弱了!", + "mudSportOnRemove": "玩泥巴的效果消失了!", + "waterSportOnAdd": "火焰的威力減弱了!", + "waterSportOnRemove": "玩水的效果消失了!", + "spikesOnAdd": "{{opponentDesc}}腳下\n散落著{{moveName}}!", + "spikesActivateTrap": "{{pokemonNameWithAffix}}\n受到了撒菱的傷害!", + "toxicSpikesOnAdd": "{{opponentDesc}}腳下\n散落著{{moveName}}!", + "toxicSpikesActivateTrapPoison": "{{pokemonNameWithAffix}}\n吸收了{{moveName}}!", + "stealthRockOnAdd": "{{opponentDesc}}周圍\n開始浮現出尖銳的岩石!", + "stealthRockActivateTrap": "尖銳的岩石紮進了\n{{pokemonNameWithAffix}}的體內!", + "stickyWebOnAdd": "對方的腳下\n延伸出了{{moveName}}!", + "stickyWebActivateTrap": "{{pokemonName}}\n被黏黏網粘住了!", + "trickRoomOnAdd": "{{pokemonNameWithAffix}}\n扭曲了時空!", + "trickRoomOnRemove": "扭曲的時空複原了!", + "gravityOnAdd": "重力變強了!", + "gravityOnRemove": "重力複原了!", + "tailwindOnAdd": "從身後\n吹起了順風!", + "tailwindOnAddPlayer": "從我方身後\n吹起了順風!", + "tailwindOnAddEnemy": "從敵方身後\n吹起了順風!", + "tailwindOnRemove": "順風停止了!", + "tailwindOnRemovePlayer": "我方的順風停止了!", + "tailwindOnRemoveEnemy": "敵方的順風停止了!", + "happyHourOnAdd": "大家被歡樂的\n氣氛包圍了!", + "happyHourOnRemove": "氣氛回複到平常了。", "safeguardOnAdd": "整個場地被\n神秘之幕包圍了!", "safeguardOnAddPlayer": "我方被\n神秘之幕包圍了!", "safeguardOnAddEnemy": "對手被\n神秘之幕包圍了!", "safeguardOnRemove": "包圍整個場地的\n神秘之幕消失了!", "safeguardOnRemovePlayer": "包圍我方的\n神秘之幕消失了!", "safeguardOnRemoveEnemy": "包圍對手的\n神秘之幕消失了!" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/battle.json b/src/locales/zh_TW/battle.json index 0d44688ff4a..66da1b7cace 100644 --- a/src/locales/zh_TW/battle.json +++ b/src/locales/zh_TW/battle.json @@ -1,69 +1,98 @@ { - "bossAppeared": "{{bossName}} 出現了.", + "bossAppeared": "{{bossName}} 出現了。", "trainerAppeared": "{{trainerName}}\n想要和你對戰!", "trainerAppearedDouble": "{{trainerName}}\n想要和你對戰!", - "singleWildAppeared": "一隻野生的 {{pokemonName}} 出現了!", - "multiWildAppeared": "野生的 {{pokemonName1}}\n和 {{pokemonName2}} 出現了!", - "playerComeBack": "回來吧, {{pokemonName}}!", - "trainerComeBack": "{{trainerName}} 收回了 {{pokemonName}}!", - "playerGo": "去吧! {{pokemonName}}!", - "trainerGo": "{{trainerName}} 派出了 {{pokemonName}}!", + "trainerSendOut": "{{trainerName}}派出了\n{{pokemonName}}!", + "singleWildAppeared": "一只野生的{{pokemonName}}出現了!", + "multiWildAppeared": "野生的{{pokemonName1}}\n和{{pokemonName2}}出現了!", + "playerComeBack": "回來吧,{{pokemonName}}!", + "trainerComeBack": "{{trainerName}}收回了{{pokemonName}}!", + "playerGo": "去吧!{{pokemonName}}!", + "trainerGo": "{{trainerName}}派出了\n{{pokemonName}}!", + "trainerSendOut": "{{trainerName}}派出了\n{{pokemonName}}!", + "singleWildAppeared": "一只野生的{{pokemonName}}出現了!", + "multiWildAppeared": "野生的{{pokemonName1}}\n和{{pokemonName2}}出現了!", + "playerComeBack": "回來吧,{{pokemonName}}!", + "trainerComeBack": "{{trainerName}}收回了{{pokemonName}}!", + "playerGo": "去吧!{{pokemonName}}!", + "trainerGo": "{{trainerName}}派出了\n{{pokemonName}}!", "switchQuestion": "要更換\n{{pokemonName}}嗎?", "trainerDefeated": "你擊敗了\n{{trainerName}}!", - "moneyPickedUp": "撿到了 ₽{{moneyAmount}}!", - "pokemonCaught": "{{pokemonName}} 被抓住了!", + "moneyWon": "你贏得了\n₽{{moneyAmount}}!", + "moneyPickedUp": "撿到了₽{{moneyAmount}}!", + "pokemonCaught": "{{pokemonName}}被抓住了!", + "addedAsAStarter": "增加了{{pokemonName}}作爲\n一個新的基礎寶可夢!", + "partyFull": "你的隊伍已滿員。是否放生其他寶可夢\n爲{{pokemonName}}騰出空間?", "pokemon": "寶可夢", - "sendOutPokemon": "上吧! {{pokemonName}}!", + "sendOutPokemon": "上吧!\n{{pokemonName}}!", "hitResultCriticalHit": "擊中了要害!", "hitResultSuperEffective": "效果拔群!", "hitResultNotVeryEffective": "收效甚微…", - "hitResultNoEffect": "對 {{pokemonName}} 沒有效果!", + "hitResultNoEffect": "對{{pokemonName}}沒有效果!", "hitResultImmune": "對于{{pokemonName}},\n完全沒有效果!", - "hitResultOneHitKO": "一擊切殺!", + "hitResultOneHitKO": "一擊必殺!", "attackFailed": "但是失敗了!", "attackMissed": "沒有命中{{pokemonNameWithAffix}}!", - "attackHitsCount": "擊中 {{count}} 次!", - "rewardGain": "You received\n{{modifierName}}!", - "expGain": "{{pokemonName}} 獲得了 {{exp}} 經驗值!", - "levelUp": "{{pokemonName}} 升級到 Lv. {{level}}!", - "learnMove": "{{pokemonName}} 學會了{{moveName}}!", - "learnMovePrompt": "{{pokemonName}} 想要學習 {{moveName}}.", - "learnMoveLimitReached": "但是, {{pokemonName}} 已經學會了\n四個招式.", - "learnMoveReplaceQuestion": "要忘記一個招式並學習 {{moveName}} 嗎?", - "learnMoveStopTeaching": "不再嘗試學習\n{{moveName}}嗎?", - "learnMoveNotLearned": "{{pokemonName}} 沒有學會 {{moveName}}.", + "attackHitsCount": "擊中{{count}}次!", + "rewardGain": "你獲得了\n{{modifierName}}!", + "expGain": "{{pokemonName}}獲得了{{exp}} 點經驗值!", + "levelUp": "{{pokemonName}}升級到Lv.{{level}}!", + "learnMove": "{{pokemonName}}學會了{{moveName}}!", + "learnMovePrompt": "{{pokemonName}}想要學習{{moveName}}。", + "learnMoveLimitReached": "但是,{{pokemonName}}已經學會了\n四個技能", + "learnMoveReplaceQuestion": "要忘記一個技能並學習{{moveName}}嗎?", + "learnMoveStopTeaching": "不再嘗試學習{{moveName}}?", + "learnMoveNotLearned": "{{pokemonName}}沒有學會{{moveName}}。", "learnMoveForgetQuestion": "要忘記哪個技能?", - "learnMoveForgetSuccess": "{{pokemonName}} 忘記了 {{moveName}}.", - "countdownPoof": "@d{32}1, @d{15}2, 和@d{15}… @d{15}… @d{15}… @d{15}@s{se/pb_bounce_1}噗!", - "learnMoveAnd": "然後…", - "levelCapUp": "等級上限提升到 {{levelCap}}!", - "moveNotImplemented": "{{moveName}} 未實裝,無法選擇。", + "learnMoveForgetSuccess": "{{pokemonName}}忘記了\n如何使用{{moveName}}。", + "countdownPoof": "@d{32}1, @d{15}2 @d{15}… @d{15}… @d{15}@s{pb_bounce_1}空!", + "learnMoveAnd": "然後……", + "levelCapUp": "等級上限提升到{{levelCap}}!", + "moveNotImplemented": "{{moveName}}尚未實裝,無法選擇。", "moveNoPP": "這個技能的PP用完了", - "moveDisabled": "{{moveName}} 被禁用!", + "moveDisabled": "{{moveName}}被禁用!", "disableInterruptedMove": "{{pokemonNameWithAffix}}的{{moveName}}\n被無效化了!", "noPokeballForce": "一股無形的力量阻止了你使用精靈球。", "noPokeballTrainer": "你不能捕捉其他訓練家的寶可夢!", - "noPokeballMulti": "只能在剩下一隻寶可夢時才能扔出精靈球!", - "noPokeballStrong": "目標寶可夢太強了,無法捕捉!你需要先\n削弱它!", + "noPokeballMulti": "只能在剩下一只寶可夢時才能扔出精靈球!", + "noPokeballStrong": "目標寶可夢太強了,無法捕捉!\n你需要先削弱它!", "noEscapeForce": "一股無形的力量阻止你逃跑。", - "noEscapeTrainer": "你不能從訓練家對戰中逃跑!", - "noEscapePokemon": "{{pokemonName}} 的 {{moveName}} 阻止了你 {{escapeVerb}}!", - "runAwaySuccess": "你成功逃脫了!", - "runAwayCannotEscape": "你無法逃脫!", + "noEscapeTrainer": "你不能從與訓練家的戰鬥中逃跑!", + "noEscapePokemon": "{{pokemonName}}的{{moveName}}\n阻止了你{{escapeVerb}}!", + "runAwaySuccess": "成功逃走了!", + "runAwayCannotEscape": "無法逃走!", "escapeVerbSwitch": "切換", "escapeVerbFlee": "逃跑", - "ppHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回復了{{moveName}}的PP!", - "hpHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回復了體力!", - "notDisabled": "{{moveName}} 不再被禁用!", - "skipItemQuestion": "你要跳過拾取道具嗎?", - "itemStackFull": "{{fullItemName}}持有數已達到上限,\n你獲得了{{itemName}}作爲代替。", + "notDisabled": "{{moveName}}不再被禁用!", + "turnEndHpRestore": "{{pokemonName}}的體力恢複了。", + "hpIsFull": "{{pokemonName}}的體力已滿!", + "skipItemQuestion": "你確定要跳過拾取道具嗎?", + "itemStackFull": "{{fullItemName}}持有數達到上限,\n你獲得了{{itemName}}作爲替代。", "eggHatching": "咦?", - "ivScannerUseQuestion": "對 {{pokemonName}} 使用個體值掃描儀?", - "wildPokemonWithAffix": "野生的 {{pokemonName}}", - "foePokemonWithAffix": "對手 {{pokemonName}}", - "useMove": "{{pokemonNameWithAffix}} 使用了 {{moveName}}!", - "drainMessage": "{{pokemonName}} 吸取了體力!", - "regainHealth": "{{pokemonName}} 回復了體力!", - "fainted": "{{pokemonNameWithAffix}} 倒下了!", - "ppReduced": "降低了 {{targetName}} 的\n{{moveName}} 的PP{{reduction}}點!" + "stealEatBerry": "{{pokemonName}}奪取並吃掉了\n{{targetName}}的{{berryName}}!", + "ppHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回複了{{moveName}}的PP!", + "hpHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回複了體力!", + "ivScannerUseQuestion": "對{{pokemonName}}使用個體值掃描儀?", + "wildPokemonWithAffix": "野生的{{pokemonName}}", + "foePokemonWithAffix": "對手的{{pokemonName}}", + "useMove": "{{pokemonNameWithAffix}}使用了\n{{moveName}}!", + "drainMessage": "{{pokemonName}}\n吸取了體力!", + "regainHealth": "{{pokemonName}}\n回複了體力!", + "fainted": "{{pokemonNameWithAffix}}\n倒下了!", + "statsAnd": "和", + "stats": "能力", + "statRose_other": "{{pokemonNameWithAffix}}的{{stats}}提高了!", + "statSharplyRose_other": "{{pokemonNameWithAffix}}的{{stats}}大幅提高了!", + "statRoseDrastically_other": "{{pokemonNameWithAffix}}的{{stats}}極大幅提高了!", + "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}的{{stats}}已經無法再提高了!", + "statFell_other": "{{pokemonNameWithAffix}}的{{stats}}降低了!", + "statHarshlyFell_other": "{{pokemonNameWithAffix}}的{{stats}}大幅降低了!", + "statSeverelyFell_other": "{{pokemonNameWithAffix}}的{{stats}}極大幅降低了!", + "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}的{{stats}}已經無法再降低了!", + "transformedIntoType": "{{pokemonName}}變成了\n{{type}}屬性!", + "ppReduced": "降低了{{targetName}}的\n{{moveName}}的PP{{reduction}}點!", + "retryBattle": "你要從對戰開始時重試麽?", + "unlockedSomething": "{{unlockedThing}}\n已解鎖。", + "congratulations": "恭喜!", + "beatModeFirstTime": "{{speciesName}}首次擊敗了{{gameMode}}!\n你獲得了{{newModifier}}!" } diff --git a/src/locales/zh_TW/battler-tags.json b/src/locales/zh_TW/battler-tags.json index b5a2760f7ac..9653db1077a 100644 --- a/src/locales/zh_TW/battler-tags.json +++ b/src/locales/zh_TW/battler-tags.json @@ -67,6 +67,8 @@ "saltCuredLapse": "{{pokemonNameWithAffix}} 受到了{{moveName}}的傷害!", "cursedOnAdd": "{{pokemonNameWithAffix}}削減了自己的體力,並詛咒了{{pokemonName}}!", "cursedLapse": "{{pokemonNameWithAffix}}正受到詛咒!", + "stockpilingOnAdd": "{{pokemonNameWithAffix}}蓄力了{{stockpiledCount}}次!", "disabledOnAdd": "封住了{{pokemonNameWithAffix}}的\n{moveName}}!", - "disabledLapse": "{{pokemonNameWithAffix}}的\n定身法解除了!" + "disabledLapse": "{{pokemonNameWithAffix}}的\n定身法解除了!", + "tarShotOnAdd": "{{pokemonNameWithAffix}}\n變得怕火了!" } diff --git a/src/locales/zh_TW/bgm-name.json b/src/locales/zh_TW/bgm-name.json index 9e26dfeeb6e..e8546750977 100644 --- a/src/locales/zh_TW/bgm-name.json +++ b/src/locales/zh_TW/bgm-name.json @@ -1 +1,141 @@ -{} \ No newline at end of file +{ + "music": "Music: ", + "missing_entries" : "{{name}}", + "battle_kanto_champion": "黑2白2「決戰!關都冠軍」", + "battle_johto_champion": "黑2白2「決戰!城都冠軍」", + "battle_hoenn_champion_g5": "黑2白2「決戰!豐緣冠軍」", + "battle_hoenn_champion_g6": "Ω紅寶石α藍寶石「決戰!豐緣冠軍」", + "battle_sinnoh_champion": "黑2白2「決戰!神奧冠軍」", + "battle_champion_alder": "黑白「決戰!合衆冠軍」", + "battle_champion_iris": "黑2白2「決戰!合衆冠軍」", + "battle_kalos_champion": "XY「決戰!卡洛斯冠軍」", + "battle_alola_champion": "究極日月「頂上決戰!」", + "battle_galar_champion": "劍盾「決戰!伽勒爾冠軍」", + "battle_champion_geeta": "朱紫「決戰!帕底亞首席也慈」", + "battle_champion_nemona": "朱紫「決戰!帕底亞冠軍妮莫」", + "battle_champion_kieran": "朱紫「決戰!藍莓學園冠軍烏栗」", + "battle_hoenn_elite": "Ω紅寶石α藍寶石 「戰鬥!豐緣四天王」", + "battle_unova_elite": "黑白 「戰鬥!合衆四天王」", + "battle_kalos_elite": "XY「戰鬥!卡洛斯四天王」", + "battle_alola_elite": "日月「戰鬥!阿羅拉四天王」", + "battle_galar_elite": "劍盾「聯盟錦標賽」", + "battle_paldea_elite": "朱紫「戰鬥!帕底亞四天王」", + "battle_bb_elite": "朱紫「戰鬥!藍之圓盤四天王」", + "battle_final_encounter": "探險隊DX 「裂空座的領域」", + "battle_final": "黑白「戰鬥!魁奇思」", + "battle_kanto_gym": "黑2白2「戰鬥!關都道館主」", + "battle_johto_gym": "黑2白2「戰鬥!城都道館主」", + "battle_hoenn_gym": "黑2白2「戰鬥!合衆道館主」", + "battle_sinnoh_gym": "黑2白2「戰鬥!神奧道館主」", + "battle_unova_gym": "黑白「戰鬥!合衆道館主」", + "battle_kalos_gym": "XY「戰鬥!卡洛斯道館主」", + "battle_galar_gym": "劍盾「戰鬥!伽勒爾道館主」", + "battle_paldea_gym": "朱紫「戰鬥!帕底亞道館主」", + "battle_legendary_kanto": "XY「戰鬥!傳說寶可夢(關都)」", + "battle_legendary_raikou": "心金魂銀「戰鬥!雷公」", + "battle_legendary_entei": "心金魂銀「戰鬥!炎帝」", + "battle_legendary_suicune": "心金魂銀「戰鬥!水君」", + "battle_legendary_lugia": "心金魂銀「戰鬥!洛奇亞」", + "battle_legendary_ho_oh": "心金魂銀「戰鬥!鳳王」", + "battle_legendary_regis_g5": "黑2白2「戰鬥!傳說中的巨人」", + "battle_legendary_regis_g6": "Ω紅寶石α藍寶石「戰鬥!傳說中的巨人」", + "battle_legendary_gro_kyo": "Ω紅寶石α藍寶石「戰鬥!原始回歸」", + "battle_legendary_rayquaza": "Ω紅寶石α藍寶石「戰鬥!超古代寶可夢」", + "battle_legendary_deoxys": "Ω紅寶石α藍寶石「戰鬥!代歐奇希斯」", + "battle_legendary_lake_trio": "Ω紅寶石α藍寶石「戰鬥!由克希・艾姆利多・亞克諾姆」", + "battle_legendary_sinnoh": "Ω紅寶石α藍寶石「戰鬥!傳說的寶可夢」", + "battle_legendary_dia_pal": "Ω紅寶石α藍寶石「戰鬥!帝牙盧卡・帕路奇亞」", + "battle_legendary_giratina": "Ω紅寶石α藍寶石「戰鬥!騎拉帝納」", + "battle_legendary_arceus": "心金魂銀「阿爾宙斯」", + "battle_legendary_unova": "黑白「戰鬥!傳說的寶可夢」", + "battle_legendary_kyurem": "黑白「戰鬥!酋雷姆」", + "battle_legendary_res_zek": "黑白「戰鬥!萊希拉姆・捷克羅姆」", + "battle_legendary_xern_yvel": "XY「戰鬥!哲爾尼亞斯・伊裴爾塔爾」", + "battle_legendary_tapu": "日月「戰鬥!卡璞」", + "battle_legendary_sol_lun": "日月「戰鬥!露奈雅拉・索爾迦雷歐」", + "battle_legendary_ub": "日月「戰鬥!究極異獸」", + "battle_legendary_dusk_dawn": "究極日月「戰鬥!日食・月食 奈克洛茲瑪」", + "battle_legendary_ultra_nec": "究極日月「戰鬥!究極奈克洛茲瑪」", + "battle_legendary_zac_zam": "劍盾「戰鬥!蒼響・藏瑪然特」", + "battle_legendary_glas_spec": "劍盾「戰鬥! 雪暴馬・靈幽馬」", + "battle_legendary_calyrex": "劍盾「戰鬥!蕾冠王」", + "battle_legendary_birds_galar": "劍盾「戰鬥!傳說的鳥寶可夢」", + "battle_legendary_ruinous": "朱紫「戰鬥!災厄寶可夢」", + "battle_legendary_kor_mir": "朱紫「戰鬥!第零區的寶可夢2」", + "battle_legendary_loyal_three": "朱紫「戰鬥!寶伴」", + "battle_legendary_ogerpon": "朱紫「戰鬥!厄鬼椪」", + "battle_legendary_terapagos": "朱紫「戰鬥!太樂巴戈斯」", + "battle_legendary_pecharunt": "朱紫「戰鬥!桃歹郎」", + "battle_rival": "黑白「戰鬥!黑連・貝爾」", + "battle_rival_2": "黑白「戰鬥!N」", + "battle_rival_3": "黑白「決戰!N」", + "battle_trainer": "黑白「戰鬥!訓練師」", + "battle_wild": "黑白「戰鬥!野生寶可夢」", + "battle_wild_strong": "黑白「戰鬥!強大野生寶可夢」", + "end_summit": "探險隊DX 「天空之柱 頂層」", + "battle_rocket_grunt": "心金魂銀「戰鬥!火箭隊」", + "battle_aqua_magma_grunt": "Ω紅寶石α藍寶石「戰鬥!熔岩隊・海洋隊」", + "battle_galactic_grunt": "晶燦鑽石·明亮珍珠「戰鬥!銀河隊」", + "battle_plasma_grunt": "黑白「戰鬥!等離子團」", + "battle_flare_grunt": "XY「戰鬥!閃焰隊」", + "battle_rocket_boss": "究極日月「戰鬥!坂木」", + "battle_aqua_magma_boss": "Ω紅寶石α藍寶石「戰鬥!水梧桐・赤焰松」", + "battle_galactic_boss": "晶燦鑽石·明亮珍珠「戰鬥!赤日」", + "battle_plasma_boss": "黑2白2「戰鬥!魁奇思」", + "battle_flare_boss": "XY「戰鬥!弗拉達利」", + + "abyss": "空之探險隊「黑暗小丘」", + "badlands": "空之探險隊「枯竭之谷」", + "beach": "空之探險隊「潮濕岩地」", + "cave": "空之探險隊「天空頂端(洞窟)」", + "construction_site": "空之探險隊「幻影石室」", + "desert": "空之探險隊「北方沙漠」", + "dojo": "空之探險隊「嘎啦嘎啦道場」", + "end": "探險隊DX「天空之柱」", + "factory": "空之探險隊「隱藏遺迹」", + "fairy_cave": "空之探險隊「星之洞窟」", + "forest": "空之探險隊「黑暗森林」", + "grass": "空之探險隊「蘋果森林」", + "graveyard": "空之探險隊「神秘森林」", + "ice_cave": "空之探險隊「大冰山」", + "island": "空之探險隊「沿岸岩地」", + "jungle": "Lmz - 叢林", + "laboratory": "Firel - 研究所", + "lake": "空之探險隊「水晶洞窟」", + "meadow": "空之探險隊「天空頂端(森林)」", + "metropolis": "Firel - 城市", + "mountain": "空之探險隊「角山」", + "plains": "空之探險隊「天空頂端(草原)」", + "power_plant": "空之探險隊「電氣平原 深處」", + "ruins": "空之探險隊「封印岩地 深處」", + "sea": "Andr06 - 海洋之秘", + "seabed": "Firel - 海底", + "slum": "Andr06 - 狡猾的雪吞蟲", + "snowy_forest": "空之探險隊「天空頂端(雪山)」", + "space": "Firel - 太空", + "swamp": "空之探險隊「封閉之海」", + "tall_grass": "空之探險隊「濃霧森林」", + "temple": "空之探險隊「守護洞穴」", + "town": "空之探險隊「隨機迷宮3」", + "volcano": "空之探險隊「熱水洞窟」", + "wasteland": "空之探險隊「夢幻高原」", + + "encounter_ace_trainer": "黑白 「視線!精英訓練師」", + "encounter_backpacker": "黑白 「視線!背包客」", + "encounter_clerk": "黑白 「視線!上班族」", + "encounter_cyclist": "黑白 「視線!自行車手」", + "encounter_lass": "黑白 「視線!迷你裙」", + "encounter_parasol_lady": "黑白 「視線!陽傘姐姐」", + "encounter_pokefan": "黑白 「視線!寶可夢愛好者」", + "encounter_psychic": "黑白 「視線!超能力者」", + "encounter_rich": "黑白 「視線!紳士」", + "encounter_rival": "黑白「黑連」", + "encounter_roughneck": "黑白 「視線!光頭」", + "encounter_scientist": "黑白 「視線!科學家」", + "encounter_twins": "黑白 「視線!雙胞胎」", + "encounter_youngster": "黑白 「視線!短褲小子」", + + "heal": "黑白「寶可夢回複」", + "menu": "空之探險隊「歡迎來到寶可夢的世界」", + "title": "空之探險隊「主題曲」" +} diff --git a/src/locales/zh_TW/challenges.json b/src/locales/zh_TW/challenges.json index a1fc6b8f50f..f600cc24a84 100644 --- a/src/locales/zh_TW/challenges.json +++ b/src/locales/zh_TW/challenges.json @@ -20,6 +20,12 @@ "desc": "你只能使用{{type}}\n屬性的寶可夢", "desc_default": "你只能使用所選\n屬性的寶可夢" }, + "freshStart": { + "name": "初次嘗試", + "desc": "你只能使用禦三家,就像是你第一次玩寶可夢肉鴿一樣。", + "value.0": "關閉", + "value.1": "開啓" + }, "inverseBattle": { "name": "逆轉之戰", "shortName": "逆轉之戰", @@ -27,4 +33,4 @@ "value.0": "關閉", "value.1": "開啓" } -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/common.json b/src/locales/zh_TW/common.json index 29ac963ebc3..8b0f91802ee 100644 --- a/src/locales/zh_TW/common.json +++ b/src/locales/zh_TW/common.json @@ -1,8 +1,8 @@ { "start": "開始", - "luckIndicator": "Luck:", - "shinyOnHover": "Shiny", + "luckIndicator": "幸運:", + "shinyOnHover": "閃光", "commonShiny": "常見", "rareShiny": "稀有", "epicShiny": "史詩" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/dialogue-double-battle.json b/src/locales/zh_TW/dialogue-double-battle.json index 684beac5eaf..612bf3d4490 100644 --- a/src/locales/zh_TW/dialogue-double-battle.json +++ b/src/locales/zh_TW/dialogue-double-battle.json @@ -9,10 +9,10 @@ }, "red_blue_double": { "encounter": { - "1": "赤紅: ...!$青綠:他人狠話不多。$青綠: 他人狠話不多。$青綠: 但別被他耍了,\n畢竟他可是個冠軍!" + "1": "赤紅: ...!$青綠:他人狠話不多。$青綠: 他人狠話不多。$青綠: 但別被他耍了,\n畢竟他可是個冠軍!" }, "victory": { - "1": "赤紅: ...!$青綠: 下次我們一定會贏你!" + "1": "赤紅: ...!$青綠: 下次我們一定會贏你!" } }, "tate_liza_double": { @@ -79,4 +79,4 @@ "1": "聶梓:這首歌獻給大家!$瑪俐:哥哥……" } } -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/dialogue-misc.json b/src/locales/zh_TW/dialogue-misc.json index 408bcac546b..73771e96027 100644 --- a/src/locales/zh_TW/dialogue-misc.json +++ b/src/locales/zh_TW/dialogue-misc.json @@ -1,4 +1,4 @@ { "ending": "@c{shock}你回來了?@d{32} 也就是說…@d{96} 你贏了呀!?\n@c{smile_ehalf}我應該早料到了。\n$@c{smile_eclosed}當然…我一直有這種感覺\n@c{smile}一切都結束了,對麼? 你打破了循環。\n$@c{smile_ehalf}你也完成了自己的夢想,不是嗎?\n你甚至一次都沒失敗。\n$我是唯一能夠記得你所作所為的人\n@c{angry_mopen}我會努力不忘掉哒!\n$@c{smile_wave_wink}開玩笑啦,@d{64} @c{smile}我才不會忘呢。@d{32}\n你的傳奇將永遠留存於我們心中。\n$@c{smile_wave}不管了,@d{64} 時候不早了@d{96} ,應該吧?\n在這地方還真搞不清楚。\n$一起回家吧。 @c{smile_wave_wink}可能明天,我們再來打一場,為了重溫回憶嘛~", - "ending_female": "@c{smile}哦?你贏了?@d{96} @c{smile_eclosed}我應該早猜到了\n你回來了。\n$@c{smile}結束了。@d{64} 你終結了這個循環。\n$@c{serious_smile_fists}你也完成了自己的夢想,不是嗎?\n你甚至一次都沒失敗。\n$@c{neutral}我是唯一能夠記得你所作所為的人@d{96}\n我覺得這應該也還行吧?\n$@c{serious_smile_fists}你的傳奇將永遠留存於我們心中。\n$@c{smile_eclosed}不管了,我真是受夠這個地方了,你也一樣嗎?我們回家吧。\n$@c{serious_smile_fists}可能等我們回家以後,再打一場?\n要是你想的話" + "ending_female": "@c{smile}哦?你贏了?@d{96} @c{smile_eclosed}我應該早猜到了\n你回來了。\n$@c{smile}結束了。@d{64} 你終結了這個循環。\n$@c{serious_smile_fists}你也完成了自己的夢想,不是嗎?\n你甚至一次都沒失敗。\n$@c{neutral}我是唯一能夠記得你所作所為的人@d{96}\n我覺得這應該也還行吧?\n$@c{serious_smile_fists}你的傳奇將永遠留存於我們心中。\n$@c{smile_eclosed}不管了,我真是受夠這個地方了,你也一樣嗎?我們回家吧。\n$@c{serious_smile_fists}可能等我們回家以後,再打一場?\n要是你想的話" } diff --git a/src/locales/zh_TW/dialogue.json b/src/locales/zh_TW/dialogue.json index 4236e239622..99427ac5f14 100644 --- a/src/locales/zh_TW/dialogue.json +++ b/src/locales/zh_TW/dialogue.json @@ -379,6 +379,414 @@ "3": "好像是我暈船了…" } }, + "archer": { + "encounter": { + "1": "在你繼續前進之前,\n讓我看看你要如何和對付火箭隊。", + "2": "我收到報告說你的實力與衆不同,\n就讓我來看看這是否屬實吧。", + "3": "我是阿波羅,火箭對的幹部。\n我不會對組織的敵人手軟。" + }, + "victory": { + "1": "大失誤……", + "2": "以我現在的實力,無法勝任我的任務……", + "3": "原……諒我,坂木。\n我竟被一名訓練師打敗了。." + } + }, + "ariana": { + "encounter": { + "1": "站住!我們可不能放過你!$這會損傷火箭對的名譽,明白嗎?", + "2": "我不知道也不想知道我的所作所爲正確與否…$我只要遵從坂木老大的指令就可以了!", + "3": "你的旅途到此爲止了,我會把你狠狠扳倒!" + }, + "victory": { + "1": "切,你好強,可惡。$如果你加入火箭隊,肯定能成爲幹部。", + "2": "好……好崩潰……", + "3": "嗯啊啊!這不可能!我使出全力還是輸了!" + } + }, + "proton": { + "encounter": { + "1": "你想幹什麽?如果你要妨礙我們的事業,我可不會手下留情。", + "2": "你在這幹什麽?別人總說我是火箭隊裏最殘忍和恐怖的人…$我強烈推薦你別來礙我們的事!", + "3": "我是蘭斯,火箭隊的幹部。就讓來掃除你對我們的阻撓。" + }, + "victory": { + "1": "我的防線崩潰了……", + "2": "你雖然這次贏了,但是這只是讓火箭隊的怒火繼續燃燒!", + "3": "我輸了…但是我不會忘記的。" + } + }, + + "petrel": { + "encounter": { + "1": "哇哈哈哈,我們一直在等你。我?你不知道我是誰?是我,坂木啊。$偉大的坂木大人本人!哇哈哈哈!…啊?我聽起來不像坂木嗎?$我連看起來都不像?怎麽會呢,我可認真的變裝了!", + "2": "我是拉姆達,火箭隊的幹部。我不會允許你幹涉我們的計劃!", + "3": "火箭隊幹部拉姆達來會會這個入侵者!" + }, + "victory": { + "1": "好好好,我會說他在哪的", + "2": "我……我什麽也做不了……坂木,請原諒我……", + "3": "不,我不能慌了神,必須通知其他人…" + } + }, + "tabitha": { + "encounter": { + "1": "呵呵呵!原來你都一路來到這裏了!但你來晚了!", + "2": "呵呵呵……你終于來了?我們小瞧你了,沒不過事! $我比你見過的所有隊員都要厲害,我可不會拖延時間。$我會把你碾碎!", + "3": "我要讓你嘗嘗痛苦的滋味!認命吧!" + }, + "victory": { + "1": "呵呵呵!雖然你打敗了我,但你根本沒機會打敗老大!$如果你現在輸了,你就不用面對那樣嚴厲的鞭笞了!", + "2": "呵呵呵……所以,我也輸了……", + "3": "啊哈!怎麽會這樣?像我這樣的幹部\n竟然輸給了一個隨處可見的訓練師……" + } + }, + "courtney": { + "encounter": { + "1": "那個東西……你所擁有的那個東西……\n那就是……那就是我們熔岩隊所尋找的東西……", + "2": "……那麽……刪除記憶……", + "3": "……哈……分析中……啊哈♪" + }, + "victory": { + "1": "……改變……世界。", + "2": "如預期。出乎意料。目標鎖定…鎖定你……完成。$開始……實驗。材料是你…永遠…啊哈……♪", + "3": "……又來了?出乎意料……我就知道。你……很有趣!……啊哈哈!♪" + } + }, + "shelly": { + "encounter": { + "1": "啊哈哈哈哈!你要插手海洋隊的事?$你要麽是絕對無畏,要麽就是無知,或者兩者兼有!$你太可愛了,太惡心了!我要把你打倒!", + "2": "怎麽回事?這個小鬼頭是誰?", + "3": "冷靜點,耐心點。我很快就會把你擊潰。" + }, + "victory": { + "1": "啊哈哈哈哈!我們意外地被人幹擾了!我們別無選擇。$不得不撤退了,但這會不是你最後一次面對海洋隊!$我們還有其他計劃!別忘了!", + "2": "啊?!我是不是對你太溫柔了?!", + "3": "唉…難道在對戰中你也一刻不停地在變強嗎?$你真是個前途光明的小鬼……\n我和我的寶可夢已經沒有任何力量去戰鬥了……$繼續吧……准備去被水梧桐摧毀吧。" + } + }, + "matt": { + "encounter": { + "1": "嚯!哈哈哈!怎麽,你是不是腦子不正常了?\n看看你,像個幕下力士!", + "2": "“哦吼!你!你真是個有趣的孩子!", + "3": "你在這裏幹什麽?你跟蹤我們了嗎?" + }, + "victory": { + "1": "好吧,在老大有時間對付你之前,我來成爲你的對手!", + "2": "我能感覺到!我感覺到了,沒錯!你身上散發出的力量!$更多!還想要更多!但看起來我們沒時間了……", + "3": "真有趣!我就知道你會讓我盡興的!\n我期待有一天再次面對你!" + } + }, + "mars": { + "encounter": { + "1": "我是夥星,銀河隊的頂級幹部之一。", + "2": "銀河隊對未來的願景堅定不移。\n反對者將被無情地粉碎!", + "3": "“緊張嗎?你是該感到緊張了!" + }, + "victory": { + "1": "這不可能!我怎麽會輸?!", + "2": "你很有本事,我承認。", + "3": "輸了……犯了一個代價高昂的大錯。" + } + }, + "jupiter": { + "encounter": { + "1": "歲星,銀河隊幹部,爲您效勞。", + "2": "抵抗是徒勞的。銀河隊必將獲勝!", + "3": "你在發抖啊……已經害怕了嗎?" + }, + "victory": { + "1": "不會吧……我輸了?!", + "2": "厲害,你膽子真大!", + "3": "輸成這樣……真丟人。" + } + }, + "saturn": { + "encounter": { + "1": "我是鎮星,銀河隊的幹部。", + "2": "我們的使命是絕對的,任何阻礙都將被消滅!", + "3": "我從你的眼中看到的是恐懼嗎?" + }, + "victory": { + "1": "不可能……被你打敗了?!", + "2": "你證明了自己是一個值得尊敬的對手。", + "3": "失敗的苦澀……難以接受……。" + }}, + "zinzolin": { + "encounter": { + "1": "你可能會對等離子隊構成威脅,所以我們現在就消滅你!", + "2": "哦,天哪……我沒想到要在這麽冷的天氣裏戰鬥!", + "3": "能走到今天這一步,你真是個了不起的訓練師。\n但一切到此結束。" + }, + "victory": { + "1": "魁奇思大人……我讓你失望了……", + "2": "好冷,我不僅發抖,還要遭罪。", + "3": "哼。你比我想象的要聰明,但還不夠。" + } + }, + "rood": { + "encounter": { + "1": "你對等離子隊是個威脅。我們現在不能讓你離開這裏!", + "2": "哦,這寒風……我從沒想過我必須在這裏戰鬥!", + "3": "能走到今天這一步,你是一位了不起的訓練師,但這就是你的結局了。" + }, + "victory": { + "1": "魁奇思大人……我的任務失敗了", + "2": "寒風刺骨。我瑟瑟發抖。我痛苦不堪。", + "3": "嗯,你是很有才。但是要打敗等離子隊還不夠……!" + } + }, + "xerosic": { + "encounter": { + "1": "啊哈哈!我很樂意。\n來吧,小訓練師!讓我們看看你有什麽本事!", + "2": "嗯……你比看上去更強大。\n我想知道你體內有多少能量。", + "3": "我一直在等你!我需要對你做一點研究!\n來吧,我們開始吧!" + }, + "victory": { + "1": "啊,你好強大啊……嗯……確實非常強大。", + "2": "叮叮叮!你成功了!\n戰利品歸勝利者!", + "3": "太棒了!太神奇了!\n你的技巧和勇氣都無與倫比!" + } + }, + "bryony": { + "encounter": { + "1": "我是芭拉,能與你一戰是我的榮幸。\n讓我看看你的實力。", + "2": "令人印象深刻……你比你看上去的還要強大。\n讓我們看看你真正的實力。", + "3": "我預料到了你的到來。\n是時候進行一個小實驗了,我們開始吧?" + }, + "victory": { + "1": "你很強大。哦,嗯嗯!確實非常強大", + "2": "叮叮叮!你做得很好。勝利屬于你。", + "3": "太棒了!了不起!你的技巧和勇氣值得稱贊。" + } + }, + "rocket_grunt": { + "encounter": { + "1": "你要有麻煩了!", + "2": "我們要幹大事了!\n閃一邊去,小子!", + "3": "把你的寶可夢交過來,\n不然就嘗嘗火箭隊的厲害!", + "4": "你准備好感受火箭隊真正的恐怖了嗎!", + "5": "喂,小子!俺可是火箭隊滴!" + }, + "victory": { + "1": "好討厭的感覺啊!", + "2": "哎呀!不小心丟掉電梯鑰匙啦!", + "3": "我搞砸了。", + "4": "我的夥計們不會放過你……!", + "5": "你說啥?俺們火箭隊要玩完了?" + } + }, + "magma_grunt": { + "encounter": { + "1": "如果你擋在熔岩隊路上,那就別指望我們手下留情!", + "2": "你最好別妨礙我們的計劃!\n我們會讓世界變得更美好!", + "3": "少礙事!熔岩隊沒時間理你這樣的小孩!", + "4": "你有棉花糖沒?我來給你好好烤烤!", + "5": "我們會利用火山的力量!\n它馬上要…爆發了!懂嗎?嘿嘿嘿……" + }, + "victory": { + "1": "哈?我輸了?!", + "2": "我怎麽會輸!我爲了訓練飯都不吃了!", + "3": "不會吧,不就是一個小孩!", + "4": "唉啊…我得趕快逃回基地…", + "5": "你打敗我了…你覺得老大會扣我工資嗎?" + } + }, + "aqua_grunt": { + "encounter": { + "1": "即使是小孩,如果要和海洋隊作對,也別指望我們手下留情!", + "2": "嚯…你好大的膽子,敢惹我們海洋隊!", + "3": "不僅是我的水系寶可夢,整片大海即將淹沒你!", + "4": "我們海洋隊,是爲了大義!", + "5": "准備好被我的…唉…我寶可夢的海流沖走吧!" + }, + "victory": { + "1": "你在開玩笑吧?", + "2": "害,沒想到這種小屁孩也要管我的閑事!", + "3": "我輸了?看來我得自己遊回基地了。", + "4": "不是吧,怎麽會,老大要生氣了……", + "5": "你打敗了我…老大不會要讓我上跳板吧……" + } + }, + "galactic_grunt": { + "encounter": { + "1": "別惹銀河隊!", + "2": "見識下我們的科技,和我們所設想的未來!", + "3": "以銀河隊之名,我會掃清一切擋路的人!", + "4": "准備輸的一敗塗地吧!", + "5": "希望你做好被宇宙力量碾壓的准備。" + }, + "victory": { + "1": "停機了…", + "2": "從長遠來看,這次的挫折不用在意。", + "3": "小失敗不會影響我們的宏圖偉業!", + "4": "咋回事!?", + "5": "個人記錄:提升對戰水平,優先級,高……" + } + }, + "plasma_grunt": { + "encounter": { + "1": "異端不共戴天!", + "2": "要是我贏了你!就把你的寶可夢放生!", + "3": "要是敢和等離子隊作對,我來好好關照你!", + "4": "等離子隊會從你們這種自私的人手裏解放寶可夢!", + "5": "我們的發型帥的一批,而我們的戰鬥水平呢,\n馬上讓你見識一下。" + }, + "victory": { + "1": "等離子子子子子子!", + "2": "我怎麽會輸……", + "3": "…沒用的家夥!我得去偷個厲害點的寶可夢!", + "4": "偉大的事業總會被人阻撓…", + "5": "爛完了…爛爛爛爛爛!等離子隊爛了!\n說短點就是,等爛子隊!" + } + }, + "flare_grunt": { + "encounter": { + "1": "你的寶可夢無法與閃焰隊的優雅相提並論", + "2": "帶個墨鏡吧,別被我閃瞎狗眼了!", + "3": "閃焰隊將淨化這個不完美的世界!", + "4": "准備面對閃焰隊的美!", + "5": "時尚對我們來說最重要!" + }, + "victory": { + "1": "我的未來看起來並不明亮…", + "2": "這戰鬥比我想的更難搞,我得重頭訓練了。", + "3": "啊啊?我輸了?!", + "4": "就算是在失敗當中,閃焰隊依舊優雅動人!", + "5": "你雖然打敗了我,但是我輸的也這麽潇灑!" + } + }, + "rocket_boss_giovanni_1": { + "encounter": { + "1": "我不得不說,能來到這裏,你的確很不簡單!" + }, + "victory": { + "1": "什麽!這不可能!" + }, + "defeat": { + "1": "記住我的話。無法衡量自己的力量,說明你還是個孩子。" + } + }, + "rocket_boss_giovanni_2": { + "encounter": { + "1": "我的老夥計還需要我…你要擋我的路嗎?" + }, + "victory": { + "1": "這怎麽可能…?\n火箭隊的夢想…就這麽成爲泡影了…" + }, + "defeat": { + "1": "火箭隊會重生,而我會統治世界!" + } + }, + "magma_boss_maxie_1": { + "encounter": { + "1": "我會親手埋葬你,希望你能喜歡!" + }, + "victory": { + "1": "啊!你…很厲害…我落後了…一點…" + }, + "defeat": { + "1": "熔岩隊必勝!" + } + }, + "magma_boss_maxie_2": { + "encounter": { + "1": "你是我實現目標最後的障礙。\n准備好迎接我最強的一擊吧!哈哈哈哈!" + }, + "victory": { + "1": "這…這不…唉" + }, + "defeat": { + "1": "現在…我要把這個星球變成人類的理想國度!" + } + }, + "aqua_boss_archie_1": { + "encounter": { + "1": "我是海洋隊的老大,所以,你的路大概走到頭了。" + }, + "victory": { + "1": "下次再見吧。我會記住你的臉的。" + }, + "defeat": { + "1": "天才!我的隊伍不會再退縮了!" + } + }, + "aqua_boss_archie_2": { + "encounter": { + "1": "我等這一天很久了。\n這就是我的真實力量!" + }, + "victory": { + "1": "果然很強……啊!" + }, + "defeat": { + "1": "我會讓這世界上的一切回歸到最初的純淨狀態!!" + } + }, + "galactic_boss_cyrus_1": { + "encounter": { + "1": "但在這之前,讓我見識見識你那敢向銀河隊叫板的實力吧。" + }, + "victory": { + "1": "有意思,簡直太有意思了。" + }, + "defeat": { + "1": "我要創造我的新世界…" + } + }, + "galactic_boss_cyrus_2": { + "encounter": { + "1": "是啊,我和你還真是有緣呢。\n不過,這段孽緣…就讓我在此斬斷吧!" + }, + "victory": { + "1": "怎麽可能!怎麽可能!怎麽可能!" + }, + "defeat": { + "1": "永別了。" + } + }, + "plasma_boss_ghetsis_1": { + "encounter": { + "1": "無論是誰做了什麽!都無法阻止我!" + }, + "victory": { + "1": "怎麽回事?我可是建立了等離子隊的完美的人啊!\n是要改變世界的完美的統治者!" + }, + "defeat": { + "1": "我是坐擁世界的完美統治者!哇哈哈哈!" + } + }, + "plasma_boss_ghetsis_2": { + "encounter": { + "1": "來吧!讓我看看你徹底絕望時的那張臉!" + }, + "victory": { + "1": "不!我的偉大目標!我要完全支配世界啊!" + }, + "defeat": { + "1": "酋雷姆!融合吧!" + } + }, + "flare_boss_lysandre_1": { + "encounter": { + "1": "你想要阻止我?在對戰中展示給我看吧!" + }, + "victory": { + "1": "看來你的確是想要阻止我。但是,先等一下。" + }, + "defeat": { + "1": "寶可夢…不該存在。" + } + }, + "flare_boss_lysandre_2": { + "encounter": { + "1": "你我的未來…究竟哪個才正確,\n就讓我們來問問各自的寶可夢吧!" + }, + "victory": { + "1": "哇啊啊啊!" + }, + "defeat": { + "1": "沒有遠見的蠢貨會繼續玷汙這個美麗的世界。" + } + }, "brock": { "encounter": { "1": "我對岩石屬性寶可夢的專精會擊敗你!來吧!", @@ -676,14 +1084,14 @@ }, "crasher_wake": { "encounter": { - "1": "極限! 極限! 看好了!$極限假面…就此…登場!", - "2": "極限! 極限! 極限假面!", + "1": "極限! 極限! 看好了!$極限假面…就此…登場!", + "2": "極限! 極限! 極限假面!", "3": "我是滔滔巨浪,將你沖走!" }, "victory": { "1": "我真是笑得合不攏嘴啊!$哈哈哈!那真是太有趣了!", "2": "呼哇!結束收尾了!$我該怎麼說呢……$我還想再對戰!我還想再繼續戰鬥!", - "3": "啊啊啊啊啊!?" + "3": "啊啊啊啊啊!?" }, "defeat": { "1": "耶!就是這樣!", @@ -700,7 +1108,7 @@ "victory": { "1": "明白了……我會禮貌地退場。", "2": "輸了就是輸了。你確實很強大。", - "3": "…行吧! 嗯, 我輸了。" + "3": "…行吧! 嗯, 我輸了。" }, "defeat": { "1": "爸爸!我用你珍愛的飛行寶可夢贏了……", @@ -1022,7 +1430,7 @@ }, "clay": { "encounter": { - "1": "咳咳! 讓我好等,不是嗎,孩子?$好吧,是時候看看你能做到什麼了!" + "1": "咳咳! 讓我好等,不是嗎,孩子?$好吧,是時候看看你能做到什麼了!" }, "victory": { "1": "真是的……我先說好,\n我可沒有手下留情。" @@ -1248,7 +1656,7 @@ "1": "夠野的!你的想法比我的還要毒!" }, "defeat": { - "1": "嘿,拜託!認真點!\n你要加把勁啊!" + "1": "嘿,拜託!認真點!\n你要加把勁啊!" } }, "olivia": { @@ -1330,7 +1738,7 @@ }, "wikstrom": { "encounter": { - "1": "年輕的挑戰者,幸會!\n我乃是著名的鋼鐵之刃,公爵雁鎧! $讓我們開始戰鬥吧!預備!" + "1": "年輕的挑戰者,幸會!\n我乃是著名的鋼鐵之刃,公爵雁鎧! $讓我們開始戰鬥吧!預備!" }, "victory": { "1": "輝煌!你與你尊貴的\n寶可夢之間的信任居然勝過了我!" @@ -1367,7 +1775,7 @@ "2": "我知道你能走這麼遠。讓我們開始吧。" }, "victory": { - "1": "被你拿下了啊。你太出色了!", + "1": "被你拿下了啊。你太出色了!", "2": "我從沒想到會有另一個訓練師打敗我……$我很驚訝。" }, "defeat": { @@ -1471,13 +1879,13 @@ }, "red": { "encounter": { - "1": "…!" + "1": "…!" }, "victory": { - "1": "…?" + "1": "…?" }, "defeat": { - "1": "…!" + "1": "…!" } }, "jasmine": { @@ -1859,7 +2267,7 @@ }, "marnie": { "encounter": { - "1": "事實上,言而總之… \n人家自己也想當冠軍呀! $所以別認為我在針對你!" + "1": "事實上,言而總之… \n人家自己也想當冠軍呀! $所以別認為我在針對你!" }, "victory": { "1": "好吧,我還是輸了……\n但是我看到了很多你和你寶可夢的優點哦" @@ -1914,13 +2322,13 @@ }, "ryme": { "encounter": { - "1": "寶貝, 一起! \n搖滾搖到骨子裡!" + "1": "寶貝, 一起! \n搖滾搖到骨子裡!" }, "victory": { "1": "你好酷!我佩服!\n我的靈魂為你哭!" }, "defeat": { - "1": "再會, 寶貝!" + "1": "再會, 寶貝!" } }, "grusha": { @@ -2012,18 +2420,18 @@ "1": "精彩!簡直就是天下無雙!" }, "defeat": { - "1": "戰鬥結束後,我的心像是吹過了溫和的風…\n$真是厲害!" + "1": "戰鬥結束後,我的心像是吹過了溫和的風…$真是厲害!" } }, "kieran": { "encounter": { - "1": "我的努力讓我越來越強!\n$所以我不會輸。" + "1": "我的努力讓我越來越強!$所以我不會輸。" }, "victory": { - "1": "不可能…\n$真是一場有趣又激動人心的戰鬥啊!" + "1": "不可能…$真是一場有趣又激動人心的戰鬥啊!" }, "defeat": { - "1": "哇塞,好一場戰鬥!\n$你得多練練了。" + "1": "哇塞,好一場戰鬥!$你得多練練了。" } }, "rival": { @@ -2031,7 +2439,7 @@ "1": "@c{smile}嘿,我在找你呢!我知道你急著上路,\n但至少說個再見吧…$@c{smile_eclosed}所以你終於要開始追逐夢想了?\n我幾乎不敢相信。$@c{serious_smile_fists}來都來了,來一場對戰怎麼樣?\n畢竟,我想看看你是不是準備周全了。$@c{serious_mopen_fists}不要手下留情,我想讓你全力以赴!" }, "victory": { - "1": "@c{shock}哇…你徹底擊敗了我。\n你是真初學者嗎?$@c{smile}也許是靠點運氣,但是…\n誰知道,你可能真的能一路走下去。$順便說一下,博士讓我給你這些東西。它們看起來可牛了。$@c{serious_smile_fists}祝你好运!" + "1": "@c{shock}哇…你徹底擊敗了我。\n你是真初學者嗎?$@c{smile}也許是靠點運氣,但是…\n誰知道,你可能真的能一路走下去。$順便說一下,博士讓我給你這些東西。它們看起來可牛了。$@c{serious_smile_fists}祝你好运!$@c{smile}哦!我希望你能喜歡這次的活動!" } }, "rival_female": { @@ -2039,7 +2447,7 @@ "1": "@c{smile_wave}你在這兒啊!我到處找你呢!$@c{angry_mopen}你忘了和你最好的朋友說再見了嗎?$@c{smile_ehalf}你要去追逐夢想了,對吧?\n從今天開始,是不是…$@c{smile}不管怎樣,忘了我的事就原諒你吧,\n但有個條件。@c{smile_wave_wink}你必須和我對戰!$@c{angry_mopen}全力以赴!\n你也不想讓你的冒險在開始之前就結束了,對吧?" }, "victory": { - "1": "@c{shock}你剛開始就已經這麼強了?!@d{96}$@c{angry}你是不是開了?$@c{smile_wave_wink}只是開個玩笑啦!@d{64} @c{smile_eclosed}我輸地心服口服了…\n我感覺你出去挺有天賦的。$@c{smile}順便說一下,博士想讓我給你一些東西。\n希望它們能幫上忙!$@c{smile_wave}像往常一樣盡力而為!\n我相信你!" + "1": "@c{shock}你剛開始就已經這麼強了?!@d{96}$@c{angry}你是不是開了?$@c{smile_wave_wink}只是開個玩笑啦!@d{64} @c{smile_eclosed}我輸地心服口服了…\n我感覺你出去挺有天賦的。$@c{smile}順便說一下,博士想讓我給你一些東西。\n希望它們能幫上忙!$@c{smile_wave}像往常一樣盡力而為!\n我相信你!$@c{smile}哦!我希望你能喜歡這次的活動!" } }, "rival_2": { @@ -2047,7 +2455,7 @@ "1": "@c{smile}嘿,你也在這裡嗎?$@c{smile_eclosed}一路過關斬將,是吧?$@c{serious_mopen_fists}我知道看起來好像我尾隨著你來到這裡,\n怎麼可能啦。$@c{serious_smile_fists}說真的,自從你在老家打敗我後,\n我就一直很渴望再比一場。$我自己也進行了很多訓練,\n所以這次我肯定會好好打一場。$@c{serious_mopen_fists}不要手下留情,就像以前一樣!$讓我們開始吧!" }, "victory": { - "1": "@c{neutral_eclosed}哦。我過於自信了。$@c{smile}不過沒關係。我猜到可能會這樣。$@c{serious_mopen_fists}這只意味著我下次需要更努力!$$@c{smile}呃,不是特意幫你,我正好有多餘的這個,\n我覺得你可能想要。$$@c{serious_smile_fists}不過這次之後別指望再有了!$我不能一直給我的對手優勢。$@c{smile}反正,保重!" + "1": "@c{neutral_eclosed}哦。我過於自信了。$@c{smile}不過沒關係。我猜到可能會這樣。$@c{serious_mopen_fists}這只意味著我下次需要更努力!$$@c{smile}呃,不是特意幫你,我正好有多餘的這個,\n我覺得你可能想要。$$@c{serious_smile_fists}不過這次之後別指望再有了!$我不能一直給我的對手優勢。$@c{smile}反正,保重, 要享受活動哦!" } }, "rival_2_female": { @@ -2055,7 +2463,7 @@ "1": "@c{smile_wave}哦,真巧,在這裡遇見你。\n看來你還沒輸過嘛。@c{angry_mopen}哈……好傢伙!$@c{angry_mopen}我知道你在想什麼,\n不,我才不會跟蹤你什麼呢。 @c{smile_eclosed}我只是碰巧在附近。$@c{smile_ehalf}我為你感到高興,但我只想讓你知道\n有時輸了是可以接受的。$@c{smile}我們從錯誤中學到的東西\n往往比我們一直成功時學到的還要多。$@c{angry_mopen}無論如何,我為了我們的複賽已經努力訓練了\n所以你最好全力以赴!" }, "victory": { - "1": "@c{neutral}我……沒打算會輸來著……$@c{smile}嗷……好吧。看來我要再更加努力訓練了!$@c{smile_wave}我還給你帶了個這個$@c{smile_wave_wink}不用謝我哦~.$@c{angry_mopen}不過,這是最後一個啦!\n 你可別想再從我這賺小便宜了~$@c{smile_wave}要保重哦!" + "1": "@c{neutral}我……沒打算會輸來著……$@c{smile}嗷……好吧。看來我要再更加努力訓練了!$@c{smile_wave}我還給你帶了個這個$@c{smile_wave_wink}不用謝我哦~.$@c{angry_mopen}不過,這是最後一個啦!\n 你可別想再從我這賺小便宜了~$@c{smile_wave}要保重哦,要享受活動哦!" }, "defeat": { "1": "輸了有時候也不要緊的…" @@ -2071,7 +2479,7 @@ }, "rival_3_female": { "encounter": { - "1": "@c{smile_wave}好久不見!還沒輸過,對吧。$@c{angry}我覺得你點煩了。@c{smile_wave_wink}開玩笑啦!$@c{smile_ehalf}但說真的,你現在不想家嗎?\n 不想…我嗎?$我……我的意思是,我們真的很想你。$@c{smile_eclosed}我支持你的一切,包括你的夢想。\n但現實就是你早晚會經歷失敗。$@c{smile}當你失敗的時候,我想像往常一樣陪在你身邊。$@c{angry_mopen}現在,給你看看我變得多強了吧!" + "1": "@c{smile_wave}好久不見!還沒輸過,對吧。$@c{angry}我覺得你點煩了。@c{smile_wave_wink}開玩笑啦!$@c{smile_ehalf}但說真的,你現在不想家嗎?\n 不想…我嗎?$我……我的意思是,我們真的很想你。$@c{smile_eclosed}我支持你的一切,包括你的夢想。\n但現實就是你早晚會經歷失敗。$@c{smile}當你失敗的時候,我想像往常一樣陪在你身邊。$@c{angry_mopen}現在,給你看看我變得多強了吧!" }, "victory": { "1": "@c{shock}都這樣了……還是不夠嗎?$這樣下去,你就永遠不會回來了……" @@ -2113,6 +2521,7 @@ }, "victory": { "1": "@c{neutral}…" + }, "defeat": { "1": "$@c{smile_ehalf}…" @@ -2134,4 +2543,4 @@ "1": "@c{smile_ehalf}我……\n我想我完成了我的使命……$@c{smile_eclosed}答應我……在你拯救世界之後\n……要……平安到家。$@c{smile_ehalf}……謝謝你。" } } -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/egg.json b/src/locales/zh_TW/egg.json index 28e5e1b9bda..0178848a0d5 100644 --- a/src/locales/zh_TW/egg.json +++ b/src/locales/zh_TW/egg.json @@ -20,7 +20,7 @@ "hatchFromTheEgg": "{{pokemonName}} 從蛋中孵化了!", "eggMoveUnlock": "蛋招式已解鎖: {{moveName}}", "rareEggMoveUnlock": "稀有蛋招式已解鎖: {{moveName}}", - "moveUPGacha": "蛋招式UP!", - "shinyUPGacha": "闪光UP!", - "legendaryUPGacha": "UP!" -} \ No newline at end of file + "moveUPGacha": "蛋招式UP!", + "shinyUPGacha": "闪光UP!", + "legendaryUPGacha": "UP!" +} diff --git a/src/locales/zh_TW/fight-ui-handler.json b/src/locales/zh_TW/fight-ui-handler.json index 3cf1868196a..dda3e443b36 100644 --- a/src/locales/zh_TW/fight-ui-handler.json +++ b/src/locales/zh_TW/fight-ui-handler.json @@ -2,6 +2,7 @@ "pp": "PP", "power": "威力", "accuracy": "命中率", - "abilityFlyInText": " {{pokemonName}} 的 {{passive}}{{abilityName}}", - "passive": "被動能力 " -} \ No newline at end of file + "abilityFlyInText": " {{pokemonName}} 的\n{{passive}}{{abilityName}}", + "passive": "被動能力 ", + "teraHover": "{{type}} 太晶化" +} diff --git a/src/locales/zh_TW/menu-ui-handler.json b/src/locales/zh_TW/menu-ui-handler.json index 33e6b44d73d..cbb5b604d33 100644 --- a/src/locales/zh_TW/menu-ui-handler.json +++ b/src/locales/zh_TW/menu-ui-handler.json @@ -19,6 +19,11 @@ "importData": "導入數據", "exportData": "導出數據", "consentPreferences": "同意偏好", + "linkDiscord": "關聯Discord", + "unlinkDiscord": "解除關聯Discord", + "linkGoogle": "關聯Google", + "unlinkGoogle": "解除關聯Google", "cancel": "取消", - "losingProgressionWarning": "你將失去自戰鬥開始以來的所有進度。是否\n繼續?" -} \ No newline at end of file + "losingProgressionWarning": "你將失去自戰鬥開始以來的所有進度。是否\n繼續?", + "noEggs": "當前沒有任何蛋\n正在孵化中!" +} diff --git a/src/locales/zh_TW/menu.json b/src/locales/zh_TW/menu.json index b56a39bbda2..fee9b1be85d 100644 --- a/src/locales/zh_TW/menu.json +++ b/src/locales/zh_TW/menu.json @@ -6,11 +6,11 @@ "newGame": "新遊戲", "settings": "設定", "selectGameMode": "選擇遊戲模式", - "logInOrCreateAccount": "登入或註冊即可開始遊戲,無需郵箱!", + "logInOrCreateAccount": "登入或註冊即可開始遊戲,無需郵箱!", "username": "用戶名", "password": "密碼", "login": "登入", - "orUse": "Or use", + "orUse": "或使用", "register": "注冊", "emptyUsername": "用戶名不能為空", "invalidLoginUsername": "提供的用戶名無效", @@ -27,10 +27,10 @@ "failedToLoadSaveData": "讀取存檔數據失敗。請重新加載頁面。如果\n問題仍然存在,請聯繫管理員。", "sessionSuccess": "工作階段加載成功.", "failedToLoadSession": "無法加載您的工作階段數據。它可能已損壞。", - "boyOrGirl": "你是男孩還是女孩?", - "evolving": "甚麼?\n{{pokemonName}} 要進化了!", + "boyOrGirl": "你是男孩還是女孩?", + "evolving": "甚麼?\n{{pokemonName}} 要進化了!", "stoppedEvolving": "{{pokemonName}} 停止了進化。", - "pauseEvolutionsQuestion": "你確定要停止 {{pokemonName}} 的進化嗎?\n你可以在隊伍畫面中重新啟用進化。", + "pauseEvolutionsQuestion": "你確定要停止 {{pokemonName}} 的進化嗎?\n你可以在隊伍畫面中重新啟用進化。", "evolutionsPaused": "{{pokemonName}}的進化已暫停。", "evolutionDone": "恭喜!\n你的 {{pokemonName}} 進化成了 {{evolvedPokemonName}}!", "dailyRankings": "每日排名", @@ -38,9 +38,17 @@ "noRankings": "無排名", "positionIcon": "#", "loading": "加載中…", + "loadingAsset": "加載資源: {{assetName}}", "playersOnline": "在線玩家", "yes": "是", "no": "否", - "noSaves": "你沒有任何記錄檔!", - "tooManySaves": "你的記錄檔太多了!" + "disclaimer": "免責聲明", + "disclaimerDescription": "這個遊戲尚未完成; 可能存在遊戲性問題(包括潛在的丟檔風險)、\n 不經通知的調整、 未來可能會更新或完成更多內容", + "choosePokemon": "選擇一只寶可夢。", + "renamePokemon": "給寶可夢起名", + "rename": "起名", + "nickname": "昵稱", + "errorServerDown": "糟糕!訪問服務器時發生了錯誤。\n\n你可以保持頁面開啓,\n遊戲會自動重新連接。", + "noSaves": "你沒有任何記錄檔!", + "tooManySaves": "你的記錄檔太多了!" } diff --git a/src/locales/zh_TW/modifier-select-ui-handler.json b/src/locales/zh_TW/modifier-select-ui-handler.json index 9e26dfeeb6e..84ebbbfef6a 100644 --- a/src/locales/zh_TW/modifier-select-ui-handler.json +++ b/src/locales/zh_TW/modifier-select-ui-handler.json @@ -1 +1,12 @@ -{} \ No newline at end of file +{ + "transfer": "交換道具", + "reroll": "刷新商店", + "lockRarities": "鎖定稀有度", + "checkTeam": "查看隊伍", + "transferDesc": "將寶可夢攜帶的道具交換給其他寶可夢", + "rerollDesc": "花錢刷新道具", + "lockRaritiesDesc": "在刷新時鎖定道具稀有度(影響刷新費用)", + "checkTeamDesc": "檢查隊伍或使用形態改變道具", + "rerollCost": "₽{{formattedMoney}}", + "itemCost": "₽{{formattedMoney}}" +} diff --git a/src/locales/zh_TW/modifier-type.json b/src/locales/zh_TW/modifier-type.json index ec066277cda..6ff593ddba7 100644 --- a/src/locales/zh_TW/modifier-type.json +++ b/src/locales/zh_TW/modifier-type.json @@ -60,10 +60,10 @@ "description": "一隻寶可夢的{{moveType}}系招式威力提升20%。" }, "PokemonLevelIncrementModifierType": { - "description": "Increases a Pokémon's level by {{levels}}." + "description": "使一只寶可夢的等級提升{{levels}}級。" }, "AllPokemonLevelIncrementModifierType": { - "description": "Increases all party members' level by {{levels}}." + "description": "使一只寶可夢的等級提升{{levels}}級。" }, "BaseStatBoosterModifierType": { "description": "增加持有者的{{stat}}10%,個體值越高堆疊\n上限越高。" @@ -95,15 +95,15 @@ "description": "招式命中率增加{{accuracyAmount}} (最大100)。" }, "PokemonMultiHitModifierType": { - "description": "攻擊造成一次額外傷害,每次堆疊額外傷害\n分別衰減60/75/82.5%。" + "description": "攻擊以60/75/82.5%的傷害造成2/3/4次傷害。" }, "TmModifierType": { "name": "招式學習器 {{moveId}} - {{moveName}}", "description": "教會一隻寶可夢{{moveName}}。" }, "TmModifierTypeWithInfo": { - "name": "TM{{moveId}} - {{moveName}}", - "description": "教會一隻寶可夢{{moveName}}\n(Hold C or Shift for more info)。" + "name": "招式學習器{{moveId}} - {{moveName}}", + "description": "教會一隻寶可夢{{moveName}}\n(按住C或者Shift查看更多信息)" }, "EvolutionItemModifierType": { "description": "使某些寶可夢進化。" @@ -183,6 +183,10 @@ "name": "復活種子", "description": "受到技能攻擊傷害瀕死時,\n恢復該瀕死寶可夢的HP至1/2。" }, + "WHITE_HERB": { + "name": "白色香草", + "description": "當攜帶它的寶可夢能力降低時,\n僅能回到之前的狀態1次。" + }, "ETHER": { "name": "PP單項小補劑" }, @@ -310,19 +314,19 @@ }, "BERRY_POUCH": { "name": "樹果袋", - "description": "使用樹果時有30%的幾率不會消耗樹果。" + "description": "使用樹果時增加30%的幾率不會消耗樹果。" }, "FOCUS_BAND": { "name": "氣勢頭帶", - "description": "攜帶該道具的寶可夢有10%幾率在受到\n攻擊而將陷入瀕死狀態時,保留1點HP不陷入瀕死狀態。" + "description": "攜帶該道具的寶可夢增加10%幾率在受到\n攻擊而將陷入瀕死狀態時,保留1點HP不陷入瀕死狀態。" }, "QUICK_CLAW": { "name": "先制之爪", - "description": "有10%的幾率無視速度優先使出招式\n(先制技能優先)。" + "description": "增加10%的幾率無視速度優先使出招式\n(先制技能優先)。" }, "KINGS_ROCK": { "name": "王者之證", - "description": "攜帶該道具的寶可夢使用任意原本不會造成\n畏縮狀態的攻擊招式並造成傷害時,有\n10%幾率使目標陷入畏縮狀態。" + "description": "攜帶該道具的寶可夢使用任意原本不會造成\n畏縮狀態的攻擊招式並造成傷害時,增加\n10%幾率使目標陷入畏縮狀態。" }, "LEFTOVERS": { "name": "喫剩的東西", diff --git a/src/locales/zh_TW/modifier.json b/src/locales/zh_TW/modifier.json index 1c0d4760e6f..12c436c1783 100644 --- a/src/locales/zh_TW/modifier.json +++ b/src/locales/zh_TW/modifier.json @@ -3,6 +3,7 @@ "turnHealApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回復了體力!", "hitHealApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回復了體力!", "pokemonInstantReviveApply": "{{pokemonNameWithAffix}}用{{typeName}}\n回復了活力!", + "pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}降低的能力被{{typeName}}\n複原了!!", "moneyInterestApply": "用{{typeName}}\n獲得了 ₽{{moneyAmount}} 利息!", "turnHeldItemTransferApply": "{{pokemonNameWithAffix}}的{{itemName}}被\n{{pokemonName}}的{{typeName}}吸收了!", "contactHeldItemTransferApply": "{{pokemonNameWithAffix}}的{{itemName}}被\n{{pokemonName}}的{{typeName}}奪取了!", diff --git a/src/locales/zh_TW/move-trigger.json b/src/locales/zh_TW/move-trigger.json index d6d0ce659ea..db88f6df57f 100644 --- a/src/locales/zh_TW/move-trigger.json +++ b/src/locales/zh_TW/move-trigger.json @@ -42,12 +42,12 @@ "incineratedItem": "{{pokemonName}}燒掉了\n{{targetName}}的{{itemName}}!", "knockedOffItem": "{{pokemonName}}拍落了\n{{targetName}}的{{itemName}}!", "tookMoveAttack": "{{pokemonName}}\n受到了{{moveName}}的攻擊!", - "cutOwnHpAndMaximizedStat": "{{pokemonName}}\n削減體力並釋放了全部{{statName}}!", + "cutOwnHpAndMaximizedStat": "{{pokemonName}}\n削減體力並釋放了全部{{statName}}!", "copiedStatChanges": "{{pokemonName}}複製了\n{{targetName}}的能力變化!", "magnitudeMessage": "震級{{magnitude}}!", "tookAimAtTarget": "{{pokemonName}}將目標對準了\n{{targetName}}!", "transformedIntoType": "{{pokemonName}} \n變成了{{typeName}}屬性!", - "copiedMove": "{{pokemonName}}\n複製了{{moveName}}!", + "copiedMove": "{{pokemonName}}\n複製了{{moveName}}!", "sketchedMove": "{{pokemonName}}\n對{{moveName}}進行了寫生!", "acquiredAbility": "{{pokemonName}}的特性\n變为{{abilityName}}了!", "copiedTargetAbility": "{{pokemonName}}複製了\n{{targetName}}的{{abilityName}}!", @@ -66,5 +66,6 @@ "revivalBlessing": "{{pokemonName}}復活了!", "swapArenaTags": "{{pokemonName}}\n交換了雙方的場地效果!", "exposedMove": "{{pokemonName}}識破了\n{{targetPokemonName}}的原形!", - "safeguard": "{{targetName}}\n正受到神秘之幕的保護!" -} \ No newline at end of file + "safeguard": "{{targetName}}\n正受到神秘之幕的保護!", + "afterYou": "{{pokemonName}}\n接受了對手的好意!" +} diff --git a/src/locales/zh_TW/move.json b/src/locales/zh_TW/move.json index 101d6f85e5d..b8c4ec05033 100644 --- a/src/locales/zh_TW/move.json +++ b/src/locales/zh_TW/move.json @@ -2913,7 +2913,7 @@ }, "zippyZap": { "name": "電電加速", - "effect": "The user attacks the target with bursts of electricity at high speed. This move always goes first and raises the user's evasiveness." + "effect": "迅猛無比的電擊。必定能夠先制攻擊,\n並且提高自己的閃避率" }, "splishySplash": { "name": "滔滔衝浪", @@ -3807,4 +3807,4 @@ "name": "邪毒鎖鏈", "effect": "用由毒形成的鎖鏈纏住對手\n注入毒素加以侵蝕。有時會\n讓對手陷入劇毒狀態" } -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/party-ui-handler.json b/src/locales/zh_TW/party-ui-handler.json index 975212bbdad..ef82d1a3ddc 100644 --- a/src/locales/zh_TW/party-ui-handler.json +++ b/src/locales/zh_TW/party-ui-handler.json @@ -4,5 +4,44 @@ "CANCEL": "取消", "RELEASE": "放生", "APPLY": "應用", - "TEACH": "教授" -} \ No newline at end of file + "TEACH": "教授", + "SPLICE": "融合", + "UNSPLICE": "分離", + "ACTIVATE": "激活", + "DEACTIVATE": "解除", + "TRANSFER": "交換", + "ALL": "全部道具", + "PASS_BATON": "接棒", + "UNPAUSE_EVOLUTION": "解除進化暫停", + "REVIVE": "複活", + "RENAME": "起名", + "choosePokemon": "選擇一只寶可夢。", + "doWhatWithThisPokemon": "要對寶可夢做什麽?", + "noEnergy": "{{pokemonName}}沒有力氣戰鬥了!", + "hasEnergy": "{{pokemonName}}仍然精神十足!", + "cantBeUsed": "{{pokemonName}}無法在此挑戰中使用!", + "tooManyItems": "{{pokemonName}}擁有\n太多這個道具了!", + "anyEffect": "即便使用也無效果哦。", + "unpausedEvolutions": "{{pokemonName}}的進化停止了。", + "unspliceConfirmation": "真的要把{{fusionName}}\n從{{pokemonName}}身上分離嗎?{{fusionName}}會就此消失。", + "wasReverted": "{{fusionName}}恢複成了{{pokemonName}}。", + "releaseConfirmation": "你真要放生{{pokemonName}}嗎?", + "releaseInBattle": "你無法放生正在戰鬥中的寶可夢!", + "selectAMove": "選擇一個招式。", + "changeQuantity": "選擇一件道具來交換。\n使用 ← 和 → 來指定數量。", + "selectAnotherPokemonToSplice": "選擇另一只寶可夢來融合。", + "cancel": "取消", + "able": "能學會!", + "notAble": "無法學習", + "learned": "已習得", + "goodbye": "再見,{{pokemonName}}!", + "byebye": "拜拜,{{pokemonName}}!", + "farewell": "再會了,{{pokemonName}}!", + "soLong": "告辭了,{{pokemonName}}!", + "thisIsWhereWePart": "就此分別吧,{{pokemonName}}!", + "illMissYou": "我會想你的,{{pokemonName}}!", + "illNeverForgetYou": "我不會忘記你的,{{pokemonName}}!", + "untilWeMeetAgain": "下次再見了,{{pokemonName}}!", + "sayonara": "撒由那拉,{{pokemonName}}!", + "smellYaLater": "拜拜了您勒,{{pokemonName}}!" +} diff --git a/src/locales/zh_TW/pokemon-form-battle.json b/src/locales/zh_TW/pokemon-form-battle.json index 75087aa0669..93a9e65f1f8 100644 --- a/src/locales/zh_TW/pokemon-form-battle.json +++ b/src/locales/zh_TW/pokemon-form-battle.json @@ -2,13 +2,13 @@ "mega": "Mega {{pokemonName}}", "mega-x": "Mega {{pokemonName}} X", "mega-y": "Mega {{pokemonName}} Y", - "primal": "Primal {{pokemonName}}", - "gigantamax": "G-Max {{pokemonName}}", - "eternamax": "E-Max {{pokemonName}}", + "primal": "原始{{pokemonName}}", + "gigantamax": "超極巨{{pokemonName}}", + "eternamax": "無極巨{{pokemonName}}", "megaChange": "{{preName}}超級進化成了\n{{pokemonName}}!", "gigantamaxChange": "{{preName}}超極巨化成了\n{{pokemonName}}!", "eternamaxChange": "{{preName}}無極巨化成了\n{{pokemonName}}!", "revertChange": "{{pokemonName}}變回了\n原本的樣子!", "formChange": "{{preName}}變為其他樣子了。", "disguiseChange": "它的畫皮被當作誘餌使用了!" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/pokemon-form.json b/src/locales/zh_TW/pokemon-form.json index b98a1e946b8..f1fb4dff599 100644 --- a/src/locales/zh_TW/pokemon-form.json +++ b/src/locales/zh_TW/pokemon-form.json @@ -1,3 +1,170 @@ { - "meloettaPirouette": "舞步形態" -} \ No newline at end of file + "pikachuCosplay": "換裝", + "pikachuCoolCosplay": "搖滾巨星", + "pikachuBeautyCosplay": "貴婦", + "pikachuCuteCosplay": "流行偶像", + "pikachuSmartCosplay": "博士", + "pikachuToughCosplay": "面罩摔跤手", + "pikachuPartner": "搭檔", + "eeveePartner": "搭檔", + "pichuSpiky": "刺刺耳", + "unownA": "A", + "unownB": "B", + "unownC": "C", + "unownD": "D", + "unownE": "E", + "unownF": "F", + "unownG": "G", + "unownH": "H", + "unownI": "I", + "unownJ": "J", + "unownK": "K", + "unownL": "L", + "unownM": "M", + "unownN": "N", + "unownO": "O", + "unownP": "P", + "unownQ": "Q", + "unownR": "R", + "unownS": "S", + "unownT": "T", + "unownU": "U", + "unownV": "V", + "unownW": "W", + "unownX": "X", + "unownY": "Y", + "unownZ": "Z", + "unownExclamation": "!", + "unownQuestion": "?", + "castformSunny": "晴天", + "castformRainy": "雨天", + "castformSnowy": "雪天", + "deoxysNormal": "普通", + "burmyPlant": "草木蓑衣", + "burmySandy": "砂土蓑衣", + "burmyTrash": "垃圾蓑衣", + "shellosEast": "東海", + "shellosWest": "西海", + "rotomHeat": "加熱", + "rotomWash": "清洗", + "rotomFrost": "結冰", + "rotomFan": "旋轉", + "rotomMow": "切割", + "giratinaAltered": "別種", + "shayminLand": "陸上", + "basculinRedStriped": "紅條紋", + "basculinBlueStriped": "藍條紋", + "basculinWhiteStriped": "白條紋", + "deerlingSpring": "春天", + "deerlingSummer": "夏天", + "deerlingAutumn": "秋天", + "deerlingWinter": "冬天", + "tornadusIncarnate": "化身", + "thundurusIncarnate": "化身", + "landorusIncarnate": "化身", + "keldeoOrdinary": "通常", + "meloettaAria": "歌聲", + "meloettaPirouette": "舞步形態", + "froakieBattleBond": "牽絆變身", + "scatterbugMeadow": "花園花紋", + "scatterbugIcySnow": "冰雪花紋", + "scatterbugPolar": "雪國花紋", + "scatterbugTundra": "雪原花紋", + "scatterbugContinental": "大陸花紋", + "scatterbugGarden": "庭園花紋", + "scatterbugElegant": "高雅花紋", + "scatterbugModern": "摩登花紋", + "scatterbugMarine": "大海花紋", + "scatterbugArchipelago": "群島花紋", + "scatterbugHighPlains": "荒野花紋", + "scatterbugSandstorm": "沙塵花紋", + "scatterbugRiver": "大河花紋", + "scatterbugMonsoon": "驟雨花紋", + "scatterbugSavanna": "熱帶草原花紋", + "scatterbugSun": "太陽花紋", + "scatterbugOcean": "大洋花紋", + "scatterbugJungle": "熱帶雨林花紋", + "scatterbugFancy": "幻彩花紋", + "scatterbugPokeBall": "球球花紋", + "flabebeRed": "紅花", + "flabebeYellow": "黃花", + "flabebeOrange": "橙花", + "flabebeBlue": "藍花", + "flabebeWhite": "白花", + "furfrouHeart": "心形造型", + "furfrouStar": "星形造型", + "furfrouDiamond": "菱形造型", + "furfrouDebutante": "淑女造型", + "furfrouMatron": "貴婦造型", + "furfrouDandy": "紳士造型", + "furfrouLaReine": "女王造型", + "furfrouKabuki": "歌舞伎造型", + "furfrouPharaoh": "國王造型", + "pumpkabooSmall": "小尺寸", + "pumpkabooLarge": "大尺寸", + "pumpkabooSuper": "特大尺寸", + "xerneasNeutral": "放松模式", + "xerneasActive": "活躍模式", + "zygarde50": "50%形態", + "zygarde10": "10%形態", + "zygarde50Pc": "50%形態 群聚變形", + "zygarde10Pc": "10%形態 群聚變形", + "zygardeComplete": "完全體形態", + "oricorioBaile": "熱辣熱辣風格", + "oricorioPompom": "啪滋啪滋風格", + "oricorioPau": "呼拉呼拉風格", + "oricorioSensu": "輕盈輕盈風格", + "rockruffOwnTempo": "特殊岩狗狗", + "miniorRedMeteor": "紅色核心", + "miniorOrangeMeteor": "橙色核心", + "miniorYellowMeteor": "黃色核心", + "miniorGreenMeteor": "綠色核心", + "miniorBlueMeteor": "淺藍色核心", + "miniorIndigoMeteor": "藍色核心", + "miniorVioletMeteor": "紫色核心", + "miniorRed": "紅色", + "miniorOrange": "橙色", + "miniorYellow": "黃色", + "miniorGreen": "綠色", + "miniorBlue": "淺藍色", + "miniorIndigo": "藍色", + "miniorViolet": "紫色", + "mimikyuDisguised": "化形", + "mimikyuBusted": "現形", + "magearnaOriginal": "500年前的顔色", + "marshadowZenith": "全力", + "sinisteaPhony": "赝品", + "sinisteaAntique": "真品", + "eiscueNoIce": "解凍頭", + "indeedeeMale": "雄性", + "indeedeeFemale": "雌性", + "morpekoFullBelly": "滿腹花紋", + "zacianHeroOfManyBattles": "百戰勇者", + "zamazentaHeroOfManyBattles": "百戰勇者", + "zarudeDada": "老爹", + "enamorusIncarnate": "化身", + "squawkabillyGreenPlumage": "綠羽毛", + "squawkabillyBluePlumage": "藍羽毛", + "squawkabillyYellowPlumage": "黃羽毛", + "squawkabillyWhitePlumage": "白羽毛", + "tatsugiriCurly": "上弓姿勢", + "tatsugiriDroopy": "下垂姿勢", + "tatsugiriStretchy": "平挺姿勢", + "gimmighoulChest": "寶箱形態", + "gimmighoulRoaming": "徒步形態", + "koraidonApexBuild": "頂尖形態", + "koraidonLimitedBuild":"限制形態", + "koraidonSprintingBuild":"沖刺形態", + "koraidonSwimmingBuild":"遊泳形態", + "koraidonGlidingBuild":"滑翔形態", + "miraidonUltimateMode":"極限模式", + "miraidonLowPowerMode":"節能模式", + "miraidonDriveMode":"駕駛模式", + "miraidonAquaticMode":"水上模式", + "miraidonGlideMode":"滑翔模式", + "poltchageistCounterfeit": "冒牌貨", + "poltchageistArtisan": "高檔貨", + "paldeaTaurosCombat": "鬥戰種", + "paldeaTaurosBlaze": "火熾種", + "paldeaTaurosAqua": "水瀾種" +} diff --git a/src/locales/zh_TW/pokemon-info.json b/src/locales/zh_TW/pokemon-info.json index 66a99857a82..f2e29875e75 100644 --- a/src/locales/zh_TW/pokemon-info.json +++ b/src/locales/zh_TW/pokemon-info.json @@ -11,7 +11,9 @@ "SPDEF": "特殊防禦", "SPDEFshortened": "特防", "SPD": "速度", - "SPDshortened": "速度" + "SPDshortened": "速度", + "ACC": "命中率", + "EVA": "回避率" }, "Type": { "UNKNOWN": "未知", @@ -35,4 +37,4 @@ "FAIRY": "妖精", "STELLAR": "星晶" } -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/pokemon-summary.json b/src/locales/zh_TW/pokemon-summary.json index 9e26dfeeb6e..ddbbea63a3a 100644 --- a/src/locales/zh_TW/pokemon-summary.json +++ b/src/locales/zh_TW/pokemon-summary.json @@ -1 +1,45 @@ -{} \ No newline at end of file +{ + "pokemonInfo": "寶可夢信息", + "status": "狀態", + "powerAccuracyCategory": "威力\n命中率\n類別", + "type": "屬性", + "unknownTrainer": "未知", + "ot": "訓練師", + "nature": "性格", + "expPoints": "經驗值", + "nextLv": "下一級", + "cancel": "取消", + + "memoString": "{{natureFragment}} 性格,\n{{metFragment}}", + "metFragment": { + "normal": "met at Lv{{level}},\n{{biome}}.", + "apparently": "命中注定般地相遇于Lv.{{level}},\n{{biome}}。" + }, + "natureFragment": { + "Hardy": "{{nature}}", + "Lonely": "{{nature}}", + "Brave": "{{nature}}", + "Adamant": "{{nature}}", + "Naughty": "{{nature}}", + "Bold": "{{nature}}", + "Docile": "{{nature}}", + "Relaxed": "{{nature}}", + "Impish": "{{nature}}", + "Lax": "{{nature}}", + "Timid": "{{nature}}", + "Hasty": "{{nature}}", + "Serious": "{{nature}}", + "Jolly": "{{nature}}", + "Naive": "{{nature}}", + "Modest": "{{nature}}", + "Mild": "{{nature}}", + "Quiet": "{{nature}}", + "Bashful": "{{nature}}", + "Rash": "{{nature}}", + "Calm": "{{nature}}", + "Gentle": "{{nature}}", + "Sassy": "{{nature}}", + "Careful": "{{nature}}", + "Quirky": "{{nature}}" + } +} diff --git a/src/locales/zh_TW/settings.json b/src/locales/zh_TW/settings.json index b077e0216a3..d9c71df3a0d 100644 --- a/src/locales/zh_TW/settings.json +++ b/src/locales/zh_TW/settings.json @@ -95,5 +95,7 @@ "mute": "靜音", "controller": "控制器", "gamepadSupport": "手柄支持", - "moveTouchControls": "移動觸控控制" + "showBgmBar": "顯示音樂名稱", + "moveTouchControls": "移動觸控控制", + "shopOverlayOpacity": "商店顯示不透明度" } diff --git a/src/locales/zh_TW/splash-messages.json b/src/locales/zh_TW/splash-messages.json index 8535a9acd84..a25e7dab97b 100644 --- a/src/locales/zh_TW/splash-messages.json +++ b/src/locales/zh_TW/splash-messages.json @@ -31,5 +31,6 @@ "alsoTryEmeraldRogue": "也試試翡翠流氓!", "alsoTryRadicalRed": "也試試激進紅!", "eeveeExpo": "伊布博覽會!", - "ynoproject": "YNO專案!" -} \ No newline at end of file + "ynoproject": "YNO專案!", + "breedersInSpace": "飼養員也能上太空?" +} diff --git a/src/locales/zh_TW/starter-select-ui-handler.json b/src/locales/zh_TW/starter-select-ui-handler.json index 2a0db7217da..ad64a8d9743 100644 --- a/src/locales/zh_TW/starter-select-ui-handler.json +++ b/src/locales/zh_TW/starter-select-ui-handler.json @@ -1,6 +1,7 @@ { - "confirmStartTeam": "使用這些寶可夢開始嗎?", - "invalidParty": "此為無效隊伍!", + "confirmStartTeam": "使用這些寶可夢開始嗎?", + "confirmExit": "確定要退出嗎?", + "invalidParty": "此為無效隊伍!", "gen1": "I", "gen2": "II", "gen3": "III", @@ -21,6 +22,8 @@ "toggleIVs": "查看個體值", "manageMoves": "管理技能", "manageNature": "管理性格", + "addToFavorites": "添加到最愛", + "removeFromFavorites": "移出最愛", "useCandies": "使用糖果", "selectNature": "選擇性格", "selectMoveSwapOut": "選擇想要替換走的招式", @@ -40,4 +43,4 @@ "locked": "未解鎖", "disabled": "已禁用", "uncaught": "未捕獲" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/status-effect.json b/src/locales/zh_TW/status-effect.json index 9e26dfeeb6e..5f634a0bddf 100644 --- a/src/locales/zh_TW/status-effect.json +++ b/src/locales/zh_TW/status-effect.json @@ -1 +1,65 @@ -{} \ No newline at end of file +{ + "none": { + "name": "無", + "description": "", + "obtain": "", + "obtainSource": "", + "activation": "", + "overlap": "", + "heal": "" + }, + "poison": { + "name": "中毒", + "description": "中毒", + "obtain": "{{pokemonNameWithAffix}}中毒了!", + "obtainSource": "{{pokemonNameWithAffix}}因{{sourceText}}中毒了!", + "activation": "{{pokemonNameWithAffix}}受到了毒的傷害!", + "overlap": "{{pokemonNameWithAffix}}已經中毒了!", + "heal": "{{pokemonNameWithAffix}}中的毒徹底清除了!" + }, + "toxic": { + "name": "劇毒", + "description": "中毒", + "obtain": "{{pokemonNameWithAffix}}中了劇毒!", + "obtainSource": "{{pokemonNameWithAffix}}因{{sourceText}}中了劇毒!", + "activation": "{{pokemonNameWithAffix}}受到了毒的傷害!", + "overlap": "{{pokemonNameWithAffix}}已經中毒了!", + "heal": "{{pokemonNameWithAffix}}中的毒徹底清除了!" + }, + "paralysis": { + "name": "麻痹", + "description": "麻痹", + "obtain": "{{pokemonNameWithAffix}}麻痹了,很難使出招式!", + "obtainSource": "{{pokemonNameWithAffix}}被{{sourceText}}麻痹了,很難使出招式!", + "activation": "{{pokemonNameWithAffix}}因身體麻痹而無法行動!", + "overlap": "{{pokemonNameWithAffix}}已經麻痹了!", + "heal": "{{pokemonNameWithAffix}}的麻痹治愈了!" + }, + "sleep": { + "name": "睡眠", + "description": "睡眠", + "obtain": "{{pokemonNameWithAffix}}睡著了!", + "obtainSource": "{{pokemonNameWithAffix}}因{{sourceText}}睡著了!", + "activation": "{{pokemonNameWithAffix}}正在呼呼大睡。", + "overlap": "{{pokemonNameWithAffix}}已經睡著了!", + "heal": "{{pokemonNameWithAffix}}醒了!" + }, + "freeze": { + "name": "冰凍", + "description": "冰凍", + "obtain": "{{pokemonNameWithAffix}}凍住了!", + "obtainSource": "{{pokemonNameWithAffix}}因{{sourceText}}凍住了!", + "activation": "{{pokemonNameWithAffix}}因凍住了而無法行動!", + "overlap": "{{pokemonNameWithAffix}}已經凍住了!", + "heal": "{{pokemonNameWithAffix}}治愈了冰凍狀態!" + }, + "burn": { + "name": "灼傷", + "description": "灼傷", + "obtain": "{{pokemonNameWithAffix}}被灼傷了!", + "obtainSource": "{{pokemonNameWithAffix}}因{{sourceText}}被灼傷了!", + "activation": "{{pokemonNameWithAffix}}受到了灼傷的傷害!", + "overlap": "{{pokemonNameWithAffix}}已經被灼傷了!", + "heal": "{{pokemonNameWithAffix}}的灼傷治愈了!" + } +} diff --git a/src/locales/zh_TW/trainer-classes.json b/src/locales/zh_TW/trainer-classes.json index d6ff7238ec1..d0b0fed7e5d 100644 --- a/src/locales/zh_TW/trainer-classes.json +++ b/src/locales/zh_TW/trainer-classes.json @@ -100,6 +100,8 @@ "worker_female": "工人", "workers": "工人組合", "youngster": "短褲小子", + "rocket_grunt": "火箭队手下", + "rocket_grunt_female": "火箭队手下", "rocket_grunts": "火箭队手下們", "magma_grunt": "熔岩队手下", "magma_grunt_female": "熔岩队手下", @@ -116,4 +118,4 @@ "flare_grunt": "闪焰队手下", "flare_grunt_female": "闪焰队手下", "flare_grunts": "闪焰队手下們" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/trainer-names.json b/src/locales/zh_TW/trainer-names.json index 64e8892e64b..04399cf19af 100644 --- a/src/locales/zh_TW/trainer-names.json +++ b/src/locales/zh_TW/trainer-names.json @@ -123,6 +123,34 @@ "kieran": "烏栗", "rival": "芬恩", "rival_female": "艾薇", + "archer": "阿波羅", + "ariana": "雅典娜", + "proton": "蘭斯", + "petrel": "拉姆達", + "tabitha": "火村", + "courtney": "火雁", + "shelly": "阿泉", + "matt": "阿潮", + "mars": "夥星", + "jupiter": "碎星", + "saturn": "鎮星", + "zinzolin": "維奧", + "rood": "羅德", + "xerosic": "庫瑟洛斯奇", + "bryony": "芭拉", + "faba": "扎奧博", + "plumeria": "布爾美麗", + "oleana": "奧利薇", + + "maxie": "赤焰松", + "archie": "水梧桐", + "cyrus": "赤日", + "ghetsis": "魁奇思", + "lysandre": "弗拉達利", + "lusamine": "露莎米奈", + "guzma": "古茲馬", + "rose": "洛茲", + "blue_red_double": "青綠 & 赤紅", "red_blue_double": "赤紅 & 青綠", "tate_liza_double": "小楓 & 小南", @@ -133,4 +161,4 @@ "iris_alder_double": "艾莉絲 & 阿戴克", "marnie_piers_double": "瑪俐 & 聶梓", "piers_marnie_double": "聶梓 & 瑪俐" -} \ No newline at end of file +} diff --git a/src/locales/zh_TW/trainer-titles.json b/src/locales/zh_TW/trainer-titles.json index 54fe48b1464..80b2807e7b5 100644 --- a/src/locales/zh_TW/trainer-titles.json +++ b/src/locales/zh_TW/trainer-titles.json @@ -9,5 +9,24 @@ "champion_double": "冠軍搭檔", "rival": "勁敵", "professor": "博士", - "frontier_brain": "開拓頭腦" -} \ No newline at end of file + "frontier_brain": "開拓頭腦", + "rocket_boss": "火箭隊老大", + "magma_boss": "熔岩隊老大", + "aqua_boss": "海洋隊老大", + "galactic_boss": "銀河隊老大", + "plasma_boss": "等離子隊老大", + "flare_boss": "閃焰隊老大", + + "rocket_admin": "火箭隊幹部", + "rocket_admin_female": "火箭隊幹部", + "magma_admin": "熔岩隊幹部", + "magma_admin_female": "熔岩隊幹部", + "aqua_admin": "海洋隊幹部", + "aqua_admin_female": "海洋隊幹部", + "galactic_commander": "銀河隊幹部", + "galactic_commander_female": "銀河隊幹部", + "plasma_sage": "等離子隊賢人", + "plasma_admin": "等離子隊幹部", + "flare_admin": "閃焰隊幹部", + "flare_admin_female": "閃焰隊幹部" +} diff --git a/src/locales/zh_TW/weather.json b/src/locales/zh_TW/weather.json index b20975374ea..b315d27625d 100644 --- a/src/locales/zh_TW/weather.json +++ b/src/locales/zh_TW/weather.json @@ -27,5 +27,6 @@ "harshSunClearMessage": "日照復原了。", "strongWindsStartMessage": "吹起了神秘的亂流!", "strongWindsLapseMessage": "神秘的亂流勢頭不減。", + "strongWindsEffectMessage": "神秘的亂流減弱了攻擊!", "strongWindsClearMessage": "神秘的亂流停止了。" -} \ No newline at end of file +} From ce9a75f074a87815850d34bff8c33e6e6b06be0a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 11 Sep 2024 13:54:42 -0700 Subject: [PATCH 26/37] Replace `vi.fn()` with `() => null` whenenver possible (#4182) --- src/test/utils/gameWrapper.ts | 2 +- src/test/utils/mocks/mockGameObjectCreator.ts | 5 ++--- src/test/utils/mocks/mockVideoGameObject.ts | 11 +++++------ src/test/utils/mocks/mocksContainer/mockContainer.ts | 10 ++++------ src/test/utils/mocks/mocksContainer/mockSprite.ts | 3 +-- src/test/utils/mocks/mocksContainer/mockText.ts | 11 +++++------ 6 files changed, 18 insertions(+), 24 deletions(-) diff --git a/src/test/utils/gameWrapper.ts b/src/test/utils/gameWrapper.ts index f3098fa9b71..1cf01a3a8c8 100644 --- a/src/test/utils/gameWrapper.ts +++ b/src/test/utils/gameWrapper.ts @@ -41,7 +41,7 @@ window.URL.createObjectURL = (blob: Blob) => { }); return null; }; -navigator.getGamepads = vi.fn().mockReturnValue([]); +navigator.getGamepads = () => []; global.fetch = vi.fn(MockFetch); Utils.setCookie(Utils.sessionIdKey, 'fake_token'); diff --git a/src/test/utils/mocks/mockGameObjectCreator.ts b/src/test/utils/mocks/mockGameObjectCreator.ts index 19406a46923..27860be0cec 100644 --- a/src/test/utils/mocks/mockGameObjectCreator.ts +++ b/src/test/utils/mocks/mockGameObjectCreator.ts @@ -1,4 +1,3 @@ -import { vi } from "vitest"; import MockGraphics from "./mocksContainer/mockGraphics"; import MockTextureManager from "./mockTextureManager"; @@ -16,8 +15,8 @@ export class MockGameObjectCreator { rexTransitionImagePack() { return { - transit: vi.fn(), - once: vi.fn(), + transit: () => null, + once: () => null, }; } } diff --git a/src/test/utils/mocks/mockVideoGameObject.ts b/src/test/utils/mocks/mockVideoGameObject.ts index 96f03542bbc..d8155e23b6c 100644 --- a/src/test/utils/mocks/mockVideoGameObject.ts +++ b/src/test/utils/mocks/mockVideoGameObject.ts @@ -1,13 +1,12 @@ -import { vi } from "vitest"; import { MockGameObject } from "./mockGameObject"; /** Mocks video-related stuff */ export class MockVideoGameObject implements MockGameObject { constructor() {} - public play = vi.fn(); - public stop = vi.fn(() => this); - public setOrigin = vi.fn(); - public setScale = vi.fn(); - public setVisible = vi.fn(); + public play = () => null; + public stop = () => this; + public setOrigin = () => null; + public setScale = () => null; + public setVisible = () => null; } diff --git a/src/test/utils/mocks/mocksContainer/mockContainer.ts b/src/test/utils/mocks/mocksContainer/mockContainer.ts index 94ae61a6ce4..e13cef0e43e 100644 --- a/src/test/utils/mocks/mocksContainer/mockContainer.ts +++ b/src/test/utils/mocks/mocksContainer/mockContainer.ts @@ -1,5 +1,4 @@ import MockTextureManager from "#test/utils/mocks/mockTextureManager"; -import { vi } from "vitest"; import { MockGameObject } from "../mockGameObject"; export default class MockContainer implements MockGameObject { @@ -52,7 +51,7 @@ export default class MockContainer implements MockGameObject { /// Sets the position of this Game Object to be a relative position from the source Game Object. } - setInteractive = vi.fn(); + setInteractive = () => null; setOrigin(x, y) { this.x = x; @@ -160,10 +159,9 @@ export default class MockContainer implements MockGameObject { // Moves this Game Object to be below the given Game Object in the display list. } - setName = vi.fn((name: string) => { + setName = (name: string) => { this.name = name; - // return this.phaserSprite.setName(name); - }); + }; bringToTop(obj) { // Brings this Game Object to the top of its parents display list. @@ -207,5 +205,5 @@ export default class MockContainer implements MockGameObject { return this.list; } - disableInteractive = vi.fn(); + disableInteractive = () => null; } diff --git a/src/test/utils/mocks/mocksContainer/mockSprite.ts b/src/test/utils/mocks/mocksContainer/mockSprite.ts index ae43df46cf5..83ec3951151 100644 --- a/src/test/utils/mocks/mocksContainer/mockSprite.ts +++ b/src/test/utils/mocks/mocksContainer/mockSprite.ts @@ -1,6 +1,5 @@ import Phaser from "phaser"; import { MockGameObject } from "../mockGameObject"; -import { vi } from "vitest"; import Sprite = Phaser.GameObjects.Sprite; import Frame = Phaser.Textures.Frame; @@ -102,7 +101,7 @@ export default class MockSprite implements MockGameObject { return this.phaserSprite.stop(); } - setInteractive = vi.fn(); + setInteractive = () => null; on(event, callback, source) { return this.phaserSprite.on(event, callback, source); diff --git a/src/test/utils/mocks/mocksContainer/mockText.ts b/src/test/utils/mocks/mocksContainer/mockText.ts index 5a89432902b..5462056f1e5 100644 --- a/src/test/utils/mocks/mocksContainer/mockText.ts +++ b/src/test/utils/mocks/mocksContainer/mockText.ts @@ -1,5 +1,4 @@ import UI from "#app/ui/ui"; -import { vi } from "vitest"; import { MockGameObject } from "../mockGameObject"; export default class MockText implements MockGameObject { @@ -193,11 +192,11 @@ export default class MockText implements MockGameObject { }; } - setColor = vi.fn((color: string) => { + setColor = (color: string) => { this.color = color; - }); + }; - setInteractive = vi.fn(); + setInteractive = () => null; setShadowColor(color) { // Sets the shadow color. @@ -223,9 +222,9 @@ export default class MockText implements MockGameObject { // return this.phaserText.setAlpha(alpha); } - setName = vi.fn((name: string) => { + setName = (name: string) => { this.name = name; - }); + }; setAlign(align) { // return this.phaserText.setAlign(align); From b33d86a1db18b1ec437368aa5accfd3a7e2e295d Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Wed, 11 Sep 2024 22:55:13 +0200 Subject: [PATCH 27/37] [BUG] Make Tate & Liza have seeded randomness #4175 --- src/field/trainer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 02827d0d69d..326ef0edefb 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -357,7 +357,7 @@ export default class Trainer extends Phaser.GameObjects.Container { // If useNewSpeciesPool is true, we need to generate a new species from the new species pool, otherwise we generate a random species let species = useNewSpeciesPool - ? getPokemonSpecies(newSpeciesPool[Math.floor(Math.random() * newSpeciesPool.length)]) + ? getPokemonSpecies(newSpeciesPool[Math.floor(Utils.randSeedInt(newSpeciesPool.length))]) : template.isSameSpecies(index) && index > offset ? getPokemonSpecies(battle.enemyParty[offset].species.getTrainerSpeciesForLevel(level, false, template.getStrength(offset), this.scene.currentBattle.waveIndex)) : this.genNewPartyMemberSpecies(level, strength); From 50a75005611b16ba5bfa4986395954e0f675adce Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Wed, 11 Sep 2024 19:46:38 -0400 Subject: [PATCH 28/37] [Sprite] Fix animated Cursola (#4186) * [Sprite] Index Cursola exp * [Sprite] Index shiny Cursola exp * [Sprite] Update exp Cursola variant palette --- public/images/pokemon/exp/864.png | Bin 35956 -> 15466 bytes public/images/pokemon/exp/shiny/864.png | Bin 34329 -> 15853 bytes public/images/pokemon/variant/exp/864.json | 54 +++++++++------------ 3 files changed, 23 insertions(+), 31 deletions(-) diff --git a/public/images/pokemon/exp/864.png b/public/images/pokemon/exp/864.png index 036e2b9e40f093b9f75fdde24cf82f287ce15976..2776e938e827d222477b12979307c160d301585f 100644 GIT binary patch literal 15466 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 literal 35956 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 diff --git a/public/images/pokemon/exp/shiny/864.png b/public/images/pokemon/exp/shiny/864.png index 079b1f6a6817c5cd1872ea98741e983eb87043aa..66d648edf7910994f9adf8d013b0679e8735b380 100644 GIT binary patch delta 15559 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 Sy!~AaBPXpaRV85>{C@ygvXm15 literal 34329 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 WKlW6i&KPLS5Cs`k=}JlS!2b_j-OaH8 diff --git a/public/images/pokemon/variant/exp/864.json b/public/images/pokemon/variant/exp/864.json index cf8ae42b0fd..ccfc0f2d88d 100644 --- a/public/images/pokemon/variant/exp/864.json +++ b/public/images/pokemon/variant/exp/864.json @@ -3,44 +3,36 @@ "bcb9be": "ae4c95", "f9f2fc": "ffc0e5", "7b787c": "793d6d", - "e1dfe2": "e88cc5", - "d0cfd0": "ce6bac", - "b8b4ba": "d7d2f6", + "dcd9dd": "e88cc5", + "c9c0ce": "ce6bac", + "cbc2d1": "d7d2f6", "938f94": "b465b9", - "6c7275": "d3ffff", - "9362e6": "80a4ff", - "fcfcfc": "fcfcfc", - "4a494e": "a7e6e5", - "c6a4ff": "bed5ff", - "101010": "101010", - "3b3a3f": "4d8894", - "aeadae": "e88cc5", - "686568": "686568", - "6f6d71": "793d6d", - "b5b4b6": "ce6bac", - "706e6d": "7d7c75", + "fbf2ff": "d3ffff", + "e66294": "80a4ff", + "c6bbcb": "a7e6e5", + "ffa4c5": "bed5ff", + "7f806a": "4d8894", + "a8a0ac": "e88cc5", + "7c7a78": "793d6d", + "bbb4bc": "ce6bac", "af9e9e": "42a2b1" }, "2": { "bcb9be": "055946", "f9f2fc": "21be70", "7b787c": "004140", - "e1dfe2": "12a169", - "d0cfd0": "0a7a57", - "b8b4ba": "567f83", + "dcd9dd": "12a169", + "c9c0ce": "0a7a57", + "cbc2d1": "567f83", "938f94": "2b5458", - "6c7275": "874059", - "9362e6": "15c05f", - "fcfcfc": "fcfcfc", - "4a494e": "773050", - "c6a4ff": "8ff3a3", - "101010": "101010", - "3b3a3f": "4b1f28", - "aeadae": "12a169", - "686568": "686568", - "6f6d71": "004140", - "b5b4b6": "0a7a57", - "706e6d": "7d7c75", + "fbf2ff": "874059", + "e66294": "15c05f", + "c6bbcb": "773050", + "ffa4c5": "8ff3a3", + "7f806a": "4b1f28", + "a8a0ac": "12a169", + "7c7a78": "004140", + "bbb4bc": "0a7a57", "af9e9e": "48c492" } -} \ No newline at end of file +} From a6d5fc66f276674cfff9e77b8c3037697359094c Mon Sep 17 00:00:00 2001 From: "Amani H." <109637146+xsn34kzx@users.noreply.github.com> Date: Wed, 11 Sep 2024 20:56:58 -0400 Subject: [PATCH 29/37] =?UTF-8?q?[Balance]=20Disable=20Eviolite=20for=20G-?= =?UTF-8?q?Max=20Pok=C3=A9mon=20(#4184)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [Balance] Disable Eviolite for G-Max Pokémon * Add Documentation --- src/modifier/modifier.ts | 13 ++ src/test/items/eviolite.test.ts | 279 ++++++++++++++------------------ 2 files changed, 135 insertions(+), 157 deletions(-) diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index f5c80618396..9273eb42b90 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -29,6 +29,7 @@ import { Abilities } from "#app/enums/abilities"; import { LearnMovePhase } from "#app/phases/learn-move-phase"; import { LevelUpPhase } from "#app/phases/level-up-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; +import { SpeciesFormKey } from "#app/data/pokemon-species"; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -923,6 +924,18 @@ export class EvolutionStatBoosterModifier extends StatBoosterModifier { return modifier instanceof EvolutionStatBoosterModifier; } + /** + * Checks if the stat boosts can apply and if the holder is not currently + * Gigantamax'd. + * @param args [0] {@linkcode Pokemon} that holds the held item + * [1] {@linkcode Stat} N/A + * [2] {@linkcode Utils.NumberHolder} N/A + * @returns true if the stat boosts can be applied, false otherwise + */ + shouldApply(args: any[]): boolean { + return super.shouldApply(args) && ((args[0] as Pokemon).getFormKey() !== SpeciesFormKey.GIGANTAMAX); + } + /** * Boosts the incoming stat value by a {@linkcode multiplier} if the holder * can evolve. Note that, if the holder is a fusion, they will receive diff --git a/src/test/items/eviolite.test.ts b/src/test/items/eviolite.test.ts index 83b00583893..d9991d47a89 100644 --- a/src/test/items/eviolite.test.ts +++ b/src/test/items/eviolite.test.ts @@ -1,16 +1,15 @@ import { Stat } from "#enums/stat"; -import { EvolutionStatBoosterModifier } from "#app/modifier/modifier"; -import { modifierTypes } from "#app/modifier/modifier-type"; -import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/utils/gameManager"; import Phase from "phaser"; +import * as Utils from "#app/utils"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { StatBoosterModifier } from "#app/modifier/modifier"; describe("Items - Eviolite", () => { let phaserGame: Phaser.Game; let game: GameManager; + const TIMEOUT = 20 * 1000; beforeAll(() => { phaserGame = new Phase.Game({ @@ -25,108 +24,65 @@ describe("Items - Eviolite", () => { beforeEach(() => { game = new GameManager(phaserGame); - game.override.battleType("single"); + game.override + .battleType("single") + .startingHeldItems([{ name: "EVIOLITE" }]); }); - it("EVIOLITE activates in battle correctly", async() => { - game.override.startingHeldItems([{ name: "EVIOLITE" }]); - const consoleSpy = vi.spyOn(console, "log"); - await game.startBattle([ + it("should provide 50% boost to DEF and SPDEF for unevolved, unfused pokemon", async() => { + await game.classicMode.startBattle([ Species.PICHU ]); - const partyMember = game.scene.getParty()[0]; + const partyMember = game.scene.getPlayerPokemon()!; - // Checking console log to make sure Eviolite is applied when getEffectiveStat (with the appropriate stat) is called - partyMember.getEffectiveStat(Stat.DEF); - expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:ModifierType.EVIOLITE.name"), ""); + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); - // Printing dummy console messages along the way so subsequent checks don't pass because of the first - console.log(""); + // Ignore other calculations for simplicity - partyMember.getEffectiveStat(Stat.SPDEF); - expect(consoleSpy).toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:ModifierType.EVIOLITE.name"), ""); + return Math.floor(statValue.value); + }); - console.log(""); + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); - partyMember.getEffectiveStat(Stat.ATK); - expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:ModifierType.EVIOLITE.name"), ""); + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(Math.floor(defStat * 1.5)); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(spDefStat * 1.5)); + }, TIMEOUT); - console.log(""); - - partyMember.getEffectiveStat(Stat.SPATK); - expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:ModifierType.EVIOLITE.name"), ""); - - console.log(""); - - partyMember.getEffectiveStat(Stat.SPD); - expect(consoleSpy).not.toHaveBeenLastCalledWith("Applied", i18next.t("modifierType:ModifierType.EVIOLITE.name"), ""); - }); - - it("EVIOLITE held by unevolved, unfused pokemon", async() => { - await game.startBattle([ - Species.PICHU - ]); - - const partyMember = game.scene.getParty()[0]; - - const defStat = partyMember.getStat(Stat.DEF); - const spDefStat = partyMember.getStat(Stat.SPDEF); - - // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - const spDefValue = new Utils.NumberHolder(spDefStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); - - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); - - // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.EVIOLITE().newModifier(partyMember), true); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); - - expect(defValue.value / defStat).toBe(1.5); - expect(spDefValue.value / spDefStat).toBe(1.5); - }, 20000); - - it("EVIOLITE held by fully evolved, unfused pokemon", async() => { - await game.startBattle([ + it("should not provide a boost for fully evolved, unfused pokemon", async() => { + await game.classicMode.startBattle([ Species.RAICHU, ]); const partyMember = game.scene.getParty()[0]; - const defStat = partyMember.getStat(Stat.DEF); - const spDefStat = partyMember.getStat(Stat.SPDEF); + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); - // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - const spDefValue = new Utils.NumberHolder(spDefStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + // Ignore other calculations for simplicity - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); + return Math.floor(statValue.value); + }); - // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.EVIOLITE().newModifier(partyMember), true); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); - }, 20000); + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(defStat); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(spDefStat); - it("EVIOLITE held by completely unevolved, fused pokemon", async() => { - await game.startBattle([ + }, TIMEOUT); + + it("should provide 50% boost to DEF and SPDEF for completely unevolved, fused pokemon", async() => { + await game.classicMode.startBattle([ Species.PICHU, Species.CLEFFA ]); - const partyMember = game.scene.getParty()[0]; - const ally = game.scene.getParty()[1]; + const [ partyMember, ally ] = game.scene.getParty(); // Fuse party members (taken from PlayerPokemon.fuse(...) function) partyMember.fusionSpecies = ally.species; @@ -137,35 +93,29 @@ describe("Items - Eviolite", () => { partyMember.fusionGender = ally.gender; partyMember.fusionLuck = ally.luck; - const defStat = partyMember.getStat(Stat.DEF); - const spDefStat = partyMember.getStat(Stat.SPDEF); + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); - // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - const spDefValue = new Utils.NumberHolder(spDefStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + // Ignore other calculations for simplicity - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); + return Math.floor(statValue.value); + }); - // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.EVIOLITE().newModifier(partyMember), true); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); - expect(defValue.value / defStat).toBe(1.5); - expect(spDefValue.value / spDefStat).toBe(1.5); - }, 20000); + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(Math.floor(defStat * 1.5)); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(spDefStat * 1.5)); + }, TIMEOUT); - it("EVIOLITE held by partially unevolved (base), fused pokemon", async() => { - await game.startBattle([ + it("should provide 25% boost to DEF and SPDEF for partially unevolved (base), fused pokemon", async() => { + await game.classicMode.startBattle([ Species.PICHU, Species.CLEFABLE ]); - const partyMember = game.scene.getParty()[0]; - const ally = game.scene.getParty()[1]; + const [ partyMember, ally ] = game.scene.getParty(); // Fuse party members (taken from PlayerPokemon.fuse(...) function) partyMember.fusionSpecies = ally.species; @@ -176,35 +126,29 @@ describe("Items - Eviolite", () => { partyMember.fusionGender = ally.gender; partyMember.fusionLuck = ally.luck; - const defStat = partyMember.getStat(Stat.DEF); - const spDefStat = partyMember.getStat(Stat.SPDEF); + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); - // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - const spDefValue = new Utils.NumberHolder(spDefStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + // Ignore other calculations for simplicity - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); + return Math.floor(statValue.value); + }); - // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.EVIOLITE().newModifier(partyMember), true); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); - expect(defValue.value / defStat).toBe(1.25); - expect(spDefValue.value / spDefStat).toBe(1.25); - }, 20000); + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(Math.floor(defStat * 1.25)); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(spDefStat * 1.25)); + }, TIMEOUT); - it("EVIOLITE held by partially unevolved (fusion), fused pokemon", async() => { - await game.startBattle([ + it("should provide 25% boost to DEF and SPDEF for partially unevolved (fusion), fused pokemon", async() => { + await game.classicMode.startBattle([ Species.RAICHU, Species.CLEFFA ]); - const partyMember = game.scene.getParty()[0]; - const ally = game.scene.getParty()[1]; + const [ partyMember, ally ] = game.scene.getParty(); // Fuse party members (taken from PlayerPokemon.fuse(...) function) partyMember.fusionSpecies = ally.species; @@ -215,35 +159,29 @@ describe("Items - Eviolite", () => { partyMember.fusionGender = ally.gender; partyMember.fusionLuck = ally.luck; - const defStat = partyMember.getStat(Stat.DEF); - const spDefStat = partyMember.getStat(Stat.SPDEF); + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); - // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - const spDefValue = new Utils.NumberHolder(spDefStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + // Ignore other calculations for simplicity - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); + return Math.floor(statValue.value); + }); - // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.EVIOLITE().newModifier(partyMember), true); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); - expect(defValue.value / defStat).toBe(1.25); - expect(spDefValue.value / spDefStat).toBe(1.25); - }, 20000); + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(Math.floor(defStat * 1.25)); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(spDefStat * 1.25)); + }, TIMEOUT); - it("EVIOLITE held by completely evolved, fused pokemon", async() => { - await game.startBattle([ + it("should not provide a boost for fully evolved, fused pokemon", async() => { + await game.classicMode.startBattle([ Species.RAICHU, Species.CLEFABLE ]); - const partyMember = game.scene.getParty()[0]; - const ally = game.scene.getParty()[1]; + const [ partyMember, ally ] = game.scene.getParty(); // Fuse party members (taken from PlayerPokemon.fuse(...) function) partyMember.fusionSpecies = ally.species; @@ -254,24 +192,51 @@ describe("Items - Eviolite", () => { partyMember.fusionGender = ally.gender; partyMember.fusionLuck = ally.luck; - const defStat = partyMember.getStat(Stat.DEF); - const spDefStat = partyMember.getStat(Stat.SPDEF); + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); - // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - const spDefValue = new Utils.NumberHolder(spDefStat); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + // Ignore other calculations for simplicity - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); + return Math.floor(statValue.value); + }); - // Giving Eviolite to party member and testing if it applies - partyMember.scene.addModifier(modifierTypes.EVIOLITE().newModifier(partyMember), true); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.DEF, defValue); - partyMember.scene.applyModifiers(EvolutionStatBoosterModifier, true, partyMember, Stat.SPDEF, spDefValue); + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); - expect(defValue.value / defStat).toBe(1); - expect(spDefValue.value / spDefStat).toBe(1); - }, 20000); + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(defStat); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(spDefStat); + }, TIMEOUT); + + it("should not provide a boost for Gigantamax Pokémon", async() => { + game.override.starterForms({ + [Species.PIKACHU]: 8, + [Species.EEVEE]: 2, + [Species.DURALUDON]: 1, + [Species.MEOWTH]: 1 + }); + + const gMaxablePokemon = [ Species.PIKACHU, Species.EEVEE, Species.DURALUDON, Species.MEOWTH ]; + + await game.classicMode.startBattle([ + Utils.randItem(gMaxablePokemon) + ]); + + const partyMember = game.scene.getPlayerPokemon()!; + + vi.spyOn(partyMember, "getEffectiveStat").mockImplementation((stat, _opponent?, _move?, _isCritical?) => { + const statValue = new Utils.NumberHolder(partyMember.getStat(stat, false)); + game.scene.applyModifiers(StatBoosterModifier, partyMember.isPlayer(), partyMember, stat, statValue); + + // Ignore other calculations for simplicity + + return Math.floor(statValue.value); + }); + + const defStat = partyMember.getStat(Stat.DEF, false); + const spDefStat = partyMember.getStat(Stat.SPDEF, false); + + expect(partyMember.getEffectiveStat(Stat.DEF)).toBe(defStat); + expect(partyMember.getEffectiveStat(Stat.SPDEF)).toBe(spDefStat); + }, TIMEOUT); }); From d4cd74c8b7106f11ab0518de12b656253937c270 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:58:21 -0700 Subject: [PATCH 30/37] [P2 Bug] Baddy Bad shouldn't activate Reflect if the target uses Protect, make gravity and water/mud sport ignore protect(#4180) --- src/data/move.ts | 5 +++- src/test/moves/baddy_bad.test.ts | 43 ++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/test/moves/baddy_bad.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 7800d6df12a..bf61ed5befe 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -4747,7 +4747,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { return false; } - if (move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) { + if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0].result === MoveResult.SUCCESS) { user.scene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY); return true; } @@ -7417,6 +7417,7 @@ export function initMoves() { .attr(HighCritAttr) .attr(StatusEffectAttr, StatusEffect.BURN), new StatusMove(Moves.MUD_SPORT, Type.GROUND, -1, 15, -1, 0, 3) + .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.MUD_SPORT, 5) .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.ICE_BALL, Type.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) @@ -7541,6 +7542,7 @@ export function initMoves() { .recklessMove(), new AttackMove(Moves.MAGICAL_LEAF, Type.GRASS, MoveCategory.SPECIAL, 60, -1, 20, -1, 0, 3), new StatusMove(Moves.WATER_SPORT, Type.WATER, -1, 15, -1, 0, 3) + .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.WATER_SPORT, 5) .target(MoveTarget.BOTH_SIDES), new SelfStatusMove(Moves.CALM_MIND, Type.PSYCHIC, -1, 20, -1, 0, 3) @@ -7569,6 +7571,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.ROOSTED, true, false) .triageMove(), new StatusMove(Moves.GRAVITY, Type.PSYCHIC, -1, 5, -1, 0, 4) + .ignoresProtect() .attr(AddArenaTagAttr, ArenaTagType.GRAVITY, 5) .target(MoveTarget.BOTH_SIDES), new StatusMove(Moves.MIRACLE_EYE, Type.PSYCHIC, -1, 40, -1, 0, 4) diff --git a/src/test/moves/baddy_bad.test.ts b/src/test/moves/baddy_bad.test.ts new file mode 100644 index 00000000000..d1a221453a6 --- /dev/null +++ b/src/test/moves/baddy_bad.test.ts @@ -0,0 +1,43 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Baddy Bad", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const TIMEOUT = 20 * 1000; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SPLASH]) + .battleType("single") + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH) + .ability(Abilities.BALL_FETCH); + }); + + it("should not activate Reflect if the move fails due to Protect", async () => { + game.override.enemyMoveset(Moves.PROTECT); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.BADDY_BAD); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.arena.tags.length).toBe(0); + }, TIMEOUT); +}); From fec218b747ba7fd685d9dbd54d381884c2743c31 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 11 Sep 2024 17:59:57 -0700 Subject: [PATCH 31/37] [Refactor] `setTypeIcons` explicitly handles `null`, mark it as such (#4155) --- src/ui/starter-select-ui-handler.ts | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 0c3d8de61b0..d99c25bc612 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -28,15 +28,15 @@ import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import { Egg } from "#app/data/egg"; import Overrides from "#app/overrides"; -import {SettingKeyboard} from "#app/system/settings/settings-keyboard"; -import {Passive as PassiveAttr} from "#enums/passive"; +import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; +import { Passive as PassiveAttr } from "#enums/passive"; import * as Challenge from "../data/challenge"; import MoveInfoOverlay from "./move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; import { EggSourceType } from "#app/enums/egg-source-types"; import AwaitableUiHandler from "./awaitable-ui-handler"; import { DropDown, DropDownLabel, DropDownOption, DropDownState, DropDownType, SortCriteria } from "./dropdown"; @@ -2905,7 +2905,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { } const speciesForm = getPokemonSpeciesForm(species.speciesId, props.formIndex); - this.setTypeIcons(speciesForm.type1, speciesForm!.type2!); // TODO: are those bangs correct? + this.setTypeIcons(speciesForm.type1, speciesForm.type2); this.pokemonSprite.clearTint(); if (this.pokerusSpecies.includes(species)) { @@ -3242,13 +3242,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonFormText.setText(formText ? i18next.t(`pokemonForm:${speciesName}${formText}`) : ""); } - this.setTypeIcons(speciesForm.type1, speciesForm.type2!); // TODO: is this bang correct? + this.setTypeIcons(speciesForm.type1, speciesForm.type2); } else { this.pokemonAbilityText.setText(""); this.pokemonPassiveText.setText(""); this.pokemonNatureText.setText(""); - // @ts-ignore - this.setTypeIcons(null, null); // TODO: resolve ts-ignore.. huh!? + this.setTypeIcons(null, null); } } else { this.shinyOverlay.setVisible(false); @@ -3258,8 +3257,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.pokemonAbilityText.setText(""); this.pokemonPassiveText.setText(""); this.pokemonNatureText.setText(""); - // @ts-ignore - this.setTypeIcons(null, null); // TODO: resolve ts-ignore.. huh!? + this.setTypeIcons(null, null); } if (!this.starterMoveset) { @@ -3292,7 +3290,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.updateInstructions(); } - setTypeIcons(type1: Type, type2: Type): void { + setTypeIcons(type1: Type | null, type2: Type | null): void { if (type1 !== null) { this.type1Icon.setVisible(true); this.type1Icon.setFrame(Type[type1].toLowerCase()); From f294f034aa1c7ac41b67a7f4ce7374ad2fb051db Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:00:26 -0700 Subject: [PATCH 32/37] [Bug] Run History displays Pokemon that have their natures changed during the run (#4149) * Nature mints... spaghetti... * Update src/ui/run-info-ui-handler.ts Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> * No effect when no items --------- Co-authored-by: frutescens Co-authored-by: MokaStitcher <54149968+MokaStitcher@users.noreply.github.com> --- src/ui/run-info-ui-handler.ts | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index f398abed6f5..b7ad5f5adec 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -541,7 +541,9 @@ export default class RunInfoUiHandler extends UiHandler { // Contains Name, Level + Nature, Ability, Passive const pokeInfoTextContainer = this.scene.add.container(-85, 3.5); const textContainerFontSize = "34px"; - const pNature = getNatureName(pokemon.nature); + // This checks if the Pokemon's nature has been overwritten during the run and displays the change accurately + const pNature = pokemon.getNature(); + const pNatureName = getNatureName(pNature); const pName = pokemon.getNameToRender(); //With the exception of Korean/Traditional Chinese/Simplified Chinese, the code shortens the terms for ability and passive to their first letter. //These languages are exempted because they are already short enough. @@ -557,7 +559,7 @@ export default class RunInfoUiHandler extends UiHandler { // Japanese is set to a greater line spacing of 35px in addBBCodeTextObject() if lineSpacing < 12. const lineSpacing = (i18next.resolvedLanguage === "ja") ? 12 : 3; const pokeInfoText = addBBCodeTextObject(this.scene, 0, 0, pName, TextStyle.SUMMARY, {fontSize: textContainerFontSize, lineSpacing: lineSpacing}); - pokeInfoText.appendText(`${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatFancyLargeNumber(pokemon.level, 1)} - ${pNature}`); + pokeInfoText.appendText(`${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`); pokeInfoText.appendText(pAbilityInfo); pokeInfoText.appendText(pPassiveInfo); pokeInfoTextContainer.add(pokeInfoText); @@ -568,7 +570,7 @@ export default class RunInfoUiHandler extends UiHandler { const pStats : string[]= []; pokemon.stats.forEach((element) => pStats.push(Utils.formatFancyLargeNumber(element, 1))); for (let i = 0; i < pStats.length; i++) { - const isMult = getNatureStatMultiplier(pokemon.nature, i); + const isMult = getNatureStatMultiplier(pNature, i); pStats[i] = (isMult < 1) ? pStats[i] + "[color=#40c8f8]↓[/color]" : pStats[i]; pStats[i] = (isMult > 1) ? pStats[i] + "[color=#f89890]↑[/color]" : pStats[i]; } @@ -889,10 +891,12 @@ export default class RunInfoUiHandler extends UiHandler { } break; case Button.CYCLE_ABILITY: - if (this.partyVisibility) { - this.showParty(false); - } else { - this.showParty(true); + if (this.runInfo.modifiers.length !== 0) { + if (this.partyVisibility) { + this.showParty(false); + } else { + this.showParty(true); + } } break; } From 18dc1029b789050011950bbb2246eb9e8c0e6bb8 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:01:16 -0700 Subject: [PATCH 33/37] [Misc] Update issue/feature template (#4148) * simplify bug-report form. Add `Triage` label to bug & feature form * Add repro textfield to bug form * Fix typo --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- .github/ISSUE_TEMPLATE/bug_report.yml | 67 +++++----------------- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- 2 files changed, 16 insertions(+), 53 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 23c4a0a2159..eb270dc8f80 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -1,7 +1,7 @@ name: Bug Report description: Create a report to help us improve title: "[Bug] " -labels: ["Bug"] +labels: ["Bug", "Triage"] body: - type: markdown attributes: @@ -19,21 +19,12 @@ body: value: | --- - type: textarea - id: session-file + id: repro attributes: - label: Session export file - description: Open Menu → ManageData → Export Session → Select slot. The file should now be in your `/Downloads` directory. Change the file extension type from `.prsv` to `.txt` (How to [Windows](https://www.guidingtech.com/how-to-change-file-type-on-windows/) | [Mac](https://support.apple.com/guide/mac-help/show-or-hide-filename-extensions-on-mac-mchlp2304/mac) | [iOS](https://www.guidingtech.com/change-file-type-extension-on-iphone/)). - placeholder: Focus me and then drop your file here (or use the upload button at the bottom) + label: Reproduction + description: Describe the steps to reproduce this bug. If applicable attach user/session data at the bottom validations: - required: false - - type: textarea - id: data-file - attributes: - label: User data export file - description: Open Menu → ManageData → Export Data. The file should now be in your `/Downloads` directory. Change the file extension type from `.prsv` to `.txt` (How to [Windows](https://www.guidingtech.com/how-to-change-file-type-on-windows/) | [Mac](https://support.apple.com/guide/mac-help/show-or-hide-filename-extensions-on-mac-mchlp2304/mac) | [iOS](https://www.guidingtech.com/change-file-type-extension-on-iphone/)). - placeholder: Focus me and then drop your file here (or use the upload button at the bottom) - validations: - required: false + required: true - type: markdown attributes: value: | @@ -60,48 +51,20 @@ body: attributes: value: | --- - - type: dropdown - id: os + - type: textarea + id: session-file attributes: - label: What OS did you observe the bug on? - multiple: true - options: - - PC/Windows - - Mac/OSX - - Linux - - iOS - - Android - - Other - validations: - required: true - - type: input - id: os-other - attributes: - label: If other please specify + label: Session export file + description: Open Menu → ManageData → Export Session → Select slot. The file should now be in your `/Downloads` directory. Change the file extension type from `.prsv` to `.txt` (How to [Windows](https://www.guidingtech.com/how-to-change-file-type-on-windows/) | [Mac](https://support.apple.com/guide/mac-help/show-or-hide-filename-extensions-on-mac-mchlp2304/mac) | [iOS](https://www.guidingtech.com/change-file-type-extension-on-iphone/)). + placeholder: Focus me and then drop your file here (or use the upload button at the bottom) validations: required: false - - type: markdown + - type: textarea + id: data-file attributes: - value: | - --- - - type: dropdown - id: browser - attributes: - label: Which browser do you use? - multiple: true - options: - - Chrome - - Firefox - - Safari - - Edge - - Opera - - Other - validations: - required: true - - type: input - id: browser-other - attributes: - label: If other please specify + label: User data export file + description: Open Menu → ManageData → Export Data. The file should now be in your `/Downloads` directory. Change the file extension type from `.prsv` to `.txt` (How to [Windows](https://www.guidingtech.com/how-to-change-file-type-on-windows/) | [Mac](https://support.apple.com/guide/mac-help/show-or-hide-filename-extensions-on-mac-mchlp2304/mac) | [iOS](https://www.guidingtech.com/change-file-type-extension-on-iphone/)). + placeholder: Focus me and then drop your file here (or use the upload button at the bottom) validations: required: false - type: markdown diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index 843f7feab59..29a79b38158 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -1,7 +1,7 @@ name: Feature Request description: Suggest an idea for this project title: "[Feature] " -labels: ["Enhancement"] +labels: ["Enhancement", "Triage"] body: - type: markdown attributes: From 951b5685904949aa002eda36271747b43272d710 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:05:43 -0700 Subject: [PATCH 34/37] [Documentation] Add some tsdocs to `move.ts`, mark rollout and iceball (P) (#4099) * Add some tsdocs to `move.ts`, some misc cleanup * Mark Rollout and Ice Ball as partial --- src/data/move.ts | 93 ++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 42 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index bf61ed5befe..135122311ff 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -81,6 +81,16 @@ export enum MoveFlags { MAKES_CONTACT = 1 << 0, IGNORE_PROTECT = 1 << 1, IGNORE_VIRTUAL = 1 << 2, + /** + * Sound-based moves have the following effects: + * - Pokemon with the {@linkcode Abilities.SOUNDPROOF Soundproof Ability} are unaffected by other Pokemon's sound-based moves. + * - Pokemon affected by {@linkcode Moves.THROAT_CHOP Throat Chop} cannot use sound-based moves for two turns. + * - Sound-based moves used by a Pokemon with {@linkcode Abilities.LIQUID_VOICE Liquid Voice} become Water-type moves. + * - Sound-based moves used by a Pokemon with {@linkcode Abilities.PUNK_ROCK Punk Rock} are boosted by 30%. Pokemon with Punk Rock also take half damage from sound-based moves. + * - All sound-based moves (except Howl) can hit Pokemon behind an active {@linkcode Moves.SUBSTITUTE Substitute}. + * + * cf https://bulbapedia.bulbagarden.net/wiki/Sound-based_move + */ SOUND_BASED = 1 << 3, HIDE_USER = 1 << 4, HIDE_TARGET = 1 << 5, @@ -93,19 +103,20 @@ export enum MoveFlags { * @see {@linkcode Move.recklessMove()} */ RECKLESS_MOVE = 1 << 10, + /** Indicates a move should be affected by {@linkcode Abilities.BULLETPROOF} */ BALLBOMB_MOVE = 1 << 11, + /** Grass types and pokemon with {@linkcode Abilities.OVERCOAT} are immune to powder moves */ POWDER_MOVE = 1 << 12, + /** Indicates a move should trigger {@linkcode Abilities.DANCER} */ DANCE_MOVE = 1 << 13, + /** Indicates a move should trigger {@linkcode Abilities.WIND_RIDER} */ WIND_MOVE = 1 << 14, + /** Indicates a move should trigger {@linkcode Abilities.TRIAGE} */ TRIAGE_MOVE = 1 << 15, IGNORE_ABILITIES = 1 << 16, - /** - * Enables all hits of a multi-hit move to be accuracy checked individually - */ + /** Enables all hits of a multi-hit move to be accuracy checked individually */ CHECK_ALL_HITS = 1 << 17, - /** - * Indicates a move is able to be redirected to allies in a double battle if the attacker faints - */ + /** Indicates a move is able to be redirected to allies in a double battle if the attacker faints */ REDIRECT_COUNTER = 1 << 18, } @@ -118,22 +129,22 @@ export default class Move implements Localizable { private _type: Type; private _category: MoveCategory; public moveTarget: MoveTarget; - public power: integer; - public accuracy: integer; - public pp: integer; + public power: number; + public accuracy: number; + public pp: number; public effect: string; - public chance: integer; - public priority: integer; - public generation: integer; - public attrs: MoveAttr[]; - private conditions: MoveCondition[]; - private flags: integer; - private nameAppend: string; + /** The chance of a move's secondary effects activating */ + public chance: number; + public priority: number; + public generation: number; + public attrs: MoveAttr[] = []; + private conditions: MoveCondition[] = []; + /** The move's {@linkcode MoveFlags} */ + private flags: number = 0; + private nameAppend: string = ""; - constructor(id: Moves, type: Type, category: MoveCategory, defaultMoveTarget: MoveTarget, power: integer, accuracy: integer, pp: integer, chance: integer, priority: integer, generation: integer) { + constructor(id: Moves, type: Type, category: MoveCategory, defaultMoveTarget: MoveTarget, power: number, accuracy: number, pp: number, chance: number, priority: number, generation: number) { this.id = id; - - this.nameAppend = ""; this._type = type; this._category = category; this.moveTarget = defaultMoveTarget; @@ -144,10 +155,6 @@ export default class Move implements Localizable { this.priority = priority; this.generation = generation; - this.attrs = []; - this.conditions = []; - - this.flags = 0; if (defaultMoveTarget === MoveTarget.USER) { this.setFlag(MoveFlags.IGNORE_PROTECT, true); } @@ -377,7 +384,7 @@ export default class Move implements Localizable { * @param makesContact The value (boolean) to set the flag to * @returns The {@linkcode Move} that called this function */ - makesContact(makesContact: boolean = true): this { // TODO: is true the correct default? + makesContact(makesContact: boolean = true): this { this.setFlag(MoveFlags.MAKES_CONTACT, makesContact); return this; } @@ -388,7 +395,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.CURSE} * @returns The {@linkcode Move} that called this function */ - ignoresProtect(ignoresProtect: boolean = true): this { // TODO: is `true` the correct default? + ignoresProtect(ignoresProtect: boolean = true): this { this.setFlag(MoveFlags.IGNORE_PROTECT, ignoresProtect); return this; } @@ -399,7 +406,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.NATURE_POWER} * @returns The {@linkcode Move} that called this function */ - ignoresVirtual(ignoresVirtual: boolean = true): this { // TODO: is `true` the correct default? + ignoresVirtual(ignoresVirtual: boolean = true): this { this.setFlag(MoveFlags.IGNORE_VIRTUAL, ignoresVirtual); return this; } @@ -410,7 +417,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.UPROAR} * @returns The {@linkcode Move} that called this function */ - soundBased(soundBased: boolean = true): this { // TODO: is `true` the correct default? + soundBased(soundBased: boolean = true): this { this.setFlag(MoveFlags.SOUND_BASED, soundBased); return this; } @@ -421,7 +428,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.TELEPORT} * @returns The {@linkcode Move} that called this function */ - hidesUser(hidesUser: boolean = true): this { // TODO: is `true` the correct default? + hidesUser(hidesUser: boolean = true): this { this.setFlag(MoveFlags.HIDE_USER, hidesUser); return this; } @@ -432,7 +439,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.WHIRLWIND} * @returns The {@linkcode Move} that called this function */ - hidesTarget(hidesTarget: boolean = true): this { // TODO: is `true` the correct default? + hidesTarget(hidesTarget: boolean = true): this { this.setFlag(MoveFlags.HIDE_TARGET, hidesTarget); return this; } @@ -443,7 +450,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.BITE} * @returns The {@linkcode Move} that called this function */ - bitingMove(bitingMove: boolean = true): this { // TODO: is `true` the correct default? + bitingMove(bitingMove: boolean = true): this { this.setFlag(MoveFlags.BITING_MOVE, bitingMove); return this; } @@ -454,7 +461,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.WATER_PULSE} * @returns The {@linkcode Move} that called this function */ - pulseMove(pulseMove: boolean = true): this { // TODO: is `true` the correct default? + pulseMove(pulseMove: boolean = true): this { this.setFlag(MoveFlags.PULSE_MOVE, pulseMove); return this; } @@ -465,7 +472,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.DRAIN_PUNCH} * @returns The {@linkcode Move} that called this function */ - punchingMove(punchingMove: boolean = true): this { // TODO: is `true` the correct default? + punchingMove(punchingMove: boolean = true): this { this.setFlag(MoveFlags.PUNCHING_MOVE, punchingMove); return this; } @@ -476,7 +483,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.X_SCISSOR} * @returns The {@linkcode Move} that called this function */ - slicingMove(slicingMove: boolean = true): this { // TODO: is `true` the correct default? + slicingMove(slicingMove: boolean = true): this { this.setFlag(MoveFlags.SLICING_MOVE, slicingMove); return this; } @@ -487,7 +494,7 @@ export default class Move implements Localizable { * @param recklessMove The value to set the flag to * @returns The {@linkcode Move} that called this function */ - recklessMove(recklessMove: boolean = true): this { // TODO: is `true` the correct default? + recklessMove(recklessMove: boolean = true): this { this.setFlag(MoveFlags.RECKLESS_MOVE, recklessMove); return this; } @@ -498,7 +505,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.ELECTRO_BALL} * @returns The {@linkcode Move} that called this function */ - ballBombMove(ballBombMove: boolean = true): this { // TODO: is `true` the correct default? + ballBombMove(ballBombMove: boolean = true): this { this.setFlag(MoveFlags.BALLBOMB_MOVE, ballBombMove); return this; } @@ -509,7 +516,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.STUN_SPORE} * @returns The {@linkcode Move} that called this function */ - powderMove(powderMove: boolean = true): this { // TODO: is `true` the correct default? + powderMove(powderMove: boolean = true): this { this.setFlag(MoveFlags.POWDER_MOVE, powderMove); return this; } @@ -520,7 +527,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.PETAL_DANCE} * @returns The {@linkcode Move} that called this function */ - danceMove(danceMove: boolean = true): this { // TODO: is `true` the correct default? + danceMove(danceMove: boolean = true): this { this.setFlag(MoveFlags.DANCE_MOVE, danceMove); return this; } @@ -531,7 +538,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.HURRICANE} * @returns The {@linkcode Move} that called this function */ - windMove(windMove: boolean = true): this { // TODO: is `true` the correct default? + windMove(windMove: boolean = true): this { this.setFlag(MoveFlags.WIND_MOVE, windMove); return this; } @@ -542,7 +549,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.ABSORB} * @returns The {@linkcode Move} that called this function */ - triageMove(triageMove: boolean = true): this { // TODO: is `true` the correct default? + triageMove(triageMove: boolean = true): this { this.setFlag(MoveFlags.TRIAGE_MOVE, triageMove); return this; } @@ -553,7 +560,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.SUNSTEEL_STRIKE} * @returns The {@linkcode Move} that called this function */ - ignoresAbilities(ignoresAbilities: boolean = true): this { // TODO: is `true` the correct default? + ignoresAbilities(ignoresAbilities: boolean = true): this { this.setFlag(MoveFlags.IGNORE_ABILITIES, ignoresAbilities); return this; } @@ -564,7 +571,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.TRIPLE_AXEL} * @returns The {@linkcode Move} that called this function */ - checkAllHits(checkAllHits: boolean = true): this { // TODO: is `true` the correct default? + checkAllHits(checkAllHits: boolean = true): this { this.setFlag(MoveFlags.CHECK_ALL_HITS, checkAllHits); return this; } @@ -575,7 +582,7 @@ export default class Move implements Localizable { * example: @see {@linkcode Moves.METAL_BURST} * @returns The {@linkcode Move} that called this function */ - redirectCounter(redirectCounter: boolean = true): this { // TODO: is `true` the correct default? + redirectCounter(redirectCounter: boolean = true): this { this.setFlag(MoveFlags.REDIRECT_COUNTER, redirectCounter); return this; } @@ -7138,6 +7145,7 @@ export function initMoves() { new StatusMove(Moves.CHARM, Type.FAIRY, 100, 20, -1, 0, 2) .attr(StatStageChangeAttr, [ Stat.ATK ], -2), new AttackMove(Moves.ROLLOUT, Type.ROCK, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 2) + .partial() .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL), new AttackMove(Moves.FALSE_SWIPE, Type.NORMAL, MoveCategory.PHYSICAL, 40, 100, 40, -1, 0, 2) .attr(SurviveDamageAttr), @@ -7421,6 +7429,7 @@ export function initMoves() { .attr(AddArenaTagAttr, ArenaTagType.MUD_SPORT, 5) .target(MoveTarget.BOTH_SIDES), new AttackMove(Moves.ICE_BALL, Type.ICE, MoveCategory.PHYSICAL, 30, 90, 20, -1, 0, 3) + .partial() .attr(ConsecutiveUseDoublePowerAttr, 5, true, true, Moves.DEFENSE_CURL) .ballBombMove(), new AttackMove(Moves.NEEDLE_ARM, Type.GRASS, MoveCategory.PHYSICAL, 60, 100, 15, 30, 0, 3) From 91d266ea74eaba7f20cca88a17a666c92791ed80 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Wed, 11 Sep 2024 18:31:38 -0700 Subject: [PATCH 35/37] [Bug] Burning Bulwark, King's Shield, Obstruct and Silk Trap no longer protect against status moves. (#4106) * Obstruct et al no longer protect against status moves * Remove `.js` from import Co-authored-by: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> * Add tsdocs for new/modified classes * List relevant moves in tsdocs --------- Co-authored-by: ImperialSympathizer <110984302+ben-lear@users.noreply.github.com> --- src/data/battler-tags.ts | 19 ++++++++- src/phases/move-effect-phase.ts | 5 ++- src/test/moves/obstruct.test.ts | 71 +++++++++++++++++++++++++++++++++ 3 files changed, 91 insertions(+), 4 deletions(-) create mode 100644 src/test/moves/obstruct.test.ts diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 52e039ed874..66b6676a4f5 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1298,6 +1298,13 @@ export class ProtectedTag extends BattlerTag { } } +/** Base class for `BattlerTag`s that block damaging moves but not status moves */ +export class DamageProtectedTag extends ProtectedTag {} + +/** + * `BattlerTag` class for moves that block damaging moves damage the enemy if the enemy's move makes contact + * Used by {@linkcode Moves.SPIKY_SHIELD} + */ export class ContactDamageProtectedTag extends ProtectedTag { private damageRatio: number; @@ -1333,7 +1340,11 @@ export class ContactDamageProtectedTag extends ProtectedTag { } } -export class ContactStatStageChangeProtectedTag extends ProtectedTag { +/** + * `BattlerTag` class for moves that block damaging moves and lower enemy stats if the enemy's move makes contact + * Used by {@linkcode Moves.KINGS_SHIELD}, {@linkcode Moves.OBSTRUCT}, {@linkcode Moves.SILK_TRAP} + */ +export class ContactStatStageChangeProtectedTag extends DamageProtectedTag { private stat: BattleStat; private levels: number; @@ -1389,7 +1400,11 @@ export class ContactPoisonProtectedTag extends ProtectedTag { } } -export class ContactBurnProtectedTag extends ProtectedTag { +/** + * `BattlerTag` class for moves that block damaging moves and burn the enemy if the enemy's move makes contact + * Used by {@linkcode Moves.BURNING_BULWARK} + */ +export class ContactBurnProtectedTag extends DamageProtectedTag { constructor(sourceMove: Moves) { super(sourceMove, BattlerTagType.BURNING_BULWARK); } diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index fb2b82ada03..41fb03c4f4f 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -3,7 +3,7 @@ import { BattlerIndex } from "#app/battle"; import { applyPreAttackAbAttrs, AddSecondStrikeAbAttr, IgnoreMoveEffectsAbAttr, applyPostDefendAbAttrs, PostDefendAbAttr, applyPostAttackAbAttrs, PostAttackAbAttr, MaxMultiHitAbAttr, AlwaysHitAbAttr } from "#app/data/ability"; import { ArenaTagSide, ConditionalProtectTag } from "#app/data/arena-tag"; import { MoveAnim } from "#app/data/battle-anims"; -import { BattlerTagLapseType, ProtectedTag, SemiInvulnerableTag } from "#app/data/battler-tags"; +import { BattlerTagLapseType, DamageProtectedTag, ProtectedTag, SemiInvulnerableTag } from "#app/data/battler-tags"; import { MoveTarget, applyMoveAttrs, OverrideMoveEffectAttr, MultiHitAttr, AttackMove, FixedDamageAttr, VariableTargetAttr, MissEffectAttr, MoveFlags, applyFilteredMoveAttrs, MoveAttr, MoveEffectAttr, MoveEffectTrigger, ChargeAttr, MoveCategory, NoEffectAttr, HitsTagAttr } from "#app/data/move"; import { SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { BattlerTagType } from "#app/enums/battler-tag-type"; @@ -152,7 +152,8 @@ export class MoveEffectPhase extends PokemonPhase { /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ const isProtected = (bypassIgnoreProtect.value || !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target)) - && (hasConditionalProtectApplied.value || target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))); + && (hasConditionalProtectApplied.value || (!target.findTags(t => t instanceof DamageProtectedTag).length && target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) + || (this.move.getMove().category !== MoveCategory.STATUS && target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); /** Does this phase represent the invoked move's first strike? */ const firstHit = (user.turnData.hitsLeft === user.turnData.hitCount); diff --git a/src/test/moves/obstruct.test.ts b/src/test/moves/obstruct.test.ts new file mode 100644 index 00000000000..539b11090de --- /dev/null +++ b/src/test/moves/obstruct.test.ts @@ -0,0 +1,71 @@ +import { Moves } from "#app/enums/moves"; +import { Stat } from "#app/enums/stat"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Obstruct", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + const TIMEOUT = 20 * 1000; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .enemyAbility(Abilities.BALL_FETCH) + .ability(Abilities.BALL_FETCH) + .moveset([Moves.OBSTRUCT]); + }); + + it("protects from contact damaging moves and lowers the opponent's defense by 2 stages", async () => { + game.override.enemyMoveset(Array(4).fill(Moves.ICE_PUNCH)); + await game.classicMode.startBattle(); + + game.move.select(Moves.OBSTRUCT); + await game.phaseInterceptor.to("BerryPhase"); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(player.isFullHp()).toBe(true); + expect(enemy.getStatStage(Stat.DEF)).toBe(-2); + }, TIMEOUT); + + it("protects from non-contact damaging moves and doesn't lower the opponent's defense by 2 stages", async () => { + game.override.enemyMoveset(Array(4).fill(Moves.WATER_GUN)); + await game.classicMode.startBattle(); + + game.move.select(Moves.OBSTRUCT); + await game.phaseInterceptor.to("BerryPhase"); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + expect(player.isFullHp()).toBe(true); + expect(enemy.getStatStage(Stat.DEF)).toBe(0); + }, TIMEOUT); + + it("doesn't protect from status moves", async () => { + game.override.enemyMoveset(Array(4).fill(Moves.GROWL)); + await game.classicMode.startBattle(); + + game.move.select(Moves.OBSTRUCT); + await game.phaseInterceptor.to("BerryPhase"); + + const player = game.scene.getPlayerPokemon()!; + + expect(player.getStatStage(Stat.ATK)).toBe(-1); + }, TIMEOUT); +}); From 8195373824118b0e76bf51de260ad77a4c82ddcd Mon Sep 17 00:00:00 2001 From: Lylian BALL <131535108+PyGaVS@users.noreply.github.com> Date: Thu, 12 Sep 2024 03:31:57 +0200 Subject: [PATCH 36/37] [Move] Add Retaliate double damage condition (#1831) * Add retaliate double damage condition * undo override changes * add death history and bug fix where retaliate didn't work after 10 turns * delete the unnecassary log * optimization * made some corrections * add retaliate test as draft * add retaliate test * Update src/test/moves/retaliate.test.ts (delete log) Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * remove submodule * Update src/test/moves/retaliate.test.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * update retaliate test * Update src/test/moves/retaliate.test.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * update unit test * remove wide lens for retaliate test * Update src/test/moves/retaliate.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/battle.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/moves/retaliate.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/moves/retaliate.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * optimization * Fix indentation * Use default values * Add parentheses for clarity * Update src/battle.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * Update src/battle.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * Update src/data/move.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * Update src/phases/faint-phase.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * Update src/phases/faint-phase.ts Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> * bug on import --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: schmidtc1 <62030095+schmidtc1@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/battle.ts | 9 +++++- src/data/move.ts | 10 ++++++- src/phases/faint-phase.ts | 2 ++ src/test/moves/retaliate.test.ts | 49 ++++++++++++++++++++++++++++++++ 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 src/test/moves/retaliate.test.ts diff --git a/src/battle.ts b/src/battle.ts index b80caa9e679..a3e7b0a4336 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -1,5 +1,4 @@ import BattleScene from "./battle-scene"; -import { EnemyPokemon, PlayerPokemon, QueuedMove } from "./field/pokemon"; import { Command } from "./ui/command-ui-handler"; import * as Utils from "./utils"; import Trainer, { TrainerVariant } from "./field/trainer"; @@ -7,6 +6,7 @@ import { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; import { PokeballType } from "./data/pokeball"; import { trainerConfigs } from "#app/data/trainer-config"; +import Pokemon, { EnemyPokemon, PlayerPokemon, QueuedMove } from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; import { Moves } from "#enums/moves"; @@ -38,6 +38,11 @@ export interface TurnCommand { args?: any[]; } +export interface FaintLogEntry { + pokemon: Pokemon, + turn: number +} + interface TurnCommands { [key: number]: TurnCommand | null } @@ -69,6 +74,8 @@ export default class Battle { public playerFaints: number = 0; /** The number of times a Pokemon on the enemy's side has fainted this battle */ public enemyFaints: number = 0; + public playerFaintsHistory: FaintLogEntry[] = []; + public enemyFaintsHistory: FaintLogEntry[] = []; private rngCounter: number = 0; diff --git a/src/data/move.ts b/src/data/move.ts index 135122311ff..9916ccc1c9f 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -8024,7 +8024,15 @@ export function initMoves() { new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5) .attr(CopyTypeAttr), new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) - .partial(), + .attr(MovePowerMultiplierAttr, (user, target, move) => { + const turn = user.scene.currentBattle.turn; + const lastPlayerFaint = user.scene.currentBattle.playerFaintsHistory[user.scene.currentBattle.playerFaintsHistory.length - 1]; + const lastEnemyFaint = user.scene.currentBattle.enemyFaintsHistory[user.scene.currentBattle.enemyFaintsHistory.length - 1]; + return ( + (lastPlayerFaint !== undefined && turn - lastPlayerFaint.turn === 1 && user.isPlayer()) || + (lastEnemyFaint !== undefined && turn - lastEnemyFaint.turn === 1 && !user.isPlayer()) + ) ? 2 : 1; + }), new AttackMove(Moves.FINAL_GAMBIT, Type.FIGHTING, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 5) .attr(UserHpDamageAttr) .attr(SacrificialAttrOnHit), diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index c30003b79aa..169d667113a 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -55,8 +55,10 @@ export class FaintPhase extends PokemonPhase { // Track total times pokemon have been KO'd for supreme overlord/last respects if (pokemon.isPlayer()) { this.scene.currentBattle.playerFaints += 1; + this.scene.currentBattle.playerFaintsHistory.push({ pokemon: pokemon, turn: this.scene.currentBattle.turn }); } else { this.scene.currentBattle.enemyFaints += 1; + this.scene.currentBattle.enemyFaintsHistory.push({ pokemon: pokemon, turn: this.scene.currentBattle.turn }); } this.scene.queueMessage(i18next.t("battle:fainted", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, true); diff --git a/src/test/moves/retaliate.test.ts b/src/test/moves/retaliate.test.ts new file mode 100644 index 00000000000..62965fffba6 --- /dev/null +++ b/src/test/moves/retaliate.test.ts @@ -0,0 +1,49 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import { Species } from "#enums/species"; +import { Moves } from "#enums/moves"; +import { allMoves } from "#app/data/move"; + +describe("Moves - Retaliate", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const retaliate = allMoves[Moves.RETALIATE]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .enemySpecies(Species.SNORLAX) + .enemyMoveset([Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE]) + .enemyLevel(100) + .moveset([Moves.RETALIATE, Moves.SPLASH]) + .startingLevel(80) + .disableCrits(); + }); + + it("increases power if ally died previous turn", async () => { + vi.spyOn(retaliate, "calculateBattlePower"); + await game.startBattle([Species.ABRA, Species.COBALION]); + game.move.select(Moves.RETALIATE); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(retaliate.calculateBattlePower).toHaveLastReturnedWith(70); + game.doSelectPartyPokemon(1); + + await game.toNextTurn(); + game.move.select(Moves.RETALIATE); + await game.phaseInterceptor.to("MoveEffectPhase"); + expect(retaliate.calculateBattlePower).toHaveReturnedWith(140); + }); +}); From 6decd918e53bf93e397a1f1c22acd358ac9a17f1 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Wed, 11 Sep 2024 20:47:41 -0500 Subject: [PATCH 37/37] [Enhancement] Implement Tera-based form changes (Ogerpon and Terapagos) (#4147) * Add Tera-based form changes * Make teraType property private --- src/data/pokemon-forms.ts | 126 ++++++++++++++++++++++++-------------- src/modifier/modifier.ts | 4 +- 2 files changed, 84 insertions(+), 46 deletions(-) diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 0d3e511bcba..20703cebe81 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -1,8 +1,9 @@ -import { PokemonFormChangeItemModifier } from "../modifier/modifier"; +import { PokemonFormChangeItemModifier, TerastallizeModifier } from "../modifier/modifier"; import Pokemon from "../field/pokemon"; import { SpeciesFormKey } from "./pokemon-species"; import { StatusEffect } from "./status-effect"; import { MoveCategory, allMoves } from "./move"; +import { Type } from "./type"; import { Constructor } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; @@ -357,6 +358,41 @@ export class SpeciesDefaultFormMatchTrigger extends SpeciesFormChangeTrigger { } } +/** + * Class used for triggering form changes based on the user's Tera type. + * Used by Ogerpon and Terapagos. + * @extends SpeciesFormChangeTrigger + */ +export class SpeciesFormChangeTeraTrigger extends SpeciesFormChangeTrigger { + /** The Tera type that triggers the form change */ + private teraType: Type; + + constructor(teraType: Type) { + super(); + this.teraType = teraType; + } + + /** + * Checks if the associated Pokémon has the required Tera Shard that matches with the associated Tera type. + * @param {Pokemon} pokemon the Pokémon that is trying to do the form change + * @returns `true` if the Pokémon can change forms, `false` otherwise + */ + canChange(pokemon: Pokemon): boolean { + return !!pokemon.scene.findModifier(m => m instanceof TerastallizeModifier && m.pokemonId === pokemon.id && m.teraType === this.teraType); + } +} + +/** + * Class used for triggering form changes based on the user's lapsed Tera type. + * Used by Ogerpon and Terapagos. + * @extends SpeciesFormChangeTrigger + */ +export class SpeciesFormChangeLapseTeraTrigger extends SpeciesFormChangeTrigger { + canChange(pokemon: Pokemon): boolean { + return !!pokemon.scene.findModifier(m => m instanceof TerastallizeModifier && m.pokemonId === pokemon.id); + } +} + /** * Class used for triggering form changes based on weather. * Used by Castform and Cherrim. @@ -592,6 +628,23 @@ export const pokemonFormChanges: PokemonFormChanges = { [Species.ALTARIA]: [ new SpeciesFormChange(Species.ALTARIA, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.ALTARIANITE)) ], + [Species.CASTFORM]: [ + new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), + new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), + new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), + new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true), + new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true), + new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true) + ], [Species.BANETTE]: [ new SpeciesFormChange(Species.BANETTE, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.BANETTITE)) ], @@ -627,6 +680,11 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.DEOXYS, "normal", "defense", new SpeciesFormChangeItemTrigger(FormChangeItem.HARD_METEORITE)), new SpeciesFormChange(Species.DEOXYS, "normal", "speed", new SpeciesFormChangeItemTrigger(FormChangeItem.SMOOTH_METEORITE)) ], + [Species.CHERRIM]: [ + new SpeciesFormChange(Species.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(Abilities.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), + new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true), + new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true) + ], [Species.LOPUNNY]: [ new SpeciesFormChange(Species.LOPUNNY, "", SpeciesFormKey.MEGA, new SpeciesFormChangeItemTrigger(FormChangeItem.LOPUNNITE)) ], @@ -822,6 +880,14 @@ export const pokemonFormChanges: PokemonFormChanges = { [Species.SANDACONDA]: [ new SpeciesFormChange(Species.SANDACONDA, "", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], + [Species.CRAMORANT]: [ + new SpeciesFormChange(Species.CRAMORANT, "", "gulping", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)), + new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)), + new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeManualTrigger, true), + new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeManualTrigger, true), + new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true), + new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true) + ], [Species.TOXTRICITY]: [ new SpeciesFormChange(Species.TOXTRICITY, "amped", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), new SpeciesFormChange(Species.TOXTRICITY, "lowkey", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), @@ -848,6 +914,10 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.ALCREMIE, "caramel-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)), new SpeciesFormChange(Species.ALCREMIE, "rainbow-swirl", SpeciesFormKey.GIGANTAMAX, new SpeciesFormChangeItemTrigger(FormChangeItem.MAX_MUSHROOMS)) ], + [Species.EISCUE]: [ + new SpeciesFormChange(Species.EISCUE, "", "no-ice", new SpeciesFormChangeManualTrigger(), true), + new SpeciesFormChange(Species.EISCUE, "no-ice", "", new SpeciesFormChangeManualTrigger(), true) + ], [Species.MORPEKO]: [ new SpeciesFormChange(Species.MORPEKO, "full-belly", "hangry", new SpeciesFormChangeManualTrigger(), true), new SpeciesFormChange(Species.MORPEKO, "hangry", "full-belly", new SpeciesFormChangeManualTrigger(), true) @@ -883,58 +953,24 @@ export const pokemonFormChanges: PokemonFormChanges = { new SpeciesFormChange(Species.OGERPON, "teal-mask", "wellspring-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.WELLSPRING_MASK)), new SpeciesFormChange(Species.OGERPON, "teal-mask", "hearthflame-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.HEARTHFLAME_MASK)), new SpeciesFormChange(Species.OGERPON, "teal-mask", "cornerstone-mask", new SpeciesFormChangeItemTrigger(FormChangeItem.CORNERSTONE_MASK)), - new SpeciesFormChange(Species.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeManualTrigger(), true), //When holding a Grass Tera Shard - new SpeciesFormChange(Species.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeManualTrigger(), true), //When no longer holding a Grass Tera Shard - new SpeciesFormChange(Species.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeManualTrigger(), true), //When holding a Water Tera Shard - new SpeciesFormChange(Species.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeManualTrigger(), true), //When no longer holding a Water Tera Shard - new SpeciesFormChange(Species.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeManualTrigger(), true), //When holding a Fire Tera Shard - new SpeciesFormChange(Species.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeManualTrigger(), true), //When no longer holding a Fire Tera Shard - new SpeciesFormChange(Species.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeManualTrigger(), true), //When holding a Rock Tera Shard - new SpeciesFormChange(Species.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeManualTrigger(), true) //When no longer holding a Rock Tera Shard + new SpeciesFormChange(Species.OGERPON, "teal-mask", "teal-mask-tera", new SpeciesFormChangeTeraTrigger(Type.GRASS)), + new SpeciesFormChange(Species.OGERPON, "teal-mask-tera", "teal-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.GRASS)), + new SpeciesFormChange(Species.OGERPON, "wellspring-mask", "wellspring-mask-tera", new SpeciesFormChangeTeraTrigger(Type.WATER)), + new SpeciesFormChange(Species.OGERPON, "wellspring-mask-tera", "wellspring-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.WATER)), + new SpeciesFormChange(Species.OGERPON, "hearthflame-mask", "hearthflame-mask-tera", new SpeciesFormChangeTeraTrigger(Type.FIRE)), + new SpeciesFormChange(Species.OGERPON, "hearthflame-mask-tera", "hearthflame-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.FIRE)), + new SpeciesFormChange(Species.OGERPON, "cornerstone-mask", "cornerstone-mask-tera", new SpeciesFormChangeTeraTrigger(Type.ROCK)), + new SpeciesFormChange(Species.OGERPON, "cornerstone-mask-tera", "cornerstone-mask", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.ROCK)) ], [Species.TERAPAGOS]: [ new SpeciesFormChange(Species.TERAPAGOS, "", "terastal", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeManualTrigger(), true), //When holding a Stellar Tera Shard - new SpeciesFormChange(Species.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeManualTrigger(), true) //When no longer holding a Stellar Tera Shard + new SpeciesFormChange(Species.TERAPAGOS, "terastal", "stellar", new SpeciesFormChangeTeraTrigger(Type.STELLAR)), + new SpeciesFormChange(Species.TERAPAGOS, "stellar", "terastal", new SpeciesFormChangeLapseTeraTrigger(), true, new SpeciesFormChangeCondition(p => p.getTeraType() !== Type.STELLAR)) ], [Species.GALAR_DARMANITAN]: [ new SpeciesFormChange(Species.GALAR_DARMANITAN, "", "zen", new SpeciesFormChangeManualTrigger(), true), new SpeciesFormChange(Species.GALAR_DARMANITAN, "zen", "", new SpeciesFormChangeManualTrigger(), true) ], - [Species.EISCUE]: [ - new SpeciesFormChange(Species.EISCUE, "", "no-ice", new SpeciesFormChangeManualTrigger(), true), - new SpeciesFormChange(Species.EISCUE, "no-ice", "", new SpeciesFormChangeManualTrigger(), true), - ], - [Species.CRAMORANT]: [ - new SpeciesFormChange(Species.CRAMORANT, "", "gulping", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() >= .5)), - new SpeciesFormChange(Species.CRAMORANT, "", "gorging", new SpeciesFormChangeManualTrigger, true, new SpeciesFormChangeCondition(p => p.getHpRatio() < .5)), - new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeManualTrigger, true), - new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeManualTrigger, true), - new SpeciesFormChange(Species.CRAMORANT, "gulping", "", new SpeciesFormChangeActiveTrigger(false), true), - new SpeciesFormChange(Species.CRAMORANT, "gorging", "", new SpeciesFormChangeActiveTrigger(false), true), - ], - [Species.CASTFORM]: [ - new SpeciesFormChange(Species.CASTFORM, "", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "sunny", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.SUNNY, WeatherType.HARSH_SUN]), true), - new SpeciesFormChange(Species.CASTFORM, "", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "rainy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.RAIN, WeatherType.HEAVY_RAIN]), true), - new SpeciesFormChange(Species.CASTFORM, "", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "snowy", new SpeciesFormChangeWeatherTrigger(Abilities.FORECAST, [WeatherType.HAIL, WeatherType.SNOW]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FORECAST, [WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG]), true), - new SpeciesFormChange(Species.CASTFORM, "sunny", "", new SpeciesFormChangeActiveTrigger(), true), - new SpeciesFormChange(Species.CASTFORM, "rainy", "", new SpeciesFormChangeActiveTrigger(), true), - new SpeciesFormChange(Species.CASTFORM, "snowy", "", new SpeciesFormChangeActiveTrigger(), true), - ], - [Species.CHERRIM]: [ - new SpeciesFormChange(Species.CHERRIM, "overcast", "sunshine", new SpeciesFormChangeWeatherTrigger(Abilities.FLOWER_GIFT, [ WeatherType.SUNNY, WeatherType.HARSH_SUN ]), true), - new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeRevertWeatherFormTrigger(Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]), true), - new SpeciesFormChange(Species.CHERRIM, "sunshine", "overcast", new SpeciesFormChangeActiveTrigger(), true), - ], }; export function initPokemonForms() { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 9273eb42b90..14a5bac361f 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -15,7 +15,7 @@ import { BerryType } from "#enums/berry-type"; import { StatusEffect, getStatusEffectHealText } from "../data/status-effect"; import { achvs } from "../system/achv"; import { VoucherType } from "../system/voucher"; -import { FormChangeItem, SpeciesFormChangeItemTrigger } from "../data/pokemon-forms"; +import { FormChangeItem, SpeciesFormChangeItemTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeTeraTrigger } from "../data/pokemon-forms"; import { Nature } from "#app/data/nature"; import Overrides from "#app/overrides"; import { ModifierType, modifierTypes } from "./modifier-type"; @@ -763,6 +763,7 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { apply(args: any[]): boolean { const pokemon = args[0] as Pokemon; if (pokemon.isPlayer()) { + pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeTeraTrigger); pokemon.scene.validateAchv(achvs.TERASTALLIZE); if (this.teraType === Type.STELLAR) { pokemon.scene.validateAchv(achvs.STELLAR_TERASTALLIZE); @@ -776,6 +777,7 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { const ret = super.lapse(args); if (!ret) { const pokemon = args[0] as Pokemon; + pokemon.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeLapseTeraTrigger); pokemon.updateSpritePipelineData(); } return ret;