From 35f522fd9944e896d47500e884a8796a6930ee93 Mon Sep 17 00:00:00 2001 From: EmberCM Date: Wed, 28 Aug 2024 19:17:18 -0500 Subject: [PATCH 01/10] Fix text disappearing while in transferMode (#3740) Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/ui/party-ui-handler.ts | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 66c777944d1..e7c4069c16e 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -5,7 +5,7 @@ import { Command } from "./command-ui-handler"; import MessageUiHandler from "./message-ui-handler"; import { Mode } from "./ui"; import * as Utils from "../utils"; -import { PokemonBaseStatModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier"; +import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier"; import { allMoves, ForceSwitchOutAttr } from "../data/move"; import { getGenderColor, getGenderSymbol } from "../data/gender"; import { StatusEffect } from "../data/status-effect"; @@ -989,14 +989,8 @@ export default class PartyUiHandler extends MessageUiHandler { optionText.setOrigin(0, 0); /** For every item that has stack bigger than 1, display the current quantity selection */ - if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && this.transferQuantitiesMax[option] > 1) { - const itemModifier = itemModifiers[option]; - - /** Not sure why getMaxHeldItemCount had an error, but it only checks the Pokemon parameter if the modifier is PokemonBaseStatModifier */ - if (itemModifier === undefined || itemModifier instanceof PokemonBaseStatModifier) { - continue; - } - + const itemModifier = itemModifiers[option]; + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && this.transferQuantitiesMax[option] > 1 && !this.transferMode && itemModifier !== undefined && itemModifier.type.name === optionName) { let amountText = ` (${this.transferQuantities[option]})`; /** If the amount held is the maximum, display the count in red */ From 781e25848d2fc5822d43c26a77c2b3d7b1509d39 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Wed, 28 Aug 2024 22:44:26 -0700 Subject: [PATCH 02/10] fixed infinite loop (#3887) Co-authored-by: frutescens --- src/system/game-data.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/system/game-data.ts b/src/system/game-data.ts index e7bc85d9037..d10d6288696 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -635,13 +635,13 @@ export class GameData { async saveRunHistory(scene: BattleScene, runEntry : SessionSaveData, isVictory: boolean): Promise { const runHistoryData = await this.getRunHistoryData(scene); // runHistoryData should always return run history or {} empty object - const timestamps = Object.keys(runHistoryData); - const timestampsNo = timestamps.map(Number); + let timestamps = Object.keys(runHistoryData).map(Number); // Arbitrary limit of 25 entries per user --> Can increase or decrease while (timestamps.length >= RUN_HISTORY_LIMIT ) { - const oldestTimestamp = Math.min.apply(Math, timestampsNo); + const oldestTimestamp = (Math.min.apply(Math, timestamps)).toString(); delete runHistoryData[oldestTimestamp]; + timestamps = Object.keys(runHistoryData).map(Number); } const timestamp = (runEntry.timestamp).toString(); From 8f2699e6ead79e3bfd1e09c96f37d27125776442 Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Thu, 29 Aug 2024 02:38:21 -0400 Subject: [PATCH 03/10] [Enhancement] Update Team Skull Sprites (#3886) * Update Team Skull Sprites * Add files via upload * Update skull_grunt_f.json * Update skull_grunt_m.json * Fix eol --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- public/images/trainer/guzma.png | Bin 848 -> 2312 bytes public/images/trainer/skull_grunt_f.json | 22 +++++++++++----------- public/images/trainer/skull_grunt_f.png | Bin 792 -> 905 bytes public/images/trainer/skull_grunt_m.json | 22 +++++++++++----------- public/images/trainer/skull_grunt_m.png | Bin 723 -> 966 bytes 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/public/images/trainer/guzma.png b/public/images/trainer/guzma.png index 97dadfbe6fddff6280b036d2b6c923ac7b74a405..6afd6f3b34a7f8766cf1e3a95743482dcb068763 100644 GIT binary patch delta 2277 zcmVP+CJ`QA#j0LZFcHY9o&{0Sr({L(5AGk`{y* zQ_7=8c?3|RXlyZv8Yr(8721Rtr3Mv=*ZgL8j%V-Qz4vzE?tgmz=-$1LbLKlUXU@#* zt&i@q)m2v+H6I?Jy845@yX?x-$D2ukGp^7s*B_~>!u^Km!)2j}oPVoZkmF2|md zICLHn6at$C6fpGp)rq47NGA080I0spbsadKkV*??Ap~e&%{I!JUZ6B1U}jJq+T53} z?RdgkYE;);5Py~oLoD_`aqR&0$@o9OMl@YGnaTMxqgH}>65x|5>%jZ47;43Ts zZ=-RrzC4b`JT*`P)ZgVu<#)i2HMn<#( zHBW#U7#h8PwHaPKE?RZkM`>AMR|VSAa+O)Pl%Al(^maP-UO5dMvVvxpj#jgdYhvEI zDFYNOUgm4Ny};ZARA6*S2tM}pB5G~$hrz<7&y1#riV_pw6A#mYPMm^z4u|Tht7!S^GCEvaOG$$VQ*LGkHC<^58wRkL zh{>5P^!JSy`TE*D`}q@*RXnxo1j;f(vrT8N(|@%2(`eYRVN^7|h(I$u~WrzFllba>wuoz-|9553UG__vMDno;9Upw>CK-< zzr91{)#Y^h^l93;VJD3n(uu~;Dy52&+3G$G)V)+5-01|WhAhs@HUKJ+k!0CXcbt}1 zR)6u@ydW9@-$LDw%|%m52lmMP&yBUppd0Ejkn z=s=qJ))q@p(JDUUVZxT6qD`0^G@ye*&s7=I`r zFI_m#LSs!yJ9F-Qh^7$fluVthoRb++zh89{Jcx%Ghk)vu)FCnZiHS)h!izUWsFy(b zY_dA2XiJ=!88jYdtUz^5!dziq(jYh*V8y|}d;y9I!}jV|_&Ndwz}ab2hmNHgGiW4D z>Y&&Xke-QVd-w439tl`I!G5xTDu2QBWh;?=)Jm(eW@F)veRi4@;h@Ffc3?nba8dw5 zw1lKvl5A8FrWVWz0mXxnV1xbgFj(_mdSeE?{6{PGO-SScA-uk}EWD!u&3^H91E*b* ze?Ip@AZS1(0cqX3%B@O?um&m5zEn!8AR&jGM(-G^5WbIL%=QX;zu)u)lJhVUHbTYG(c!q<`YOiHj zOagLMlv+?#u+yqcOmTJ~2$?^BXqdoWrgRGQ=G7hw62NQsm)XrMgDxqY#oF8U&L-;P z&tNIw-UXNUT|WqG7ED>$n^rH+}@=Va>B>=t4pW`N=`A1L>1suGAy=kopns!+P9VTTeZck|KtJxG!d)QXevdO8L^f zrmSG|GM^8D#67y{V_ULoUc!cCFAxGD8ejnk&FED<^SUyduzwj;tU=be6R4Iv*iJ|^ z7cD`t_aR_FScp(CQUWb&RySXHRwhYzWKN)7nlNWCQnizr($goqDuM2tbXZ9eBqNc2 z-GF+fRZCDereW5mJR?yOzIUNcbery|gx#rMFAHXzrrBxDES%JfaQ@amfvd=2wHD^d zaZRcdcCcP)6Mtidt(c%&=#aJ~jwW&a%RjV1dayF8JnM~D9 zR1*=lc;P(HU*b>#BF@!?mvV`mlebEs6*N5*4Bq1eYalX0?uwuKQ6EB+l8nnfoR)dS z>k);s0!J_9Wox)I0851d-`%`*(mA1*D=B-dZp@`peF-d=b(WsQe6}!^*F1ZlW1jg#1)!HDPPlS9t#KByK8plPUuy!rW8B delta 802 zcmV+-1Ks?H63_;a8Gi!+007oyx*7lg08~&+R7C&)0000002>Yk2?_=P1O@;F3JDPr z2M-qv5*iH_A|xg#8W}Js8Zj|3IW#j-OifZpMSN`sg>7YuV}go-bCiU9u#kYgqLs+M zyXeQX=*$iO|Nr1&1T_Ev00DGTPE!Ct=GbNc000SaNLh0L0DlV;000XU0RWnu7ytkQ zdr3q=R7l62*Nbl4AP@!6+`iJ%h6%U?WB>nu_Ravd6=}UtR9V*6$Co$G%gd$6Sb9<3zcKZ3}znX`+WHMKrO3!!_Q4Tnep)0vI1zlcmsvl-3n9lj0qve5g); z1aowME9D({|0u%nsfClZsc-w=V)dS;wV;Sh^^$ZNA>w`wcQK#ls1iqpa%dg*42))~ zjf(a5JJ);~vYZb_2}Ppgtw`F_5KXM10f{kJs#_HXLVv}mi!8ZQ=03G5&AOE^qsf8X zD$OFqD`oDE`*yYh(k*gSyEKfu0X>T2stH^)B7PwElsdEyTcgc#2|mol7ua;r{(zU7 z>V2a+!SHB!Idf~r=siK$PJ1l=hYMy|a@$Veu^zD=%W}W|gmP*BtFdd3r8Il9G4hct zU0Q4)Wq)PqmRqSyd_k9_+!BMr8hX1K%hLMSLV4V6&}$(S=k6z>Fc%8-pJoQpQ>)Zb zbGLI?hoIJ$ZRD{NByx=4ojjvbhrrjuNx}WNu-dN8&Sx}t%A!BS-~KsuXuDvSXq7k? z#Y4&Nc`2YR>!3Jt!00001bW%={a2|iXNklQc^|G-CD9q4Fpt9rv{)dTCb6HD78?lu}q%Kh$~WDAh_tDZpBN2xclQ ziKrH8rGNrALXm$kYo}0VDy&OetM{dp)TzZTg<5mVGJi@fOE6L)P|l4pZ@fuX3K((A z?C_SZk5LOT98~C%-2&y9yA+loN@Hm%a?4ieptW00s7lqH<1!RXVmYo!zt*v*GLKN& zC0j#9#gT5Ev9_2Ap`utRnnO+J>Ke;-#i@veQQ9T;lF5H_NpZ+JL%QgW?2;quSUieF z`GgY%p=5E%ra+cl@qUl9P}oE1N9xu=YQEne^J8|NF1H(rq!bBtI8>ZZ55%Gy;r$k> z9PiY8x?WEc7@^!*XxWAUq~g1MOa_WvLny)tU+!UX*;7?kl1`W$0Bx#s&7U3&gi22e6NrD8`vOHOH8(cCs)v@-isP-Cw#LUV zr1~bcoy)^3^e0v^Ut=ch$j>#7W129R$#jyYX|2~y5n*aa+0d!JMQvg8b*k%9#010qNS#to9jt_rZNkljPq8Wr@tuc1A35TL7 z#&nuNYM)jVxmvAG#%8u-jSQ(Nc@+?)G+U{3`jn&u5Hyi=`V{ozp&W-AUL^5xC_+C4 zf00i~C;!mVS~-8aUrBUwKXqC#DkyK?QqxJLV6EXO;#WQoKmy`a(i^*1l>j7p8Fa*> z6l1^#MZ81$RSa>DDS-(AZ$nA0t*0{+LZDKK-!?3#VuqRso z*+bZ{Z5<4dm#(v((?OS8|5u(XDd2#XP;-z=aWH~YenI~)M49q%X0+lEM6xOMQCjmn z*JE1p70dd3kr*8!?R^I_l(jz&h1$WY>^)!evWC#tr~9QG2>&aV^`7J>O2MfZyKOo~ z>kecvq{x3B*d9h-A;e5->_mJZtmdw!tf2-%FvVRTqKe9RDKmu(13x5wrS_Wj7e0v} zktzg2%0wBDx(+X5E$`T^SXo!d-ux9j>pGj#+QdDehmKv(nr|l*ApKJOjE#tv$zb&8 z(8b|0t5|ya6UBm|nE{Q2d(0@umGW0)Pw&3t-w1!!=HI=1&nfv8y6>Dkq1;KICho9b zit7~loYC`&Op6KG` z_0z=oP*C{LxcK<^|NZ{i_kukD0004WQchCbWA(^|6eT@kYqb;(+Dgl(`ja^*IisZrs)qW+nNTKB05$XMCH=ARq~J? zW-ts_XaK|p$~;KQ-8daQWetFAIY~Kj5Y@XbO;|3zq9k(C{a#mA7}Q9>5vr$C772r- z6DbG6PH(5Sgh_wWPYV=LzbmP>C`f8u?xiTCE9b2WMM0$&WZmMe-iU(E$a`Z={YeWl zoHeB+^sNC^5C>5Njt_v8C}9Ob1y!x3m{_$CrMNfmHgL3o!@*Wi+Bmh~50Pm^Qc^@! zMYXmn1CqdLn3c7)0g{1QF5C?iCK2VNu#Oo?0JRuMxNCpX3q~&UfF!BJT0B;Y>32!; z<19*}p4Z8(!J_&ClBF*4LqSayr4^MdeQjA*9a5Ke07TtS9GMO@I5DInj^E znk=!UZK4m5n4u0J4dOSS@BfQ}8lA6Kl?9HrzH4HHzAX^<9p`qFc@5^G)~@(r-)qUX zs0t{v$^C!3n)!D7oIhtziV9Libas&Tzt^by{B{_K=0WCn1?fLSI8@E`Y@cdXu4B!@ zM*j-$Qsr{FyrT#$24^@cI85-N`H0%MTxPH2ikv}^PHn{H2uV&QShGqx(y1a(u|x@(PwZ`+;#1pWV<>+PZ%2Eo$;*b~`v_TEv9l5vN&}p= zW9_d!xYMrTNgF4}&NVy7NdV;@@J25fgX%fpzkz6gLwhk{6W}O_7}b<^Pzr;{>oWO% za@^aVGygJ?r%kt|AZY9OwK$J^bI|h~NHLIi*wcQq2JLW{U|-cmUxOd%64L7xe*uL~ z?RtO6N{=J)z(7L0A2(Ts)5;MLF0wiAAXHI^Gck@=yCf^f7zm{Ox=*$%#U>l}Aib-* zIXwiHo@29?%-Q-eL0)XuGOk#7K-d&1lp?s z=awEKz4XI+a_<9=NSiae+lI`2z2A<#*gO-A`g0o%dz+3-kzX{XFG@?cqpFjw0w&vy Br?~(C delta 666 zcmV;L0%iTi2h#;(iBL{Q4GJ0x0000DNk~Le0000(0000(2m=5B0Pqw@K>z>%Hc(7d zMF0Q*0000B2n7uc4GxmS6%`dNEGaoSHcm}RY-wbBN?NrvBfWcL$c}B!&d%PYd;ih3 z|Ns9Ndk|)kZzO*L97#k$R9M5U*wJ?EAP5D}P*M#vqw@bhdjXwxUUR&zKJ+Df9SLfj zU^L743r;zCr^Y{wAkV~liALwa}P?&CZ~F+=+u z1X&D)o#u#21@a<|E+;5ZOtwK9HTQfn-wIP!G|Jc{U}Ji(s&_3c*gK; z#Met8ucv>A#<`Gd#;%xz0u@m|r;5}xco~li;$2z-v6==M(5od{U1B>7!w+!-TD5pV z;`6}~3gbf79oLri@TaLlo4XrrZp(J5K{0$MTZAX*!w}+_Yc7e`z;?rfbA+R#gXcEa z>d!l) Date: Thu, 29 Aug 2024 03:57:22 -0500 Subject: [PATCH 04/10] [Sprite] Update Rose Sprite (#3890) --- public/images/trainer/rose.png | Bin 864 -> 1088 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/trainer/rose.png b/public/images/trainer/rose.png index a79a754e21b995ef415a2a1e2aa4d3e84a3f9ff4..f90da7568d4d58279b1186035a2f1ad429bdc440 100644 GIT binary patch delta 1067 zcmV+`1l0TB2EYiAB!2;OQb$4nuFf3k00004XF*Lt006O%3;baP0000sP)t-sCnhF8 zJUm!aQ@w~@pl3wdsC|G+F{YxbTv=W*F*=HdiBeKh|Ns9G5D=LyDc`kDy-G>|008sg z+hqU%01|XkPE-H?|NsC0|NsC0|NsC0|Ns90;=jKV00009aDPZya{vGf6951U69E94 zoEQKA19eG6K~z{rt=Ns4svr=6VFee6mE7+CX7`%`%gml2nSHj^j=s(C>uI?4jd$LV zqny>p@g2i3j-xT7X%>&J9|j|V$WJ49a5);;<^0I7yjvNsmk(LHM;mzT*=d~Y&yVfn zIcx3oBQbgJLw|X{E)KoRh2$<5@nSsbQLeKS=}pt`uZ^ek8_eM5glE%iZJbW#2X~Y9 z!=wFdw9`qCH(bWVo9vXzztqJ`y@azgo?`TK8+Ygd8uM#rJk!V>d!w=QJWqyU-ODqE z7p?;0DA%wGzIY@Uz2tYLUOA=yue}gy zH)%RNX}{nXf65a~yW_8TG@yF5%iw`Wx%2hzrQCjJy+xYutVi?35EJ#1pNzqEyx>)W z&z|H#gMS4t^`bEtfm#yWc!Bh?2Sw-eQBGLk(xuJxR3j=bwnqMisa(|ho-lUH|R`;HVmxI>KUhT3k{gLPo zm#^RF$7Ip-#`WdCEk-KT+ZDkp2i3b$_SPUNT8#TkcBOafxxELZVWeY;q=T{ zL4Vh>Val5)JQ*jeCdcQzJk=;SYy8qLtUBd_PqFuCF?F`yX8wGPw_aHW_^q}ijy*bf zow%L6z}P8X?b4#L_i~BSpLegiFC^Z3dEt_mbDk>wysSu#W$o+WF*i8ACwR(}iluuy zd9q=Uo)9c6T|8L|`gsiK;^~RRIZs20HGjdD3G!O+lLxq-)x{@Iw%`ulde+G+Ev5!xF9X$!a70?mLLqj>Oh-Yu)zr7>m!;@_9rxo$!jb<^|aol{1 zgUv^L=Z)hZA>YP6?oXrPGa9}odU#1V&F;y&>buq8*3;nWV)Hb>qo9D_c=9dNmL$qS l!I38T#ygI~Pk9%&+dpO1V;ywRJ!${|002ovPDHLkV1gx@BT)bV delta 821 zcmV-51Iqls2;c^gBt|e$OjJbx0000406920N>EZ_5D;@fL3??FoONQHous6Rd%ZkC z#TY5gu9VHXQr_O?_WJgvTdP_C0004WQchCmUpU zU~Di;o51_O?XexQ%~Wa!e54{xJ6B(SLs)`yFB@#l88z(9Mg;KMR5S?3lvXPuSa1Nn zS_=?8Y#4vRd=Cnj56ziRT~>f)L}6eCmyY%Eeng z8I2?0$6yFS4w3QjdcLR+%MtL?qgHr6pFyU+mdhWSZ_|4!0in^le#A8adA4@1=i9vw zLMtnOtwe8k6^X~|9SO+g#%uqb-3HKBY9u@J8<3N=mVlRcK8)&mcX^&K!vGwPPY&<$ z@rj4qLW#J)H_xNLdIv~y>MC!y+O!b=$>{ZRS6uxIPj}__hX#PIsh2koWodz*9+&X} z=#CdF_Vif4>iPc2cL_)W(&saTH^_ZB;^`fKi;E^CH|k;jwO0M8he^QPV!Oi^pj>@8FHgrroZ^^*6@y0lc^n-y#nd{NlnM6bzGBCbw%Rqf7To=09C& z{{s?+BZi(Hq}>1j01jnXNoGw=04e|g00;m8000000Mb*F00000NkvXXu0mjfl+}ZK From 59ff4e9941cf4e1f262d279bddd87c52b58631b0 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:22:01 +1000 Subject: [PATCH 05/10] Admin panel beta (#3846) * feat: Add hasAdminRole property to UserInfo interface and update initLoggedInUser and updateUserInfo functions This commit adds the hasAdminRole property to the UserInfo interface in the account.ts file. The initLoggedInUser function is updated to set the hasAdminRole property to false by default. The updateUserInfo function is also updated to set the hasAdminRole property to false when bypassLogin is true. This change allows for better management of user roles and permissions. Co-authored-by: frutescens Co-authored-by: Frederico Santos * Updated UI for admin panel and menu * Remove random blank line from merge * Fix imports in `src/ui/ui.ts` --------- Co-authored-by: Frederico Santos Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/account.ts | 5 +- src/ui/admin-ui-handler.ts | 85 +++++++++++++++++++++++++++++++++ src/ui/form-modal-ui-handler.ts | 4 +- src/ui/menu-ui-handler.ts | 32 ++++++++++--- src/ui/ui.ts | 8 +++- 5 files changed, 121 insertions(+), 13 deletions(-) create mode 100644 src/ui/admin-ui-handler.ts diff --git a/src/account.ts b/src/account.ts index 6682e3e0b7c..c6d2f85489a 100644 --- a/src/account.ts +++ b/src/account.ts @@ -6,6 +6,7 @@ export interface UserInfo { lastSessionSlot: integer; discordId: string; googleId: string; + hasAdminRole: boolean; } export let loggedInUser: UserInfo | null = null; @@ -13,13 +14,13 @@ export let loggedInUser: UserInfo | null = null; export const clientSessionId = Utils.randomString(32); export function initLoggedInUser(): void { - loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: ""}; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false }; } export function updateUserInfo(): Promise<[boolean, integer]> { return new Promise<[boolean, integer]>(resolve => { if (bypassLogin) { - loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "" }; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "", hasAdminRole: false}; let lastSessionSlot = -1; for (let s = 0; s < 5; s++) { if (localStorage.getItem(`sessionData${s ? s : ""}_${loggedInUser.username}`)) { diff --git a/src/ui/admin-ui-handler.ts b/src/ui/admin-ui-handler.ts new file mode 100644 index 00000000000..371604c00a2 --- /dev/null +++ b/src/ui/admin-ui-handler.ts @@ -0,0 +1,85 @@ +import BattleScene from "#app/battle-scene.js"; +import { ModalConfig } from "./modal-ui-handler"; +import { Mode } from "./ui"; +import * as Utils from "../utils"; +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { Button } from "#app/enums/buttons.js"; + +export default class AdminUiHandler extends FormModalUiHandler { + + constructor(scene: BattleScene, mode: Mode | null = null) { + super(scene, mode); + } + + setup(): void { + super.setup(); + } + + getModalTitle(config?: ModalConfig): string { + return "Admin panel"; + } + + getFields(config?: ModalConfig): string[] { + return ["Username", "Discord ID"]; + } + + getWidth(config?: ModalConfig): number { + return 160; + } + + getMargin(config?: ModalConfig): [number, number, number, number] { + return [0, 0, 48, 0]; + } + + getButtonLabels(config?: ModalConfig): string[] { + return ["Link account", "Cancel"]; + } + + processInput(button: Button): boolean { + if (button === Button.SUBMIT && this.submitAction) { + this.submitAction(); + return true; + } + + return false; + } + + show(args: any[]): boolean { + if (super.show(args)) { + const config = args[0] as ModalConfig; + const originalSubmitAction = this.submitAction; + this.submitAction = (_) => { + this.submitAction = originalSubmitAction; + this.scene.ui.setMode(Mode.LOADING, { buttonActions: [] }); + const onFail = error => { + this.scene.ui.setMode(Mode.ADMIN, Object.assign(config, { errorMessage: error?.trim() })); + this.scene.ui.playError(); + }; + if (!this.inputs[0].text) { + return onFail("Username is required"); + } + if (!this.inputs[1].text) { + return onFail("Discord Id is required"); + } + Utils.apiPost("admin/account/discord-link", `username=${encodeURIComponent(this.inputs[0].text)}&discordId=${encodeURIComponent(this.inputs[1].text)}`, "application/x-www-form-urlencoded", true) + .then(response => { + if (!response.ok) { + return response.text(); + } + return response.json(); + }) + .then(response => { + this.scene.ui.setMode(Mode.ADMIN, config); + }); + return false; + }; + return true; + } + return false; + + } + + clear(): void { + super.clear(); + } +} diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 4516e39675c..8c4ea5f6768 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -6,7 +6,7 @@ import { WindowVariant, addWindow } from "./ui-theme"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import * as Utils from "../utils"; import i18next from "i18next"; -import {Button} from "#enums/buttons"; +import { Button } from "#enums/buttons"; export interface FormModalConfig extends ModalConfig { errorMessage?: string; @@ -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 : 16 }); + const input = addTextInputObject(this.scene, 4, -2, 440, 116, TextStyle.TOOLTIP_CONTENT, { type: isPassword ? "password" : "text", maxLength: isPassword ? 64 : 18 }); input.setOrigin(0, 0); inputContainer.add(inputBg); diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 6fdf98d14a3..0bbfe21e4f9 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -306,16 +306,34 @@ export default class MenuUiHandler extends MessageUiHandler { return true; }, keepOpen: true - }, - { - label: i18next.t("menuUiHandler:cancel"), + }]; + if (!bypassLogin && loggedInUser?.hasAdminRole) { + communityOptions.push({ + label: "Admin", handler: () => { - this.scene.ui.revertMode(); + ui.playSelect(); + ui.setOverlayMode(Mode.ADMIN, { + buttonActions: [ + () => { + ui.revertMode(); + }, + () => { + ui.revertMode(); + } + ] + }); return true; - } + }, + keepOpen: true + }); + } + communityOptions.push({ + label: i18next.t("menuUiHandler:cancel"), + handler: () => { + this.scene.ui.revertMode(); + return true; } - ]; - + }); this.communityConfig = { xOffset: 98, options: communityOptions diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 250a21544dc..5e1c28eda2d 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -23,7 +23,7 @@ import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import EggHatchSceneHandler from "./egg-hatch-scene-handler"; import EggListUiHandler from "./egg-list-ui-handler"; import EggGachaUiHandler from "./egg-gacha-ui-handler"; -import {addWindow} from "./ui-theme"; +import { addWindow } from "./ui-theme"; import LoginFormUiHandler from "./login-form-ui-handler"; import RegistrationFormUiHandler from "./registration-form-ui-handler"; import LoadingModalUiHandler from "./loading-modal-ui-handler"; @@ -46,6 +46,7 @@ import SettingsAudioUiHandler from "./settings/settings-audio-ui-handler"; import { PlayerGender } from "#enums/player-gender"; import BgmBar from "#app/ui/bgm-bar"; import RenameFormUiHandler from "./rename-form-ui-handler"; +import AdminUiHandler from "./admin-ui-handler"; import RunHistoryUiHandler from "./run-history-ui-handler"; import RunInfoUiHandler from "./run-info-ui-handler"; @@ -86,6 +87,7 @@ export enum Mode { OUTDATED, CHALLENGE_SELECT, RENAME_POKEMON, + ADMIN, RUN_HISTORY, RUN_INFO, } @@ -124,7 +126,8 @@ const noTransitionModes = [ Mode.SESSION_RELOAD, Mode.UNAVAILABLE, Mode.OUTDATED, - Mode.RENAME_POKEMON + Mode.RENAME_POKEMON, + Mode.ADMIN, ]; export default class UI extends Phaser.GameObjects.Container { @@ -188,6 +191,7 @@ export default class UI extends Phaser.GameObjects.Container { new RenameFormUiHandler(scene), new RunHistoryUiHandler(scene), new RunInfoUiHandler(scene), + new AdminUiHandler(scene), ]; } From 27d52af07740243f9bb131956db9543ec2f0a6b3 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Fri, 30 Aug 2024 00:59:06 +1000 Subject: [PATCH 06/10] Changed Mode.ADMIN enum to be in line with the handler (#3892) --- src/ui/ui.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 5e1c28eda2d..e62cd37aae3 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -87,9 +87,9 @@ export enum Mode { OUTDATED, CHALLENGE_SELECT, RENAME_POKEMON, - ADMIN, RUN_HISTORY, RUN_INFO, + ADMIN, } const transitionModes = [ From 44294f1aec5f6d68f83d275a21028502666bb30f Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:13:35 -0700 Subject: [PATCH 07/10] [Localization] Use gender context for achievments/achv (#3871) * i18n: prepare female DE achievments and copy keys in base language: en * adapt gender context for achv * add a TODO about an odd `this` usage * remove debugging leftover code whops * add `playerGender` to settings helper * fix test runs And revert some changes --- src/locales/ca_ES/achv-male.json | 1 - .../ca_ES/{achv-female.json => achv.json} | 0 src/locales/ca_ES/config.ts | 6 +- src/locales/de/achv-male.json | 264 ----------------- .../de/{achv-female.json => achv.json} | 63 ++-- src/locales/de/config.ts | 6 +- src/locales/en/{achv-male.json => achv.json} | 53 ++-- src/locales/en/config.ts | 6 +- src/locales/es/achv-male.json | 163 ----------- .../es/{achv-female.json => achv.json} | 33 ++- src/locales/es/config.ts | 6 +- src/locales/fr/achv-female.json | 264 ----------------- src/locales/fr/{achv-male.json => achv.json} | 38 ++- src/locales/fr/config.ts | 6 +- src/locales/it/achv-male.json | 264 ----------------- .../it/{achv-female.json => achv.json} | 0 src/locales/it/config.ts | 6 +- src/locales/ja/achv-male.json | 264 ----------------- .../ja/{achv-female.json => achv.json} | 0 src/locales/ja/config.ts | 6 +- src/locales/ko/achv-male.json | 264 ----------------- .../ko/{achv-female.json => achv.json} | 0 src/locales/ko/config.ts | 6 +- src/locales/pt_BR/achv-female.json | 264 ----------------- .../pt_BR/{achv-male.json => achv.json} | 12 +- src/locales/pt_BR/config.ts | 6 +- src/locales/zh_CN/achv-male.json | 272 ------------------ .../zh_CN/{achv-female.json => achv.json} | 0 src/locales/zh_CN/config.ts | 6 +- src/locales/zh_TW/achv-male.json | 256 ----------------- .../zh_TW/{achv-female.json => achv.json} | 0 src/locales/zh_TW/config.ts | 6 +- src/system/achv.ts | 123 ++++---- src/test/battle/battle.test.ts | 1 + src/test/utils/gameManager.ts | 2 +- src/test/utils/helpers/settingsHelper.ts | 15 + src/ui/achvs-ui-handler.ts | 21 +- 37 files changed, 232 insertions(+), 2471 deletions(-) delete mode 100644 src/locales/ca_ES/achv-male.json rename src/locales/ca_ES/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/de/achv-male.json rename src/locales/de/{achv-female.json => achv.json} (91%) rename src/locales/en/{achv-male.json => achv.json} (85%) delete mode 100644 src/locales/es/achv-male.json rename src/locales/es/{achv-female.json => achv.json} (83%) delete mode 100644 src/locales/fr/achv-female.json rename src/locales/fr/{achv-male.json => achv.json} (87%) delete mode 100644 src/locales/it/achv-male.json rename src/locales/it/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/ja/achv-male.json rename src/locales/ja/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/ko/achv-male.json rename src/locales/ko/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/pt_BR/achv-female.json rename src/locales/pt_BR/{achv-male.json => achv.json} (95%) delete mode 100644 src/locales/zh_CN/achv-male.json rename src/locales/zh_CN/{achv-female.json => achv.json} (100%) delete mode 100644 src/locales/zh_TW/achv-male.json rename src/locales/zh_TW/{achv-female.json => achv.json} (100%) diff --git a/src/locales/ca_ES/achv-male.json b/src/locales/ca_ES/achv-male.json deleted file mode 100644 index 9e26dfeeb6e..00000000000 --- a/src/locales/ca_ES/achv-male.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/src/locales/ca_ES/achv-female.json b/src/locales/ca_ES/achv.json similarity index 100% rename from src/locales/ca_ES/achv-female.json rename to src/locales/ca_ES/achv.json diff --git a/src/locales/ca_ES/config.ts b/src/locales/ca_ES/config.ts index 4229b20a583..514c7fb63c7 100644 --- a/src/locales/ca_ES/config.ts +++ b/src/locales/ca_ES/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const caEsConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/de/achv-male.json b/src/locales/de/achv-male.json deleted file mode 100644 index dcbaf2ebffc..00000000000 --- a/src/locales/de/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "Errungenschaften" - }, - "Locked": { - "name": "Gesperrt" - }, - "MoneyAchv": { - "description": "Häufe eine Gesamtsumme von {{moneyAmount}} ₽ an." - }, - "10K_MONEY": { - "name": "Besserverdiener" - }, - "100K_MONEY": { - "name": "Reich" - }, - "1M_MONEY": { - "name": "Millionär" - }, - "10M_MONEY": { - "name": "Einprozenter" - }, - "DamageAchv": { - "description": "Füge mit einem Treffer {{damageAmount}} Schaden zu." - }, - "250_DMG": { - "name": "Harte Treffer" - }, - "1000_DMG": { - "name": "Härtere Treffer" - }, - "2500_DMG": { - "name": "Das ist ne Menge Schaden!" - }, - "10000_DMG": { - "name": "One Punch Man" - }, - "HealAchv": { - "description": "Heile {{healAmount}} {{HP}} auf einmal. Mit einer Attacke, Fähigkeit oder einem gehaltenen Gegenstand." - }, - "250_HEAL": { - "name": "Anfänger-Heiler" - }, - "1000_HEAL": { - "name": "Gesundheitsprofi" - }, - "2500_HEAL": { - "name": "Kleriker" - }, - "10000_HEAL": { - "name": "Wiederherstellungsmeister" - }, - "LevelAchv": { - "description": "Erhöhe das Level eines Pokémon auf {{level}}." - }, - "LV_100": { - "name": "Warte, es gibt mehr!" - }, - "LV_250": { - "name": "Elite" - }, - "LV_1000": { - "name": "Geh noch höher hinaus!" - }, - "RibbonAchv": { - "description": "Sammle insgesamt {{ribbonAmount}} Bänder." - }, - "10_RIBBONS": { - "name": "Champion der Pokémon Liga" - }, - "25_RIBBONS": { - "name": "Bänder-Sammler" - }, - "50_RIBBONS": { - "name": "Bänder-Experte" - }, - "75_RIBBONS": { - "name": "Bänder-Guru" - }, - "100_RIBBONS": { - "name": "Bänder-Meister" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Teamwork", - "description": "Nutze Staffette, während der Anwender mindestens eines Statuswertes maximiert hat." - }, - "MAX_FRIENDSHIP": { - "name": "Freundschaftsmaximierung", - "description": "Erreiche maximale Freundschaft bei einem Pokémon." - }, - "MEGA_EVOLVE": { - "name": "Megaverwandlung", - "description": "Megaentwickle ein Pokémon." - }, - "GIGANTAMAX": { - "name": "Absolute Einheit", - "description": "Gigadynamaximiere ein Pokémon." - }, - "TERASTALLIZE": { - "name": "Typen-Bonus Enthusiast", - "description": "Terrakristallisiere ein Pokémon." - }, - "STELLAR_TERASTALLIZE": { - "name": "Der geheime Typ", - "description": "Terrakristallisiere ein Pokémon zum Typen Stellar." - }, - "SPLICE": { - "name": "Unendliche Fusion", - "description": "Kombiniere zwei Pokémon mit einem DNS-Keil." - }, - "MINI_BLACK_HOLE": { - "name": "Ein Loch voller Items", - "description": "Erlange ein Mini-Schwarzes Loch." - }, - "CATCH_MYTHICAL": { - "name": "Mysteriöses!", - "description": "Fange ein mysteriöses Pokémon." - }, - "CATCH_SUB_LEGENDARY": { - "name": "Sub-Legendär", - "description": "Fange ein sub-legendäres Pokémon." - }, - "CATCH_LEGENDARY": { - "name": "Legendär", - "description": "Fange ein legendäres Pokémon." - }, - "SEE_SHINY": { - "name": "Schillerndes Licht", - "description": "Finde ein wildes schillerndes Pokémon." - }, - "SHINY_PARTY": { - "name": "Das ist Hingabe", - "description": "Habe ein Team aus schillernden Pokémon." - }, - "HATCH_MYTHICAL": { - "name": "Mysteriöses Ei", - "description": "Lass ein mysteriöses Pokémon aus einem Ei schlüpfen." - }, - "HATCH_SUB_LEGENDARY": { - "name": "Sub-Legendäres Ei", - "description": "Lass ein sub-legendäres Pokémon aus einem Ei schlüpfen." - }, - "HATCH_LEGENDARY": { - "name": "Legendäres Ei", - "description": "Lass ein legendäres Pokémon aus einem Ei schlüpfen." - }, - "HATCH_SHINY": { - "name": "Schillerndes Ei", - "description": "Lass ein schillerndes Pokémon aus einem Ei schlüpfen." - }, - "HIDDEN_ABILITY": { - "name": "Geheimes Talent", - "description": "Fang ein Pokémon mit versteckter Fähigkeit." - }, - "PERFECT_IVS": { - "name": "Zertifikat der Echtheit", - "description": "Erhalte ein Pokémon mit perfekten IS-Werten." - }, - "CLASSIC_VICTORY": { - "name": "Ungeschlagen", - "description": "Beende den klassischen Modus erfolgreich." - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "'Bringe dein Kind mit zur Arbeit'-Tag", - "description": "Beende den klassischen Modus erfolgreich mit mindestens einem nicht entwickeltem Pokémon in deinem Team" - }, - "MONO_GEN_ONE": { - "name": "Der originale Rivale", - "description": "Schließe die 'Nur 1. Generation' Herausforderung ab." - }, - "MONO_GEN_TWO": { - "name": "Generation 1.5", - "description": "Schließe die 'Nur 2. Generation' Herausforderung ab." - }, - "MONO_GEN_THREE": { - "name": "Zu viel Wasser?", - "description": "Schließe die 'Nur 3. Generation' Herausforderung ab." - }, - "MONO_GEN_FOUR": { - "name": "Ist SIE wirklich die Stärkste?", - "description": "Schließe die 'Nur 4. Generation' Herausforderung ab." - }, - "MONO_GEN_FIVE": { - "name": "Komplett Original", - "description": "Schließe die 'Nur 5. Generation' Herausforderung ab." - }, - "MONO_GEN_SIX": { - "name": "Fast Königlich", - "description": "Schließe die 'Nur 6. Generation' Herausforderung ab." - }, - "MONO_GEN_SEVEN": { - "name": "Technisch gesehen", - "description": "Schließe die 'Nur 7. Generation' Herausforderung ab." - }, - "MONO_GEN_EIGHT": { - "name": "Die Zeit des Champions", - "description": "Schließe die 'Nur 8. Generation' Herausforderung ab." - }, - "MONO_GEN_NINE": { - "name": "Sie hat es dir leicht gemacht...", - "description": "Schließe die 'Nur 9. Generation' Herausforderung ab." - }, - "MonoType": { - "description": "Beende die Monotyp-{{type}} Herausforderung." - }, - "MONO_NORMAL": { - "name": "Normaler Typ" - }, - "MONO_FIGHTING": { - "name": "Ich kenne Kung Fu." - }, - "MONO_FLYING": { - "name": "Ich glaube ich kann fliegen." - }, - "MONO_POISON": { - "name": "Kantos Liebling" - }, - "MONO_GROUND": { - "name": "Auf dem Boden bleiben." - }, - "MONO_ROCK": { - "name": "So hart wie Rocko." - }, - "MONO_BUG": { - "name": "Steche wie ein Bibor." - }, - "MONO_GHOST": { - "name": "Wer wird angerufen?" - }, - "MONO_STEEL": { - "name": "Stahlharte Entschlossenheit" - }, - "MONO_FIRE": { - "name": "Brennende Leidenschaft" - }, - "MONO_WATER": { - "name": "Wenn es regnet, schüttet es!" - }, - "MONO_GRASS": { - "name": "Grüner Daumen" - }, - "MONO_ELECTRIC": { - "name": "Elektrisierend" - }, - "MONO_PSYCHIC": { - "name": "Übernatürliches Talent" - }, - "MONO_ICE": { - "name": "Eis Eis Baby" - }, - "MONO_DRAGON": { - "name": "Siegfried bist du es?" - }, - "MONO_DARK": { - "name": "Es ist nur eine Phase!" - }, - "MONO_FAIRY": { - "name": "Ein ewiges Abenteuer!" - }, - "FRESH_START": { - "name": "Hussa, noch einmal von vorn!", - "description": "Schließe die 'Neuanfang' Herausforderung ab" - } -} \ No newline at end of file diff --git a/src/locales/de/achv-female.json b/src/locales/de/achv.json similarity index 91% rename from src/locales/de/achv-female.json rename to src/locales/de/achv.json index 5dd99c18eb1..0649bcf3169 100644 --- a/src/locales/de/achv-female.json +++ b/src/locales/de/achv.json @@ -1,31 +1,4 @@ { - "10K_MONEY": { - "name": "Besserverdienerin" - }, - "1M_MONEY": { - "name": "Millionärin" - }, - "10000_DMG": { - "name": "One Punch Woman" - }, - "250_HEAL": { - "name": "Anfänger-Heilerin" - }, - "2500_HEAL": { - "name": "Klerikerin" - }, - "10000_HEAL": { - "name": "Wiederherstellungsmeisterin" - }, - "25_RIBBONS": { - "name": "Bänder-Sammlerin" - }, - "50_RIBBONS": { - "name": "Bänder-Expertin" - }, - "100_RIBBONS": { - "name": "Bänder-Meisterin" - }, "Achievements": { "name": "Errungenschaften" }, @@ -35,9 +8,17 @@ "MoneyAchv": { "description": "Häufe eine Gesamtsumme von {{moneyAmount}} ₽ an." }, + "10K_MONEY": { + "name": "Besserverdiener", + "name_female": "Besserverdienerin" + }, "100K_MONEY": { "name": "Reich" }, + "1M_MONEY": { + "name": "Millionär", + "name_female": "Millionärin" + }, "10M_MONEY": { "name": "Einprozenter" }, @@ -53,12 +34,28 @@ "2500_DMG": { "name": "Das ist ne Menge Schaden!" }, + "10000_DMG": { + "name": "One Punch Man", + "name_female": "One Punch Woman" + }, "HealAchv": { "description": "Heile {{healAmount}} {{HP}} auf einmal. Mit einer Attacke, Fähigkeit oder einem gehaltenen Gegenstand." }, + "250_HEAL": { + "name": "Anfänger-Heiler", + "name_female": "Anfänger-Heilerin" + }, "1000_HEAL": { "name": "Gesundheitsprofi" }, + "2500_HEAL": { + "name": "Kleriker", + "name_female": "Klerikerin" + }, + "10000_HEAL": { + "name": "Wiederherstellungsmeister", + "name_female": "Wiederherstellungsmeisterin" + }, "LevelAchv": { "description": "Erhöhe das Level eines Pokémon auf {{level}}." }, @@ -77,9 +74,21 @@ "10_RIBBONS": { "name": "Champion der Pokémon Liga" }, + "25_RIBBONS": { + "name": "Bänder-Sammler", + "name_female": "Bänder-Sammlerin" + }, + "50_RIBBONS": { + "name": "Bänder-Experte", + "name_female": "Bänder-Expertin" + }, "75_RIBBONS": { "name": "Bänder-Guru" }, + "100_RIBBONS": { + "name": "Bänder-Meister", + "name_female": "Bänder-Meisterin" + }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Teamwork", "description": "Nutze Staffette, während der Anwender mindestens eines Statuswertes maximiert hat." diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 28c3332a55f..afefd98a0cb 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const deConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/en/achv-male.json b/src/locales/en/achv.json similarity index 85% rename from src/locales/en/achv-male.json rename to src/locales/en/achv.json index ec695c3ed2a..185b42d181a 100644 --- a/src/locales/en/achv-male.json +++ b/src/locales/en/achv.json @@ -9,16 +9,20 @@ "description": "Accumulate a total of ₽{{moneyAmount}}" }, "10K_MONEY": { - "name": "Money Haver" + "name": "Money Haver", + "name_female": null }, "100K_MONEY": { - "name": "Rich" + "name": "Rich", + "name_female": null }, "1M_MONEY": { - "name": "Millionaire" + "name": "Millionaire", + "name_female": null }, "10M_MONEY": { - "name": "One Percenter" + "name": "One Percenter", + "name_female": null }, "DamageAchv": { "description": "Inflict {{damageAmount}} damage in one hit" @@ -27,28 +31,35 @@ "name": "Hard Hitter" }, "1000_DMG": { - "name": "Harder Hitter" + "name": "Harder Hitter", + "name_female": null }, "2500_DMG": { - "name": "That's a Lotta Damage!" + "name": "That's a Lotta Damage!", + "name_female": null }, "10000_DMG": { - "name": "One Punch Man" + "name": "One Punch Man", + "name_female": "One Punch Woman" }, "HealAchv": { "description": "Heal {{healAmount}} {{HP}} at once with a move, ability, or held item" }, "250_HEAL": { - "name": "Novice Healer" + "name": "Novice Healer", + "name_female": null }, "1000_HEAL": { - "name": "Big Healer" + "name": "Big Healer", + "name_female": null }, "2500_HEAL": { - "name": "Cleric" + "name": "Cleric", + "name_female": null }, "10000_HEAL": { - "name": "Recovery Master" + "name": "Recovery Master", + "name_female": null }, "LevelAchv": { "description": "Level up a Pokémon to Lv{{level}}" @@ -57,7 +68,8 @@ "name": "But Wait, There's More!" }, "LV_250": { - "name": "Elite" + "name": "Elite", + "name_female": null }, "LV_1000": { "name": "To Go Even Further Beyond" @@ -66,19 +78,24 @@ "description": "Accumulate a total of {{ribbonAmount}} Ribbons" }, "10_RIBBONS": { - "name": "Pokémon League Champion" + "name": "Pokémon League Champion", + "name_female": null }, "25_RIBBONS": { - "name": "Great League Champion" + "name": "Great League Champion", + "name_female": null }, "50_RIBBONS": { - "name": "Ultra League Champion" + "name": "Ultra League Champion", + "name_female": null }, "75_RIBBONS": { - "name": "Rogue League Champion" + "name": "Rogue League Champion", + "name_female": null }, "100_RIBBONS": { - "name": "Master League Champion" + "name": "Master League Champion", + "name_female": null }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Teamwork", @@ -130,6 +147,7 @@ }, "SHINY_PARTY": { "name": "That's Dedication", + "name_female": null, "description": "Have a full party of shiny Pokémon" }, "HATCH_MYTHICAL": { @@ -158,6 +176,7 @@ }, "CLASSIC_VICTORY": { "name": "Undefeated", + "name_female": null, "description": "Beat the game in classic mode" }, "UNEVOLVED_CLASSIC_VICTORY": { diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index f1827b5152d..36593befb8f 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const enConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/es/achv-male.json b/src/locales/es/achv-male.json deleted file mode 100644 index 7faaa387e89..00000000000 --- a/src/locales/es/achv-male.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "Achievements": { - "name": "Logros" - }, - "Locked": { - "name": "Bloqueado" - }, - "MoneyAchv": { - "description": "Acumula un total de ₽{{moneyAmount}}." - }, - "10K_MONEY": { - "name": "Ahorrador" - }, - "100K_MONEY": { - "name": "Rico" - }, - "1M_MONEY": { - "name": "Millonario" - }, - "10M_MONEY": { - "name": "Elusión Fiscal" - }, - "DamageAchv": { - "description": "Inflige {{damageAmount}} daño en un solo golpe." - }, - "250_DMG": { - "name": "Golpe Maestro" - }, - "1000_DMG": { - "name": "Golpe Devastador" - }, - "2500_DMG": { - "name": "¡Eso es un montón de daño!" - }, - "10000_DMG": { - "name": "One Punch Man" - }, - "HealAchv": { - "description": "Cura {{healAmount}} {{HP}} de una, con un movimiento, habilidad o objeto equipado." - }, - "250_HEAL": { - "name": "Sanador Novato" - }, - "1000_HEAL": { - "name": "Gran Sanador" - }, - "2500_HEAL": { - "name": "Clérigo" - }, - "10000_HEAL": { - "name": "Centro Pokémon" - }, - "LevelAchv": { - "description": "Sube a un Pokémon al nivel {{level}}." - }, - "LV_100": { - "name": "¡Pero espera, aún hay mas!" - }, - "LV_250": { - "name": "Élite" - }, - "LV_1000": { - "name": "Supera tus límites" - }, - "RibbonAchv": { - "description": "Acumula un total de {{ribbonAmount}} Cintas." - }, - "10_RIBBONS": { - "name": "Campeón Liga Pokémon" - }, - "25_RIBBONS": { - "name": "Campeón Liga Super" - }, - "50_RIBBONS": { - "name": "Campeón Liga Ultra" - }, - "75_RIBBONS": { - "name": "Campeón Liga Rogue" - }, - "100_RIBBONS": { - "name": "Campeón Liga Master" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Trabajo en Equipo", - "description": "Haz relevo a otro miembro del equipo con al menos una estadística al máximo." - }, - "MAX_FRIENDSHIP": { - "name": "Amistad Total", - "description": "Alcanza con un Pokémon la amistad al máximo." - }, - "MEGA_EVOLVE": { - "name": "Megamorfosis", - "description": "Megaevoluciona a un Pokémon." - }, - "GIGANTAMAX": { - "name": "Criatura Colosal", - "description": "Haz Gigantamax a un Pokémon." - }, - "TERASTALLIZE": { - "name": "Entusiasta del STAB", - "description": "Teracristaliza a un Pokémon." - }, - "STELLAR_TERASTALLIZE": { - "name": "El Tipo Oculto", - "description": "Teracristaliza a un Pokémon al tipo Astral." - }, - "SPLICE": { - "name": "Infinite Fusion", - "description": "Fusiona dos Pokémon con la Punta ADN." - }, - "MINI_BLACK_HOLE": { - "name": "Devorador de Objetos", - "description": "Adquiere un Mini Agujero Negro." - }, - "CATCH_MYTHICAL": { - "name": "Singular", - "description": "Captura a un Pokémon Singular." - }, - "CATCH_SUB_LEGENDARY": { - "name": "(Sub)Legendario", - "description": "Captura a un Pokémon Sublegendario." - }, - "CATCH_LEGENDARY": { - "name": "Legendario", - "description": "Captura a un Pokémon Legendario." - }, - "SEE_SHINY": { - "name": "Shiny", - "description": "Encuentra a un Pokémon Shiny salvaje." - }, - "SHINY_PARTY": { - "name": "Eso es dedicación", - "description": "Tener un equipo completo de Pokémon shiny." - }, - "HATCH_MYTHICAL": { - "name": "Huevo Singular", - "description": "Hacer eclosionar un Pokémon Singular de un huevo." - }, - "HATCH_SUB_LEGENDARY": { - "name": "Huevo Sublegendario", - "description": "Hacer eclosionar un Pokémon Sublegendario de un huevo." - }, - "HATCH_LEGENDARY": { - "name": "Huevo Legendario", - "description": "Hacer eclosionar un Pokémon Legendario de un huevo." - }, - "HATCH_SHINY": { - "name": "Huevo Shiny", - "description": "Hacer eclosionar un Pokémon Shiny de un huevo." - }, - "HIDDEN_ABILITY": { - "name": "Potencial Oculto", - "description": "Captura un Pokémon con una habilidad oculta." - }, - "PERFECT_IVS": { - "name": "Certificado de Autenticidad", - "description": "Consigue IVs perfectos en un Pokémon." - }, - "CLASSIC_VICTORY": { - "name": "Imbatible", - "description": "Completa el juego en modo clásico." - } -} \ No newline at end of file diff --git a/src/locales/es/achv-female.json b/src/locales/es/achv.json similarity index 83% rename from src/locales/es/achv-female.json rename to src/locales/es/achv.json index f14e0f9a4be..c3a22c566d0 100644 --- a/src/locales/es/achv-female.json +++ b/src/locales/es/achv.json @@ -9,13 +9,16 @@ "description": "Acumula un total de ₽{{moneyAmount}}." }, "10K_MONEY": { - "name": "Ahorradora" + "name": "Ahorrador", + "name_female": "Ahorradora" }, "100K_MONEY": { - "name": "Rica" + "name": "Rico", + "name_female": "Rica" }, "1M_MONEY": { - "name": "Millonaria" + "name": "Millonario", + "name_female": "Millonaria" }, "10M_MONEY": { "name": "Elusión Fiscal" @@ -39,13 +42,16 @@ "description": "Cura {{healAmount}} {{HP}} de una, con un movimiento, habilidad o objeto equipado." }, "250_HEAL": { - "name": "Sanadora Novata" + "name": "Sanador Novato", + "name_female": "Sanadora Novata" }, "1000_HEAL": { - "name": "Gran Sanadora" + "name": "Gran Sanador", + "name_female": "Gran Sanadora" }, "2500_HEAL": { - "name": "Clériga" + "name": "Clérigo", + "name_female": "Clériga" }, "10000_HEAL": { "name": "Centro Pokémon" @@ -66,19 +72,24 @@ "description": "Acumula un total de {{ribbonAmount}} Cintas." }, "10_RIBBONS": { - "name": "Campeona Liga Pokémon" + "name": "Campeón Liga Pokémon", + "name_female": "Campeona Liga Pokémon" }, "25_RIBBONS": { - "name": "Campeona Liga Super" + "name": "Campeón Liga Super", + "name_female": "Campeona Liga Super" }, "50_RIBBONS": { - "name": "Campeona Liga Ultra" + "name": "Campeón Liga Ultra", + "name_female": "Campeona Liga Ultra" }, "75_RIBBONS": { - "name": "Campeona Liga Rogue" + "name": "Campeón Liga Rogue", + "name_female": "Campeona Liga Rogue" }, "100_RIBBONS": { - "name": "Campeona Liga Master" + "name": "Campeón Liga Master", + "name_female": "Campeona Liga Master" }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Trabajo en Equipo", diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index a34a05cecf0..edc7dd8b0d7 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const esConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/fr/achv-female.json b/src/locales/fr/achv-female.json deleted file mode 100644 index 68e114965cd..00000000000 --- a/src/locales/fr/achv-female.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "10K_MONEY": { - "name": "Épargnante" - }, - "1M_MONEY": { - "name": "Banquière" - }, - "10M_MONEY": { - "name": "Évadée fiscale" - }, - "1000_DMG": { - "name": "Boxeuse" - }, - "2500_DMG": { - "name": "Distributrice de pains" - }, - "10000_DMG": { - "name": "One Punch Woman" - }, - "250_HEAL": { - "name": "Infirmière" - }, - "10_RIBBONS": { - "name": "Maitresse de la Ligue" - }, - "25_RIBBONS": { - "name": "Super Maitresse de la Ligue" - }, - "50_RIBBONS": { - "name": "Hyper Maitresse de la Ligue" - }, - "75_RIBBONS": { - "name": "Rogue Maitresse de la Ligue" - }, - "100_RIBBONS": { - "name": "Master Maitresse de la Ligue" - }, - "SHINY_PARTY": { - "name": "Shasseuse", - "description": "Avoir une équipe exclusivement composée de Pokémon chromatiques" - }, - "CLASSIC_VICTORY": { - "name": "Invaincue", - "description": "Terminer le jeu en mode classique" - }, - "Achievements": { - "name": "Succès" - }, - "Locked": { - "name": "Verrouillé" - }, - "MoneyAchv": { - "description": "Récolter un total de {{moneyAmount}} ₽." - }, - "100K_MONEY": { - "name": "Je possède des thunes" - }, - "DamageAchv": { - "description": "Infliger {{damageAmount}} de dégâts en un coup." - }, - "250_DMG": { - "name": "Caïd" - }, - "HealAchv": { - "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité,\nun talent ou un objet tenu." - }, - "1000_HEAL": { - "name": "Médecin" - }, - "2500_HEAL": { - "name": "Clerc" - }, - "10000_HEAL": { - "name": "Centre Pokémon" - }, - "LevelAchv": { - "description": "Monter un Pokémon au N.{{level}}." - }, - "LV_100": { - "name": "Et c’est pas fini !" - }, - "LV_250": { - "name": "Élite" - }, - "LV_1000": { - "name": "Vers l’infini et au-delà" - }, - "RibbonAchv": { - "description": "Accumuler un total de {{ribbonAmount}} Rubans." - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Travail d’équipe", - "description": "Utiliser Relais avec au moins une statistique montée à fond." - }, - "MAX_FRIENDSHIP": { - "name": "Copinage", - "description": "Atteindre le niveau de bonheur maximal avec un Pokémon." - }, - "MEGA_EVOLVE": { - "name": "Mégamorph", - "description": "Méga-évoluer un Pokémon." - }, - "GIGANTAMAX": { - "name": "Kaijū", - "description": "Gigamaxer un Pokémon." - }, - "TERASTALLIZE": { - "name": "J’aime les STAB", - "description": "Téracristalliser un Pokémon." - }, - "STELLAR_TERASTALLIZE": { - "name": "Le type enfoui", - "description": "Téracristalliser un Pokémon en type Stellaire." - }, - "SPLICE": { - "name": "Infinite Fusion", - "description": "Fusionner deux Pokémon avec le Pointeau ADN." - }, - "MINI_BLACK_HOLE": { - "name": "Item-stellar", - "description": "Obtenir un Mini Trou Noir." - }, - "CATCH_MYTHICAL": { - "name": "Fabuleux", - "description": "Capturer un Pokémon fabuleux." - }, - "CATCH_SUB_LEGENDARY": { - "name": "(Semi-)Légendaire", - "description": "Capturer un Pokémon semi-légendaire." - }, - "CATCH_LEGENDARY": { - "name": "Légendaire", - "description": "Capturer un Pokémon légendaire." - }, - "SEE_SHINY": { - "name": "Chromatique", - "description": "Trouver un Pokémon sauvage chromatique." - }, - "HATCH_MYTHICAL": { - "name": "Œuf fabuleux", - "description": "Obtenir un Pokémon fabuleux dans un Œuf." - }, - "HATCH_SUB_LEGENDARY": { - "name": "Œuf semi-légendaire", - "description": "Obtenir un Pokémon semi-légendaire dans un Œuf." - }, - "HATCH_LEGENDARY": { - "name": "Œuf légendaire", - "description": "Obtenir un Pokémon légendaire dans un Œuf." - }, - "HATCH_SHINY": { - "name": "Œuf chromatique", - "description": "Obtenir un Pokémon chromatique dans un Œuf." - }, - "HIDDEN_ABILITY": { - "name": "Potentiel enfoui", - "description": "Capturer un Pokémon possédant un talent caché." - }, - "PERFECT_IVS": { - "name": "Certificat d’authenticité", - "description": "Avoir des IV parfaits sur un Pokémon." - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Le stagiaire de 3e", - "description": "Terminer le mode Classique avec au moins un Pokémon non-évolué dans l’équipe." - }, - "MONO_GEN_ONE": { - "name": "Le rival originel", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 1re génération." - }, - "MONO_GEN_TWO": { - "name": "Entre tradition et modernité", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 2e génération." - }, - "MONO_GEN_THREE": { - "name": "Too much water ?", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 3e génération." - }, - "MONO_GEN_FOUR": { - "name": "Réellement la plus difficile ?", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 4e génération." - }, - "MONO_GEN_FIVE": { - "name": "Recast complet", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 5e génération." - }, - "MONO_GEN_SIX": { - "name": "Aristocrate", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 6e génération." - }, - "MONO_GEN_SEVEN": { - "name": "Seulement techniquement", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 7e génération." - }, - "MONO_GEN_EIGHT": { - "name": "L’heure de gloire", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 8e génération." - }, - "MONO_GEN_NINE": { - "name": "Ça va, c’était EZ", - "description": "Terminer un challenge avec uniquement des Pokémon\nde 9e génération." - }, - "MonoType": { - "description": "Terminer un challenge en monotype {{type}}." - }, - "MONO_NORMAL": { - "name": "Extraordinairement banal" - }, - "MONO_FIGHTING": { - "name": "Je connais le kung-fu" - }, - "MONO_FLYING": { - "name": "Angry Birds" - }, - "MONO_POISON": { - "name": "Touche moi je t’empoisonne !" - }, - "MONO_GROUND": { - "name": "Prévisions : Séisme" - }, - "MONO_ROCK": { - "name": "Comme un roc" - }, - "MONO_BUG": { - "name": "Une chenille !" - }, - "MONO_GHOST": { - "name": "SOS Fantômes" - }, - "MONO_STEEL": { - "name": "De type Acier !" - }, - "MONO_FIRE": { - "name": "Allumer le feu" - }, - "MONO_WATER": { - "name": "Vacances en Bretagne" - }, - "MONO_GRASS": { - "name": "Ne pas toucher !" - }, - "MONO_ELECTRIC": { - "name": "À la masse" - }, - "MONO_PSYCHIC": { - "name": "Grocervo" - }, - "MONO_ICE": { - "name": "Froid comme la glace" - }, - "MONO_DRAGON": { - "name": "Légendes du club, ou presque" - }, - "MONO_DARK": { - "name": "Ça va lui passer" - }, - "MONO_FAIRY": { - "name": "Hey ! Listen !" - }, - "FRESH_START": { - "name": "Du premier coup !", - "description": "Terminer un challenge « Nouveau départ »." - } -} diff --git a/src/locales/fr/achv-male.json b/src/locales/fr/achv.json similarity index 87% rename from src/locales/fr/achv-male.json rename to src/locales/fr/achv.json index 077d37b4500..f83fa3079f2 100644 --- a/src/locales/fr/achv-male.json +++ b/src/locales/fr/achv.json @@ -9,16 +9,19 @@ "description": "Récolter un total de {{moneyAmount}} ₽." }, "10K_MONEY": { - "name": "Épargnant" + "name": "Épargnant", + "name_female": "Épargnante" }, "100K_MONEY": { "name": "Je possède des thunes" }, "1M_MONEY": { - "name": "Banquier" + "name": "Banquier", + "name_female": "Banquière" }, "10M_MONEY": { - "name": "Évadé fiscal" + "name": "Évadé fiscal", + "name_female": "Évadée fiscale" }, "DamageAchv": { "description": "Infliger {{damageAmount}} de dégâts en un coup." @@ -27,19 +30,23 @@ "name": "Caïd" }, "1000_DMG": { - "name": "Boxeur" + "name": "Boxeur", + "name_female": "Boxeuse" }, "2500_DMG": { - "name": "Distributeur de pains" + "name": "Distributeur de pains", + "name_female": "Distributrice de pains" }, "10000_DMG": { - "name": "One Punch Man" + "name": "One Punch Man", + "name_female": "One Punch Woman" }, "HealAchv": { "description": "Soigner {{healAmount}} {{HP}} en une fois avec une capacité,\nun talent ou un objet tenu." }, "250_HEAL": { - "name": "Infirmier" + "name": "Infirmier", + "name_female": "Infirmière" }, "1000_HEAL": { "name": "Médecin" @@ -66,19 +73,24 @@ "description": "Accumuler un total de {{ribbonAmount}} Rubans." }, "10_RIBBONS": { - "name": "Maitre de la Ligue" + "name": "Maitre de la Ligue", + "name_female": "Maitresse de la Ligue" }, "25_RIBBONS": { - "name": "Super Maitre de la Ligue" + "name": "Super Maitre de la Ligue", + "name_female": "Super Maitresse de la Ligue" }, "50_RIBBONS": { - "name": "Hyper Maitre de la Ligue" + "name": "Hyper Maitre de la Ligue", + "name_female": "Hyper Maitresse de la Ligue" }, "75_RIBBONS": { - "name": "Rogue Maitre de la Ligue" + "name": "Rogue Maitre de la Ligue", + "name_female": "Rogue Maitresse de la Ligue" }, "100_RIBBONS": { - "name": "Master Maitre de la Ligue" + "name": "Master Maitre de la Ligue", + "name_female": "Master Maitresse de la Ligue" }, "TRANSFER_MAX_BATTLE_STAT": { "name": "Travail d’équipe", @@ -130,6 +142,7 @@ }, "SHINY_PARTY": { "name": "Shasseur", + "name_female": "Shasseuse", "description": "Avoir une équipe exclusivement composée de Pokémon chromatiques." }, "HATCH_MYTHICAL": { @@ -158,6 +171,7 @@ }, "CLASSIC_VICTORY": { "name": "Invaincu", + "name_female": "Invaincue", "description": "Terminer le jeu en mode Classique." }, "UNEVOLVED_CLASSIC_VICTORY": { diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index 37ec76f3a20..668812e6432 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const frConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/it/achv-male.json b/src/locales/it/achv-male.json deleted file mode 100644 index 98e41005c46..00000000000 --- a/src/locales/it/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "Obiettivi" - }, - "Locked": { - "name": "Bloccato" - }, - "MoneyAchv": { - "description": "Accumula {{moneyAmount}} PokéDollari" - }, - "10K_MONEY": { - "name": "Benestante" - }, - "100K_MONEY": { - "name": "Ricco" - }, - "1M_MONEY": { - "name": "Milionario" - }, - "10M_MONEY": { - "name": "La numero uno" - }, - "DamageAchv": { - "description": "Infliggi {{damageAmount}} danni in un colpo" - }, - "250_DMG": { - "name": "Grandi danni!" - }, - "1000_DMG": { - "name": "Incredibili danni" - }, - "2500_DMG": { - "name": "Danni a palate!" - }, - "10000_DMG": { - "name": "One Punch Man" - }, - "HealAchv": { - "description": "Cura {{healAmount}} {{HP}} tramite mossa, abilità, o oggetto" - }, - "250_HEAL": { - "name": "Paramedico" - }, - "1000_HEAL": { - "name": "Dottore" - }, - "2500_HEAL": { - "name": "Chierico" - }, - "10000_HEAL": { - "name": "Mastro Curatore" - }, - "LevelAchv": { - "description": "Porta un pokémon a Lv{{level}}" - }, - "LV_100": { - "name": "E Non Finisce Qui!" - }, - "LV_250": { - "name": "Elite" - }, - "LV_1000": { - "name": "Verso l'Infinito ed Oltre!" - }, - "RibbonAchv": { - "description": "Accumula un Totale di {{ribbonAmount}} Nastri" - }, - "10_RIBBONS": { - "name": "Campione Lega Pokémon" - }, - "25_RIBBONS": { - "name": "Campione Lega Estesa" - }, - "50_RIBBONS": { - "name": "Campione Lega Ultra" - }, - "75_RIBBONS": { - "name": "Campione Lega Rogue" - }, - "100_RIBBONS": { - "name": "Campione Lega Assoluta" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Lavoro di Squadra", - "description": "Trasferisci almeno sei bonus statistiche tramite staffetta" - }, - "MAX_FRIENDSHIP": { - "name": "Amiconi", - "description": "Raggiungi amicizia massima con un Pokémon" - }, - "MEGA_EVOLVE": { - "name": "Megamorfosi", - "description": "Megaevolvi un Pokémon" - }, - "GIGANTAMAX": { - "name": "Grosso e Cattivo", - "description": "Ottieni una gigamax" - }, - "TERASTALLIZE": { - "name": "STAB Per Tutti", - "description": "Teracristallizza un Pokémon" - }, - "STELLAR_TERASTALLIZE": { - "name": "Tipo Segreto", - "description": "Teracristallizza un Pokémon stellare" - }, - "SPLICE": { - "name": "Fusione Infinita", - "description": "Fondi due Pokémon insieme tramite cuneo DNA" - }, - "MINI_BLACK_HOLE": { - "name": "Universo di Oggetti", - "description": "Ottieni un Mini Buco Nero" - }, - "CATCH_MYTHICAL": { - "name": "Mitico", - "description": "Cattura un Pokémon mitico" - }, - "CATCH_SUB_LEGENDARY": { - "name": "(Semi)Leggendario", - "description": "Cattura un Pokémon semileggendario" - }, - "CATCH_LEGENDARY": { - "name": "Leggendario", - "description": "Cattura un Pokémon leggendario" - }, - "SEE_SHINY": { - "name": "Cromatico", - "description": "Trova un Pokémon shiny in natura" - }, - "SHINY_PARTY": { - "name": "Dedizione Totale", - "description": "Riempi la squadra di Pokémon shiny" - }, - "HATCH_MYTHICAL": { - "name": "Uovo Mitico", - "description": "Schiudi l'uovo di un Pokémon mitico" - }, - "HATCH_SUB_LEGENDARY": { - "name": "Uovo (Semi)Leggendario", - "description": "Schiudi l'uovo di un Pokémon semileggendario" - }, - "HATCH_LEGENDARY": { - "name": "Uovo Leggendario", - "description": "Schiudi l'uovo di un Pokémon leggendario" - }, - "HATCH_SHINY": { - "name": "Uovo Cromatico", - "description": "Schiudi l'uovo di un Pokémon shiny" - }, - "HIDDEN_ABILITY": { - "name": "Potenziale Nascosto", - "description": "Cattura un Pokémon con abilità nascosta" - }, - "PERFECT_IVS": { - "name": "Certificato di Autenticità", - "description": "Ottieni un Pokémon con IV perfetti" - }, - "CLASSIC_VICTORY": { - "name": "Imbattuto", - "description": "Vinci in modalità classica" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Alternanza scuola-lavoro", - "description": "Completa la modalità classica con almeno un membro della squadra non evoluto completamente." - }, - "MONO_GEN_ONE": { - "name": "Rivale Originale", - "description": "Completa la modalità sfida di prima generazione." - }, - "MONO_GEN_TWO": { - "name": "Generazione 1.5", - "description": "Completa la modalità sfida di seconda generazione." - }, - "MONO_GEN_THREE": { - "name": "Troppa Acqua?", - "description": "Completa la modalità sfida di terza generazione." - }, - "MONO_GEN_FOUR": { - "name": "È Davvero La Più Forte?", - "description": "Completa la modalità sfida di quarta generazione." - }, - "MONO_GEN_FIVE": { - "name": "Tutti Originali", - "description": "Completa la modalità sfida di quinta generazione." - }, - "MONO_GEN_SIX": { - "name": "Vita e Morte", - "description": "Completa la modalità sfida di sesta generazione." - }, - "MONO_GEN_SEVEN": { - "name": "Troppo amichevoli?", - "description": "Completa la modalità sfida di settima generazione." - }, - "MONO_GEN_EIGHT": { - "name": "It's champion time!", - "description": "Completa la modalità sfida di ottava generazione." - }, - "MONO_GEN_NINE": { - "name": "Paradossalmente sbalorditivi", - "description": "Completa la modalità sfida di nona generazione." - }, - "MonoType": { - "description": "Completa la modalità sfida monotipo {{type}}" - }, - "MONO_NORMAL": { - "name": "Un tipo semplice" - }, - "MONO_FIGHTING": { - "name": "Conosco il Kung-fu" - }, - "MONO_FLYING": { - "name": "È un uccello? È un aereo?" - }, - "MONO_POISON": { - "name": "I migliori di Kanto" - }, - "MONO_GROUND": { - "name": "Con i piedi per terra" - }, - "MONO_ROCK": { - "name": "Forte come una roccia!" - }, - "MONO_BUG": { - "name": "Metodo Guzma" - }, - "MONO_GHOST": { - "name": "Sono fantasmi, caro Watson" - }, - "MONO_STEEL": { - "name": "Pugno di ferro" - }, - "MONO_FIRE": { - "name": "Giocare col fuoco" - }, - "MONO_WATER": { - "name": "Piove sul bagnato" - }, - "MONO_GRASS": { - "name": "L'erba del vicino è sempre più verde" - }, - "MONO_ELECTRIC": { - "name": "Elettrizzante" - }, - "MONO_PSYCHIC": { - "name": "Mentalista" - }, - "MONO_ICE": { - "name": "Rompere il ghiaccio" - }, - "MONO_DRAGON": { - "name": "Sangue di drago" - }, - "MONO_DARK": { - "name": "Solo una fase" - }, - "MONO_FAIRY": { - "name": "Follettini e follettine" - }, - "FRESH_START": { - "name": "Buona la prima!", - "description": "Completa la modalità sfida 'Un nuovo inizio'." - } -} \ No newline at end of file diff --git a/src/locales/it/achv-female.json b/src/locales/it/achv.json similarity index 100% rename from src/locales/it/achv-female.json rename to src/locales/it/achv.json diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index c671851f6a9..6bb46273370 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const itConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/ja/achv-male.json b/src/locales/ja/achv-male.json deleted file mode 100644 index 0dc5dc8185a..00000000000 --- a/src/locales/ja/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "実績" - }, - "Locked": { - "name": "なし" - }, - "MoneyAchv": { - "description": "一回の ランで ₽{{moneyAmount}}を 稼ぐ" - }, - "10K_MONEY": { - "name": "お金を持つ人" - }, - "100K_MONEY": { - "name": "富豪" - }, - "1M_MONEY": { - "name": "百万長者" - }, - "10M_MONEY": { - "name": "超富裕層" - }, - "DamageAchv": { - "description": "一撃で {{damageAmount}}ダメージを 与える" - }, - "250_DMG": { - "name": "力持ち" - }, - "1000_DMG": { - "name": "強者" - }, - "2500_DMG": { - "name": "カカロット" - }, - "10000_DMG": { - "name": "ワンパンマン" - }, - "HealAchv": { - "description": "一つの 技や 特性や 持っているアイテムで {{healAmount}}{{HP}}を 一気に 回復する" - }, - "250_HEAL": { - "name": "回復発見者" - }, - "1000_HEAL": { - "name": "大いなる治療者" - }, - "2500_HEAL": { - "name": "回復達人" - }, - "10000_HEAL": { - "name": "ジョーイさん" - }, - "LevelAchv": { - "description": "一つの ポケモンを Lv{{level}}まで レベルアップする" - }, - "LV_100": { - "name": "まだまだだよ" - }, - "LV_250": { - "name": "天王" - }, - "LV_1000": { - "name": "向こうの向こうを超え" - }, - "RibbonAchv": { - "description": "{{ribbonAmount}}巻の リボンを 積もる" - }, - "10_RIBBONS": { - "name": "ポケモンリーグチャンピオン" - }, - "25_RIBBONS": { - "name": "スーパーリーグチャンピオン" - }, - "50_RIBBONS": { - "name": "ハイパーリーグチャンピオン" - }, - "75_RIBBONS": { - "name": "ローグリーグチャンピオン" - }, - "100_RIBBONS": { - "name": "マスターリーグチャンピオン" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "同力", - "description": "少なくとも 一つの 能力を 最大まで あげて 他の 手持ちポケモンに バトンタッチする" - }, - "MAX_FRIENDSHIP": { - "name": "マブ達", - "description": "一つの 手持ちポケモンの 仲良し度を 最大に 上げる" - }, - "MEGA_EVOLVE": { - "name": "ザ・アブソリュート", - "description": "一つの 手持ちポケモンを メガシンカさせる" - }, - "GIGANTAMAX": { - "name": "太―くて 堪らない", - "description": "一つの 手持ちポケモンを キョダイマックスさせる" - }, - "TERASTALLIZE": { - "name": "一致好き", - "description": "一つの 手持ちポケモンを テラスタルさせる" - }, - "STELLAR_TERASTALLIZE": { - "name": "隠れたタイプ", - "description": "一つの 手持ちポケモンを ステラ・テラスタルさせる" - }, - "SPLICE": { - "name": "インフィニット・フュジョン", - "description": "いでんしのくさびで 二つの ポケモンを 吸収合体させる" - }, - "MINI_BLACK_HOLE": { - "name": "アイテムホーリック", - "description": "ミニブラックホールを 手に入れる" - }, - "CATCH_MYTHICAL": { - "name": "幻", - "description": "幻の ポケモンを 捕まえる" - }, - "CATCH_SUB_LEGENDARY": { - "name": "準・伝説", - "description": "準伝説の ポケモンを 捕まえる" - }, - "CATCH_LEGENDARY": { - "name": "ザ・伝説", - "description": "伝説の ポケモンを 捕まえる" - }, - "SEE_SHINY": { - "name": "色とりどりに光る", - "description": "野生の 色違いポケモンを みつける" - }, - "SHINY_PARTY": { - "name": "きらきら努力家", - "description": "手持ちポケモンは 全員 色違いポケモンに する" - }, - "HATCH_MYTHICAL": { - "name": "幻のタマゴ", - "description": "幻の ポケモンを タマゴから 生まれる" - }, - "HATCH_SUB_LEGENDARY": { - "name": "準伝説のタマゴ", - "description": "準伝説の ポケモンを タマゴから 生まれる" - }, - "HATCH_LEGENDARY": { - "name": "伝説のタマゴ", - "description": "伝説の ポケモンを タマゴから 生まれる" - }, - "HATCH_SHINY": { - "name": "色違いタマゴ", - "description": "色違いポケモンを タマゴから 生まれる" - }, - "HIDDEN_ABILITY": { - "name": "底力", - "description": "隠れ特性がある ポケモンを 捕まえる" - }, - "PERFECT_IVS": { - "name": "個体値の賞状", - "description": "一つの ポケモンの 個体値を すべて 最大に する" - }, - "CLASSIC_VICTORY": { - "name": "無双", - "description": "クラシックモードを クリアする" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Bring Your Child To Work Day", - "description": "Beat the game in Classic Mode with at least one unevolved party member." - }, - "MONO_GEN_ONE": { - "name": "原始", - "description": "1世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_TWO": { - "name": "懐かしいカンジョウ", - "description": "2世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_THREE": { - "name": "水浸し", - "description": "3世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_FOUR": { - "name": "神々の地", - "description": "4世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_FIVE": { - "name": "ニューヨーカー", - "description": "5世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_SIX": { - "name": "サヴァ・サヴァ", - "description": "6世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_SEVEN": { - "name": "アローラ・オエ", - "description": "7世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_EIGHT": { - "name": "チャンピオン タイムを 楽しめ!", - "description": "8世代の 単一世代チャレンジを クリアする" - }, - "MONO_GEN_NINE": { - "name": "ネモに甘えたでしょう", - "description": "9世代の 単一世代チャレンジを クリアする" - }, - "MonoType": { - "description": "{{type}}タイプの 単一タイプチャレンジを クリアする" - }, - "MONO_NORMAL": { - "name": "凡人" - }, - "MONO_FIGHTING": { - "name": "八千以上だ!!" - }, - "MONO_FLYING": { - "name": "翼をください" - }, - "MONO_POISON": { - "name": "カントーの名物" - }, - "MONO_GROUND": { - "name": "自信でユラユラ" - }, - "MONO_ROCK": { - "name": "タケシの挑戦状" - }, - "MONO_BUG": { - "name": "チョウチョウせん者" - }, - "MONO_GHOST": { - "name": "貞子ちゃん" - }, - "MONO_STEEL": { - "name": "ハガネーター" - }, - "MONO_FIRE": { - "name": "NIGHT OF FIRE" - }, - "MONO_WATER": { - "name": "土砂降リスト" - }, - "MONO_GRASS": { - "name": "www" - }, - "MONO_ELECTRIC": { - "name": "パチピカペコ" - }, - "MONO_PSYCHIC": { - "name": "陽キャ" - }, - "MONO_ICE": { - "name": "ありのまま" - }, - "MONO_DRAGON": { - "name": "龍が如く" - }, - "MONO_DARK": { - "name": "陰キャ" - }, - "MONO_FAIRY": { - "name": "あらハート満タンになった" - }, - "FRESH_START": { - "name": "一発で!", - "description": "出直しチャレンジを クリアする" - } -} \ No newline at end of file diff --git a/src/locales/ja/achv-female.json b/src/locales/ja/achv.json similarity index 100% rename from src/locales/ja/achv-female.json rename to src/locales/ja/achv.json diff --git a/src/locales/ja/config.ts b/src/locales/ja/config.ts index b459ee12a9a..5fbf0497d94 100644 --- a/src/locales/ja/config.ts +++ b/src/locales/ja/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const jaConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/ko/achv-male.json b/src/locales/ko/achv-male.json deleted file mode 100644 index 73753dd9b5a..00000000000 --- a/src/locales/ko/achv-male.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "업적" - }, - "Locked": { - "name": "미완료" - }, - "MoneyAchv": { - "description": "누적 소지금 ₽{{moneyAmount}} 달성" - }, - "10K_MONEY": { - "name": "돈 좀 있나?" - }, - "100K_MONEY": { - "name": "부자" - }, - "1M_MONEY": { - "name": "백만장자" - }, - "10M_MONEY": { - "name": "상위 1프로" - }, - "DamageAchv": { - "description": "한 번의 공격만으로 {{damageAmount}} 데미지" - }, - "250_DMG": { - "name": "강타자" - }, - "1000_DMG": { - "name": "최강타자" - }, - "2500_DMG": { - "name": "때릴 줄 아시는군요!" - }, - "10000_DMG": { - "name": "원펀맨" - }, - "HealAchv": { - "description": "기술이나 특성, 지닌 도구로 한 번에 {{healAmount}} {{HP}} 회복" - }, - "250_HEAL": { - "name": "견습 힐러" - }, - "1000_HEAL": { - "name": "상급 힐러" - }, - "2500_HEAL": { - "name": "클레릭" - }, - "10000_HEAL": { - "name": "회복 마스터" - }, - "LevelAchv": { - "description": "포켓몬 Lv{{level}} 달성" - }, - "LV_100": { - "name": "잠깐, 여기가 끝이 아니라구!" - }, - "LV_250": { - "name": "엘리트" - }, - "LV_1000": { - "name": "더 먼 곳을 향해" - }, - "RibbonAchv": { - "description": "총 {{ribbonAmount}}개의 리본 획득" - }, - "10_RIBBONS": { - "name": "포켓몬 리그 챔피언" - }, - "25_RIBBONS": { - "name": "슈퍼 리그 챔피언" - }, - "50_RIBBONS": { - "name": "하이퍼 리그 챔피언" - }, - "75_RIBBONS": { - "name": "로그 리그 챔피언" - }, - "100_RIBBONS": { - "name": "마스터 리그 챔피언" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "팀워크", - "description": "한 개 이상의 능력치가 최대 랭크일 때 배턴터치 사용" - }, - "MAX_FRIENDSHIP": { - "name": "친밀 맥스", - "description": "최대 친밀도 달성" - }, - "MEGA_EVOLVE": { - "name": "메가변환", - "description": "포켓몬을 메가진화" - }, - "GIGANTAMAX": { - "name": "엄청난 것", - "description": "포켓몬을 다이맥스" - }, - "TERASTALLIZE": { - "name": "반짝반짝", - "description": "포켓몬을 테라스탈" - }, - "STELLAR_TERASTALLIZE": { - "name": "숨겨진 타입", - "description": "포켓몬을 스텔라 테라스탈" - }, - "SPLICE": { - "name": "끝없는 융합", - "description": "유전자쐐기로 두 포켓몬을 융합" - }, - "MINI_BLACK_HOLE": { - "name": "도구가 가득한 구멍", - "description": "미니 블랙홀 획득" - }, - "CATCH_MYTHICAL": { - "name": "환상", - "description": "환상의 포켓몬 포획" - }, - "CATCH_SUB_LEGENDARY": { - "name": "(준)전설", - "description": "준전설 포켓몬 포획" - }, - "CATCH_LEGENDARY": { - "name": "전설", - "description": "전설의 포켓몬 포획" - }, - "SEE_SHINY": { - "name": "다른 색", - "description": "야생의 색이 다른 포켓몬 발견" - }, - "SHINY_PARTY": { - "name": "찐사랑", - "description": "색이 다른 포켓몬만으로 파티 구성" - }, - "HATCH_MYTHICAL": { - "name": "환상의 알", - "description": "알에서 환상의 포켓몬이 부화" - }, - "HATCH_SUB_LEGENDARY": { - "name": "준전설 알", - "description": "알에서 준전설 포켓몬이 부화" - }, - "HATCH_LEGENDARY": { - "name": "전설의 알", - "description": "알에서 전설의 포켓몬이 부화" - }, - "HATCH_SHINY": { - "name": "빛나는 알", - "description": "알에서 색이 다른 포켓몬이 부화" - }, - "HIDDEN_ABILITY": { - "name": "숨은 잠재력", - "description": "숨겨진 특성을 지닌 포켓몬을 포획" - }, - "PERFECT_IVS": { - "name": "진짜배기 증명서", - "description": "최고의 개체값을 지닌 포켓몬 획득" - }, - "CLASSIC_VICTORY": { - "name": "무패", - "description": "클래식 모드 클리어" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "우리집 꿈나무", - "description": "최종 진화형이 아닌 포켓몬을 데리고 클래식 모드 클리어." - }, - "MONO_GEN_ONE": { - "name": "근본 라이벌", - "description": "1세대 챌린지 모드 클리어." - }, - "MONO_GEN_TWO": { - "name": "이거 1.5세대죠?", - "description": "2세대 챌린지 모드 클리어." - }, - "MONO_GEN_THREE": { - "name": "Too much water?", - "description": "3세대 챌린지 모드 클리어." - }, - "MONO_GEN_FOUR": { - "name": "난천이 진짜 최강인가요?", - "description": "4세대 챌린지 모드 클리어." - }, - "MONO_GEN_FIVE": { - "name": "100% 오리지널!", - "description": "5세대 챌린지 모드 클리어." - }, - "MONO_GEN_SIX": { - "name": "크루아상 안에 뭐 들었나요?", - "description": "6세대 챌린지 모드 클리어." - }, - "MONO_GEN_SEVEN": { - "name": "기술적으로는…", - "description": "7세대 챌린지 모드 클리어." - }, - "MONO_GEN_EIGHT": { - "name": "챔피언 타임!", - "description": "8세대 챌린지 모드 클리어." - }, - "MONO_GEN_NINE": { - "name": "걔, 봐 준 거야", - "description": "9세대 챌린지 모드 클리어." - }, - "MonoType": { - "description": "{{type}} 타입 챌린지 모드 클리어." - }, - "MONO_NORMAL": { - "name": "심플한 것이 가장 강한 것" - }, - "MONO_FIGHTING": { - "name": "태권도 할 줄 알아요" - }, - "MONO_FLYING": { - "name": "추락하는 것은 날개가 있다" - }, - "MONO_POISON": { - "name": "관동 지방 최애 타입" - }, - "MONO_GROUND": { - "name": "전기 안 통해요" - }, - "MONO_ROCK": { - "name": "웅골참" - }, - "MONO_BUG": { - "name": "독침붕처럼 쏴라" - }, - "MONO_GHOST": { - "name": "누굴 부를 거야?" - }, - "MONO_STEEL": { - "name": "강철 심장" - }, - "MONO_FIRE": { - "name": "불타오르네" - }, - "MONO_WATER": { - "name": "물 들어올 때 노 젓기" - }, - "MONO_GRASS": { - "name": "초록은 동색" - }, - "MONO_ELECTRIC": { - "name": "찌릿찌릿" - }, - "MONO_PSYCHIC": { - "name": "1세대 최강" - }, - "MONO_ICE": { - "name": "얼음땡" - }, - "MONO_DRAGON": { - "name": "용용 죽겠지" - }, - "MONO_DARK": { - "name": "어둠의 다크" - }, - "MONO_FAIRY": { - "name": "설마 자시안으로?" - }, - "FRESH_START": { - "name": "첫트!", - "description": "새 출발 챌린지 모드 클리어." - } -} \ No newline at end of file diff --git a/src/locales/ko/achv-female.json b/src/locales/ko/achv.json similarity index 100% rename from src/locales/ko/achv-female.json rename to src/locales/ko/achv.json diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index b5b34cea0ae..392f2f72053 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const koConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/pt_BR/achv-female.json b/src/locales/pt_BR/achv-female.json deleted file mode 100644 index e81cba6f9ca..00000000000 --- a/src/locales/pt_BR/achv-female.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "Achievements": { - "name": "Conquistas" - }, - "Locked": { - "name": "Não conquistado" - }, - "MoneyAchv": { - "description": "Acumule um total de ₽{{moneyAmount}}" - }, - "10K_MONEY": { - "name": "Chuva de Dinheiro" - }, - "100K_MONEY": { - "name": "Tô Rica!" - }, - "1M_MONEY": { - "name": "Quem Quer Ser Um Milionário?" - }, - "10M_MONEY": { - "name": "Tio Patinhas" - }, - "DamageAchv": { - "description": "Inflija {{damageAmount}} de dano em um único golpe" - }, - "250_DMG": { - "name": "Essa Doeu!" - }, - "1000_DMG": { - "name": "Essa Doeu Mais!" - }, - "2500_DMG": { - "name": "Essa Doeu Muito!" - }, - "10000_DMG": { - "name": "Essa Doeu Pra Caramba!" - }, - "HealAchv": { - "description": "Cure {{healAmount}} {{HP}} de uma vez só com um movimento, habilidade ou item segurado" - }, - "250_HEAL": { - "name": "Residente" - }, - "1000_HEAL": { - "name": "Enfermeira" - }, - "2500_HEAL": { - "name": "Médica" - }, - "10000_HEAL": { - "name": "Médica de Plantão" - }, - "LevelAchv": { - "description": "Aumente o nível de um Pokémon para o Nv{{level}}" - }, - "LV_100": { - "name": "Calma Que Tem Mais!" - }, - "LV_250": { - "name": "Treinadora de Elite" - }, - "LV_1000": { - "name": "Ao Infinito e Além!" - }, - "RibbonAchv": { - "description": "Acumule um total de {{ribbonAmount}} Fitas" - }, - "10_RIBBONS": { - "name": "Fita de Bronze" - }, - "25_RIBBONS": { - "name": "Fita de Prata" - }, - "50_RIBBONS": { - "name": "Fita de Ouro" - }, - "75_RIBBONS": { - "name": "Fita de Platina" - }, - "100_RIBBONS": { - "name": "Fita de Diamante" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "Trabalho em Equipe", - "description": "Use Baton Pass com pelo menos um atributo aumentado ao máximo" - }, - "MAX_FRIENDSHIP": { - "name": "Melhores Amigos", - "description": "Alcance a amizade máxima com um Pokémon" - }, - "MEGA_EVOLVE": { - "name": "Megamorfose", - "description": "Megaevolua um Pokémon" - }, - "GIGANTAMAX": { - "name": "Ficou Gigante!", - "description": "Gigantamax um Pokémon" - }, - "TERASTALLIZE": { - "name": "Terastalização", - "description": "Terastalize um Pokémon" - }, - "STELLAR_TERASTALLIZE": { - "name": "Estrela Cadente", - "description": "Terastalize um Pokémon para o tipo Estelar" - }, - "SPLICE": { - "name": "Fusão!", - "description": "Funda dois Pokémon com um Splicer de DNA" - }, - "MINI_BLACK_HOLE": { - "name": "Buraco Sem Fundo", - "description": "Adquira um Mini Buraco Negro" - }, - "CATCH_MYTHICAL": { - "name": "Mítico", - "description": "Capture um Pokémon Mítico" - }, - "CATCH_SUB_LEGENDARY": { - "name": "Quase Lendário", - "description": "Capture um Pokémon Semi-Lendário" - }, - "CATCH_LEGENDARY": { - "name": "Lendário", - "description": "Capture um Pokémon Lendário" - }, - "SEE_SHINY": { - "name": "Ué, Tá Brilhando?", - "description": "Encontre um Pokémon Shiny selvagem" - }, - "SHINY_PARTY": { - "name": "Tá Todo Mundo Brilhando!", - "description": "Tenha uma equipe formada por 6 Pokémon Shiny" - }, - "HATCH_MYTHICAL": { - "name": "Ovo Mítico", - "description": "Choque um Pokémon Mítico" - }, - "HATCH_SUB_LEGENDARY": { - "name": "Ovo Semi-Lendário", - "description": "Choque um Pokémon Semi-Lendário" - }, - "HATCH_LEGENDARY": { - "name": "Ovo Lendário", - "description": "Choque um Pokémon Lendário" - }, - "HATCH_SHINY": { - "name": "Ovo Shiny", - "description": "Choque um Pokémon Shiny" - }, - "HIDDEN_ABILITY": { - "name": "Potencial Oculto", - "description": "Capture um Pokémon com uma Habilidade Oculta" - }, - "PERFECT_IVS": { - "name": "Perfeição Certificada", - "description": "Obtenha IVs perfeitos em um Pokémon" - }, - "CLASSIC_VICTORY": { - "name": "Invencível", - "description": "Vença o jogo no modo clássico" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "Tire as Crianças da Sala", - "description": "Vença o jogo no Modo Clássico com pelo menos um membro da equipe não evoluído." - }, - "MONO_GEN_ONE": { - "name": "O Início de Tudo", - "description": "Complete o desafio da geração um." - }, - "MONO_GEN_TWO": { - "name": "Geração 1.5", - "description": "Complete o desafio da geração dois." - }, - "MONO_GEN_THREE": { - "name": "Será que tem muita água?", - "description": "Complete o desafio da geração três." - }, - "MONO_GEN_FOUR": { - "name": "Essa foi a mais difícil?", - "description": "Complete o desafio da geração quatro." - }, - "MONO_GEN_FIVE": { - "name": "Nada original", - "description": "Complete o desafio da geração cinco." - }, - "MONO_GEN_SIX": { - "name": "Esse croissant tem recheio?", - "description": "Complete o desafio da geração seis." - }, - "MONO_GEN_SEVEN": { - "name": "Z-Move ou Se vira nos 30?", - "description": "Complete o desafio da geração sete." - }, - "MONO_GEN_EIGHT": { - "name": "Finalmente ele ganhou!", - "description": "Complete o desafio da geração oito." - }, - "MONO_GEN_NINE": { - "name": "Isso aqui tá muito fácil!", - "description": "Complete o desafio da geração nove." - }, - "MonoType": { - "description": "Complete o desafio de monotipo {{type}}." - }, - "MONO_NORMAL": { - "name": "Extra Ordinário" - }, - "MONO_FIGHTING": { - "name": "Briga de Rua" - }, - "MONO_FLYING": { - "name": "Rinha de Pidgeys" - }, - "MONO_POISON": { - "name": "Menina Veneno" - }, - "MONO_GROUND": { - "name": "Comendo Poeira" - }, - "MONO_ROCK": { - "name": "...Tanto Bate Até Que Fura" - }, - "MONO_BUG": { - "name": "Vida de Inseto" - }, - "MONO_GHOST": { - "name": "Fantasminha Camarada" - }, - "MONO_STEEL": { - "name": "Levantando Ferro" - }, - "MONO_FIRE": { - "name": "Tá Pegando Fogo, Bicho!" - }, - "MONO_WATER": { - "name": "Água Mole em Pedra Dura..." - }, - "MONO_GRASS": { - "name": "Jardim Botânico" - }, - "MONO_ELECTRIC": { - "name": "Choque de Realidade" - }, - "MONO_PSYCHIC": { - "name": "Preciso de Terapia" - }, - "MONO_ICE": { - "name": "Era do Gelo" - }, - "MONO_DRAGON": { - "name": "Caverna do Dragão" - }, - "MONO_DARK": { - "name": "É Só Uma Fase" - }, - "MONO_FAIRY": { - "name": "Clube das Winx" - }, - "FRESH_START": { - "name": "De Primeira!", - "description": "Complete o desafio de novo começo." - } -} \ No newline at end of file diff --git a/src/locales/pt_BR/achv-male.json b/src/locales/pt_BR/achv.json similarity index 95% rename from src/locales/pt_BR/achv-male.json rename to src/locales/pt_BR/achv.json index 428dd5c633b..aee3dd48cc5 100644 --- a/src/locales/pt_BR/achv-male.json +++ b/src/locales/pt_BR/achv.json @@ -42,13 +42,16 @@ "name": "Residente" }, "1000_HEAL": { - "name": "Enfermeiro" + "name": "Enfermeiro", + "name_female": "Enfermeira" }, "2500_HEAL": { - "name": "Médico" + "name": "Médico", + "name_female": "Médica" }, "10000_HEAL": { - "name": "Médico de Plantão" + "name": "Médico de Plantão", + "name_female": "Médica de Plantão" }, "LevelAchv": { "description": "Aumente o nível de um Pokémon para o Nv{{level}}" @@ -57,7 +60,8 @@ "name": "Calma Que Tem Mais!" }, "LV_250": { - "name": "Treinador de Elite" + "name": "Treinador de Elite", + "name_female": "Treinadora de Elite" }, "LV_1000": { "name": "Ao Infinito e Além!" diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index 9cc8fe313a2..9d7dee178b6 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const ptBrConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/zh_CN/achv-male.json b/src/locales/zh_CN/achv-male.json deleted file mode 100644 index 103a9bb41b5..00000000000 --- a/src/locales/zh_CN/achv-male.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "Achievements": { - "name": "成就" - }, - "Locked": { - "name": "未解锁" - }, - - "MoneyAchv": { - "description": "累计获得 ₽{{moneyAmount}}" - }, - "10K_MONEY": { - "name": "小有积蓄" - }, - "100K_MONEY": { - "name": "大户人家" - }, - "1M_MONEY": { - "name": "百万富翁" - }, - "10M_MONEY": { - "name": "暴发户" - }, - - "DamageAchv": { - "description": "在单次攻击中造成 {{damageAmount}} 点伤害" - }, - "250_DMG": { - "name": "重拳出击" - }, - "1000_DMG": { - "name": "神拳猛击" - }, - "2500_DMG": { - "name": "夺少?" - }, - "10000_DMG": { - "name": "一拳超人" - }, - - "HealAchv": { - "description": "通过技能、能力或携带的道具一次性治疗 {{healAmount}} {{HP}}点" - }, - "250_HEAL": { - "name": "新手奶妈" - }, - "1000_HEAL": { - "name": "治疗担当" - }, - "2500_HEAL": { - "name": "牧师" - }, - "10000_HEAL": { - "name": "泉水" - }, - - "LevelAchv": { - "description": "将一只宝可梦提升到 Lv{{level}}" - }, - "LV_100": { - "name": "别急,后面还有" - }, - "LV_250": { - "name": "精英" - }, - "LV_1000": { - "name": "天外有天" - }, - - "RibbonAchv": { - "description": "累计获得 {{ribbonAmount}} 个勋章" - }, - "10_RIBBONS": { - "name": "宝可梦联盟冠军" - }, - "25_RIBBONS": { - "name": "超级球联盟冠军" - }, - "50_RIBBONS": { - "name": "高级球联盟冠军" - }, - "75_RIBBONS": { - "name": "肉鸽球联盟冠军" - }, - "100_RIBBONS": { - "name": "大师球联盟冠军" - }, - - "TRANSFER_MAX_BATTLE_STAT": { - "name": "团队协作", - "description": "在一项属性强化至最大时用接力棒传递给其他宝可梦" - }, - "MAX_FRIENDSHIP": { - "name": "亲密无间", - "description": "使一只宝可梦的亲密度达到最大值" - }, - "MEGA_EVOLVE": { - "name": "大变身", - "description": "超级进化一只宝可梦" - }, - "GIGANTAMAX": { - "name": "这位更是重量级", - "description": "极巨化一只宝可梦" - }, - "TERASTALLIZE": { - "name": "本系爱好者", - "description": "太晶化一只宝可梦" - }, - "STELLAR_TERASTALLIZE": { - "name": "隐藏属性", - "description": "星晶化一只宝可梦" - }, - "SPLICE": { - "name": "无限融合", - "description": "使用基因之楔将两只宝可梦融合在一起" - }, - "MINI_BLACK_HOLE": { - "name": "一大洞的道具", - "description": "获得一个迷你黑洞" - }, - "CATCH_MYTHICAL": { - "name": "神秘礼物", - "description": "捕捉一只幻之宝可梦" - }, - "CATCH_SUB_LEGENDARY": { - "name": "二级传说", - "description": "捕捉一只二级传说宝可梦" - }, - "CATCH_LEGENDARY": { - "name": "传说", - "description": "捕捉一只传说宝可梦" - }, - "SEE_SHINY": { - "name": "闪耀夺目", - "description": "在野外找到一只闪光宝可梦" - }, - "SHINY_PARTY": { - "name": "呕心沥血", - "description": "拥有一支由闪光宝可梦组成的满员队伍" - }, - "HATCH_MYTHICAL": { - "name": "幻兽蛋", - "description": "从蛋中孵化出一只幻之宝可梦" - }, - "HATCH_SUB_LEGENDARY": { - "name": "二级传说蛋", - "description": "从蛋中孵化出一只二级传说宝可梦" - }, - "HATCH_LEGENDARY": { - "name": "传说蛋", - "description": "从蛋中孵化出一只传说宝可梦" - }, - "HATCH_SHINY": { - "name": "金色传说!", - "description": "从蛋中孵化出一只闪光宝可梦" - }, - "HIDDEN_ABILITY": { - "name": "隐藏实力", - "description": "捕捉一只拥有隐藏特性的宝可梦" - }, - "PERFECT_IVS": { - "name": "合格证", - "description": "获得一只拥有完美个体值的宝可梦" - }, - "CLASSIC_VICTORY": { - "name": "战无不胜", - "description": "在经典模式中通关游戏" - }, - "UNEVOLVED_CLASSIC_VICTORY": { - "name": "带孩子来上班", - "description": "通关经典模式时队伍中至少有一名未进化的宝可梦" - }, - - "MONO_GEN_ONE": { - "name": "最初的劲敌", - "description": "完成仅限第一世代的挑战" - }, - "MONO_GEN_TWO": { - "name": "1.5世代", - "description": "完成仅限第二世代的挑战" - }, - "MONO_GEN_THREE": { - "name": "“水太多了”", - "description": "完成仅限第三世代的挑战" - }, - "MONO_GEN_FOUR": { - "name": "她真是最强冠军吗?", - "description": "完成仅限第四世代的挑战" - }, - "MONO_GEN_FIVE": { - "name": "完全原创", - "description": "完成仅限第五世代的挑战" - }, - "MONO_GEN_SIX": { - "name": "女大公", - "description": "完成仅限第六世代的挑战" - }, - "MONO_GEN_SEVEN": { - "name": "首届冠军", - "description": "完成仅限第七世代的挑战" - }, - "MONO_GEN_EIGHT": { - "name": "冠军时刻!", - "description": "完成仅限第八世代的挑战" - }, - "MONO_GEN_NINE": { - "name": "她又放水了", - "description": "完成仅限第九世代的挑战" - }, - - "MonoType": { - "description": "完成 {{type}} 单属性挑战" - }, - "MONO_NORMAL": { - "name": "异乎寻常的寻常" - }, - "MONO_FIGHTING": { - "name": "我有真功夫" - }, - "MONO_FLYING": { - "name": "愤怒的小鸟" - }, - "MONO_POISON": { - "name": "关都地区特色" - }, - "MONO_GROUND": { - "name": "地震预报" - }, - "MONO_ROCK": { - "name": "坚如磐石" - }, - "MONO_BUG": { - "name": "音箱蟀侠" - }, - "MONO_GHOST": { - "name": "捉鬼敢死队" - }, - "MONO_STEEL": { - "name": "铁巨人" - }, - "MONO_FIRE": { - "name": "搓火球解决一切" - }, - "MONO_WATER": { - "name": "当雨来临,倾盆而下" - }, - "MONO_GRASS": { - "name": "别踏这个青" - }, - "MONO_ELECTRIC": { - "name": "瞄准大岩蛇的角!" - }, - "MONO_PSYCHIC": { - "name": "脑洞大开" - }, - "MONO_ICE": { - "name": "如履薄冰" - }, - "MONO_DRAGON": { - "name": "准神俱乐部" - }, - "MONO_DARK": { - "name": "总有叛逆期" - }, - "MONO_FAIRY": { - "name": "林克,醒醒!" - }, - "FRESH_START": { - "name": "初次尝试!", - "description": "完成初次尝试挑战" - } -} diff --git a/src/locales/zh_CN/achv-female.json b/src/locales/zh_CN/achv.json similarity index 100% rename from src/locales/zh_CN/achv-female.json rename to src/locales/zh_CN/achv.json diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 7c29262ac1a..021e14d9727 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const zhCnConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/locales/zh_TW/achv-male.json b/src/locales/zh_TW/achv-male.json deleted file mode 100644 index dcd6f26ae82..00000000000 --- a/src/locales/zh_TW/achv-male.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "Achievements": { - "name": "成就" - }, - "Locked": { - "name": "未解鎖" - }, - "MoneyAchv": { - "description": "累計獲得 ₽{{moneyAmount}}" - }, - "10K_MONEY": { - "name": "小有積蓄" - }, - "100K_MONEY": { - "name": "大戶人家" - }, - "1M_MONEY": { - "name": "百萬富翁" - }, - "10M_MONEY": { - "name": "暴發戶" - }, - "DamageAchv": { - "description": "在單次攻擊中造成 {{damageAmount}} 點傷害" - }, - "250_DMG": { - "name": "重拳出擊" - }, - "1000_DMG": { - "name": "神拳猛擊" - }, - "2500_DMG": { - "name": "奪少?" - }, - "10000_DMG": { - "name": "一拳超人" - }, - "HealAchv": { - "description": "通過技能、能力或攜帶的道具一次性治療 {{healAmount}} {{HP}}點" - }, - "250_HEAL": { - "name": "新手奶媽" - }, - "1000_HEAL": { - "name": "治療擔當" - }, - "2500_HEAL": { - "name": "牧師" - }, - "10000_HEAL": { - "name": "泉水" - }, - "LevelAchv": { - "description": "將一隻寶可夢提升到 Lv{{level}}" - }, - "LV_100": { - "name": "别急,後面還有" - }, - "LV_250": { - "name": "精英" - }, - "LV_1000": { - "name": "天外有天" - }, - "RibbonAchv": { - "description": "累計獲得 {{ribbonAmount}} 個勛章" - }, - "10_RIBBONS": { - "name": "寶可夢聯盟冠軍" - }, - "25_RIBBONS": { - "name": "超級球聯盟冠軍" - }, - "50_RIBBONS": { - "name": "高級球聯盟冠軍" - }, - "75_RIBBONS": { - "name": "肉鴿球聯盟冠軍" - }, - "100_RIBBONS": { - "name": "大師球聯盟冠軍" - }, - "TRANSFER_MAX_BATTLE_STAT": { - "name": "團隊協作", - "description": "在一項屬性強化至最大時用接力棒傳遞給其他寶可夢" - }, - "MAX_FRIENDSHIP": { - "name": "親密無間", - "description": "使一隻寶可夢的親密度達到最大值" - }, - "MEGA_EVOLVE": { - "name": "大變身", - "description": "超級進化一隻寶可夢" - }, - "GIGANTAMAX": { - "name": "這位更是重量級", - "description": "極巨化一隻寶可夢" - }, - "TERASTALLIZE": { - "name": "本系愛好者", - "description": "太晶化一隻寶可夢" - }, - "STELLAR_TERASTALLIZE": { - "name": "隱藏屬性", - "description": "星晶化一隻寶可夢" - }, - "SPLICE": { - "name": "無限融合", - "description": "使用基因之楔將兩隻寶可夢融合在一起" - }, - "MINI_BLACK_HOLE": { - "name": "一大洞的道具", - "description": "獲得一個迷你黑洞" - }, - "CATCH_MYTHICAL": { - "name": "神秘禮物", - "description": "捕捉一隻幻之寶可夢" - }, - "CATCH_SUB_LEGENDARY": { - "name": "二級傳說", - "description": "捕捉一隻準傳說寶可夢" - }, - "CATCH_LEGENDARY": { - "name": "傳說", - "description": "捕捉一隻傳說寶可夢" - }, - "SEE_SHINY": { - "name": "閃耀奪目", - "description": "在野外找到一隻閃光寶可夢" - }, - "SHINY_PARTY": { - "name": "嘔心瀝血", - "description": "擁有一支由閃光寶可夢組成的滿員隊伍" - }, - "HATCH_MYTHICAL": { - "name": "幻獸蛋", - "description": "從蛋中孵化出一隻幻之寶可夢" - }, - "HATCH_SUB_LEGENDARY": { - "name": "二級傳說蛋", - "description": "從蛋中孵化出一隻準傳說寶可夢" - }, - "HATCH_LEGENDARY": { - "name": "傳說蛋", - "description": "從蛋中孵化出一隻傳說寶可夢" - }, - "HATCH_SHINY": { - "name": "金色傳說!", - "description": "從蛋中孵化出一隻閃光寶可夢" - }, - "HIDDEN_ABILITY": { - "name": "隱藏實力", - "description": "捕捉一隻擁有隱藏特性的寶可夢" - }, - "PERFECT_IVS": { - "name": "合格證", - "description": "獲得一隻擁有完美個體值的寶可夢" - }, - "CLASSIC_VICTORY": { - "name": "戰無不勝", - "description": "在經典模式中通關遊戲" - }, - "MONO_GEN_ONE": { - "name": "最初的勁敵", - "description": "完成僅限第一世代的挑戰." - }, - "MONO_GEN_TWO": { - "name": "1.5世代", - "description": "完成僅限第二世代的挑戰." - }, - "MONO_GEN_THREE": { - "name": "“水太多了”", - "description": "完成僅限第三世代的挑戰." - }, - "MONO_GEN_FOUR": { - "name": "她真是最強冠軍嗎?", - "description": "完成僅限第四世代的挑戰." - }, - "MONO_GEN_FIVE": { - "name": "完全原創", - "description": "完成僅限第五世代的挑戰." - }, - "MONO_GEN_SIX": { - "name": "女大公", - "description": "完成僅限第六世代的挑戰." - }, - "MONO_GEN_SEVEN": { - "name": "首屆冠軍", - "description": "完成僅限第七世代的挑戰." - }, - "MONO_GEN_EIGHT": { - "name": "冠軍時刻!", - "description": "完成僅限第八世代的挑戰." - }, - "MONO_GEN_NINE": { - "name": "她又放水了", - "description": "完成僅限第九世代的挑戰." - }, - "MonoType": { - "description": "完成 {{type}} 單屬性挑戰." - }, - "MONO_NORMAL": { - "name": "異乎尋常的尋常" - }, - "MONO_FIGHTING": { - "name": "我有真功夫" - }, - "MONO_FLYING": { - "name": "憤怒的小鳥" - }, - "MONO_POISON": { - "name": "關都地區特色" - }, - "MONO_GROUND": { - "name": "地震預報" - }, - "MONO_ROCK": { - "name": "堅如磐石" - }, - "MONO_BUG": { - "name": "音箱蟀俠" - }, - "MONO_GHOST": { - "name": "捉鬼敢死隊" - }, - "MONO_STEEL": { - "name": "鐵巨人" - }, - "MONO_FIRE": { - "name": "搓火球解決一切" - }, - "MONO_WATER": { - "name": "當雨來臨,傾盆而下" - }, - "MONO_GRASS": { - "name": "別踏這個青" - }, - "MONO_ELECTRIC": { - "name": "瞄準大岩蛇的角!" - }, - "MONO_PSYCHIC": { - "name": "腦洞大開" - }, - "MONO_ICE": { - "name": "如履薄冰" - }, - "MONO_DRAGON": { - "name": "準神俱樂部" - }, - "MONO_DARK": { - "name": "總有叛逆期" - }, - "MONO_FAIRY": { - "name": "林克,醒醒!" - } -} \ No newline at end of file diff --git a/src/locales/zh_TW/achv-female.json b/src/locales/zh_TW/achv.json similarity index 100% rename from src/locales/zh_TW/achv-female.json rename to src/locales/zh_TW/achv.json diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index 8d9fb7f4a37..1e7ab421092 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -4,8 +4,7 @@ import ability from "./ability.json"; import abilityTriggers from "./ability-trigger.json"; import arenaFlyout from "./arena-flyout.json"; import arenaTag from "./arena-tag.json"; -import achvMale from "./achv-male.json"; -import achvFemale from "./achv-female.json"; +import achv from "./achv.json"; import battle from "./battle.json"; import battleScene from "./battle-scene.json"; import battleInfo from "./battle-info.json"; @@ -76,8 +75,7 @@ export const zhTwConfig = { challenges, commandUiHandler, common, - PGMachv: achvMale, - PGFachv: achvFemale, + achv, PGMdialogue: dialogueMale, PGFdialogue: dialogueFemale, PGMbattleSpecDialogue: dialogueEndbossMale, diff --git a/src/system/achv.ts b/src/system/achv.ts index 62772758f61..0f9bc5ac6de 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -5,7 +5,6 @@ import { pokemonEvolutions } from "#app/data/pokemon-evolutions"; import i18next from "i18next"; import * as Utils from "../utils"; import { PlayerGender } from "#enums/player-gender"; -import { ParseKeys } from "i18next"; import { Challenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge } from "#app/data/challenge.js"; import { ConditionFn } from "#app/@types/common.js"; @@ -42,13 +41,13 @@ export class Achv { /** * Get the name of the achievement based on the gender of the player - * @param playerGender - the gender of the player + * @param playerGender - the gender of the player (default: {@linkcode PlayerGender.UNSET}) * @returns the name of the achievement localized for the player gender */ - getName(playerGender: PlayerGender): string { - const prefix = playerGender === PlayerGender.FEMALE ?"PGF" : "PGM"; + getName(playerGender: PlayerGender = PlayerGender.UNSET): string { + const genderStr = PlayerGender[playerGender].toLowerCase(); // Localization key is used to get the name of the achievement - return i18next.t(`${prefix}achv:${this.localizationKey}.name` as ParseKeys); + return i18next.t(`achv:${this.localizationKey}.name`, { context: genderStr }); } getDescription(): string { @@ -151,116 +150,110 @@ export class ChallengeAchv extends Achv { */ export function getAchievementDescription(localizationKey: string): string { // We need to get the player gender from the game data to add the correct prefix to the achievement name - let playerGender = PlayerGender.MALE; - if (this?.scene) { - playerGender = this.scene.gameData.gender; - } - let genderPrefix = "PGM"; - if (playerGender === PlayerGender.FEMALE) { - genderPrefix = "PGF"; - } + const genderIndex = this?.scene?.gameData?.gender ?? PlayerGender.MALE; //TODO: why is `this` being used here!? We are not inside a scope (copied from original) + const genderStr = PlayerGender[genderIndex].toLowerCase(); switch (localizationKey) { case "10K_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._10K_MONEY.moneyAmount.toLocaleString("en-US")}); case "100K_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._100K_MONEY.moneyAmount.toLocaleString("en-US")}); case "1M_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._1M_MONEY.moneyAmount.toLocaleString("en-US")}); case "10M_MONEY": - return i18next.t(`${genderPrefix}achv:MoneyAchv.description` as ParseKeys, {"moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US")}); + return i18next.t("achv:MoneyAchv.description", {context: genderStr, "moneyAmount": achvs._10M_MONEY.moneyAmount.toLocaleString("en-US")}); case "250_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._250_DMG.damageAmount.toLocaleString("en-US")}); case "1000_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._1000_DMG.damageAmount.toLocaleString("en-US")}); case "2500_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._2500_DMG.damageAmount.toLocaleString("en-US")}); case "10000_DMG": - return i18next.t(`${genderPrefix}achv:DamageAchv.description` as ParseKeys, {"damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US")}); + return i18next.t("achv:DamageAchv.description", {context: genderStr, "damageAmount": achvs._10000_DMG.damageAmount.toLocaleString("en-US")}); case "250_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._250_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "1000_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._1000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "2500_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._2500_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "10000_HEAL": - return i18next.t(`${genderPrefix}achv:HealAchv.description` as ParseKeys, {"healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); + return i18next.t("achv:HealAchv.description", {context: genderStr, "healAmount": achvs._10000_HEAL.healAmount.toLocaleString("en-US"), "HP": i18next.t("pokemonInfo:Stat.HPshortened")}); case "LV_100": - return i18next.t(`${genderPrefix}achv:LevelAchv.description` as ParseKeys, {"level": achvs.LV_100.level}); + return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_100.level}); case "LV_250": - return i18next.t(`${genderPrefix}achv:LevelAchv.description` as ParseKeys, {"level": achvs.LV_250.level}); + return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_250.level}); case "LV_1000": - return i18next.t(`${genderPrefix}achv:LevelAchv.description` as ParseKeys, {"level": achvs.LV_1000.level}); + return i18next.t("achv:LevelAchv.description", {context: genderStr, "level": achvs.LV_1000.level}); case "10_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._10_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "25_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._25_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "50_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._50_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "75_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._75_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "100_RIBBONS": - return i18next.t(`${genderPrefix}achv:RibbonAchv.description` as ParseKeys, {"ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); + return i18next.t("achv:RibbonAchv.description", {context: genderStr, "ribbonAmount": achvs._100_RIBBONS.ribbonAmount.toLocaleString("en-US")}); case "TRANSFER_MAX_BATTLE_STAT": - return i18next.t(`${genderPrefix}achv:TRANSFER_MAX_BATTLE_STAT.description` as ParseKeys); + return i18next.t("achv:TRANSFER_MAX_BATTLE_STAT.description", { context: genderStr }); case "MAX_FRIENDSHIP": - return i18next.t(`${genderPrefix}achv:MAX_FRIENDSHIP.description` as ParseKeys); + return i18next.t("achv:MAX_FRIENDSHIP.description", { context: genderStr }); case "MEGA_EVOLVE": - return i18next.t(`${genderPrefix}achv:MEGA_EVOLVE.description` as ParseKeys); + return i18next.t("achv:MEGA_EVOLVE.description", { context: genderStr }); case "GIGANTAMAX": - return i18next.t(`${genderPrefix}achv:GIGANTAMAX.description` as ParseKeys); + return i18next.t("achv:GIGANTAMAX.description", { context: genderStr }); case "TERASTALLIZE": - return i18next.t(`${genderPrefix}achv:TERASTALLIZE.description` as ParseKeys); + return i18next.t("achv:TERASTALLIZE.description", { context: genderStr }); case "STELLAR_TERASTALLIZE": - return i18next.t(`${genderPrefix}achv:STELLAR_TERASTALLIZE.description` as ParseKeys); + return i18next.t("achv:STELLAR_TERASTALLIZE.description", { context: genderStr }); case "SPLICE": - return i18next.t(`${genderPrefix}achv:SPLICE.description` as ParseKeys); + return i18next.t("achv:SPLICE.description", { context: genderStr }); case "MINI_BLACK_HOLE": - return i18next.t(`${genderPrefix}achv:MINI_BLACK_HOLE.description` as ParseKeys); + return i18next.t("achv:MINI_BLACK_HOLE.description", { context: genderStr }); case "CATCH_MYTHICAL": - return i18next.t(`${genderPrefix}achv:CATCH_MYTHICAL.description` as ParseKeys); + return i18next.t("achv:CATCH_MYTHICAL.description", { context: genderStr }); case "CATCH_SUB_LEGENDARY": - return i18next.t(`${genderPrefix}achv:CATCH_SUB_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:CATCH_SUB_LEGENDARY.description", { context: genderStr }); case "CATCH_LEGENDARY": - return i18next.t(`${genderPrefix}achv:CATCH_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:CATCH_LEGENDARY.description", { context: genderStr }); case "SEE_SHINY": - return i18next.t(`${genderPrefix}achv:SEE_SHINY.description` as ParseKeys); + return i18next.t("achv:SEE_SHINY.description", { context: genderStr }); case "SHINY_PARTY": - return i18next.t(`${genderPrefix}achv:SHINY_PARTY.description` as ParseKeys); + return i18next.t("achv:SHINY_PARTY.description", { context: genderStr }); case "HATCH_MYTHICAL": - return i18next.t(`${genderPrefix}achv:HATCH_MYTHICAL.description` as ParseKeys); + return i18next.t("achv:HATCH_MYTHICAL.description", { context: genderStr }); case "HATCH_SUB_LEGENDARY": - return i18next.t(`${genderPrefix}achv:HATCH_SUB_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:HATCH_SUB_LEGENDARY.description", { context: genderStr }); case "HATCH_LEGENDARY": - return i18next.t(`${genderPrefix}achv:HATCH_LEGENDARY.description` as ParseKeys); + return i18next.t("achv:HATCH_LEGENDARY.description", { context: genderStr }); case "HATCH_SHINY": - return i18next.t(`${genderPrefix}achv:HATCH_SHINY.description` as ParseKeys); + return i18next.t("achv:HATCH_SHINY.description", { context: genderStr }); case "HIDDEN_ABILITY": - return i18next.t(`${genderPrefix}achv:HIDDEN_ABILITY.description` as ParseKeys); + return i18next.t("achv:HIDDEN_ABILITY.description", { context: genderStr }); case "PERFECT_IVS": - return i18next.t(`${genderPrefix}achv:PERFECT_IVS.description` as ParseKeys); + return i18next.t("achv:PERFECT_IVS.description", { context: genderStr }); case "CLASSIC_VICTORY": - return i18next.t(`${genderPrefix}achv:CLASSIC_VICTORY.description` as ParseKeys); + return i18next.t("achv:CLASSIC_VICTORY.description", { context: genderStr }); case "UNEVOLVED_CLASSIC_VICTORY": - return i18next.t(`${genderPrefix}achv:UNEVOLVED_CLASSIC_VICTORY.description` as ParseKeys); + return i18next.t("achv:UNEVOLVED_CLASSIC_VICTORY.description", { context: genderStr }); case "MONO_GEN_ONE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_ONE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_ONE.description", { context: genderStr }); case "MONO_GEN_TWO": - return i18next.t(`${genderPrefix}achv:MONO_GEN_TWO.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_TWO.description", { context: genderStr }); case "MONO_GEN_THREE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_THREE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_THREE.description", { context: genderStr }); case "MONO_GEN_FOUR": - return i18next.t(`${genderPrefix}achv:MONO_GEN_FOUR.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_FOUR.description", { context: genderStr }); case "MONO_GEN_FIVE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_FIVE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_FIVE.description", { context: genderStr }); case "MONO_GEN_SIX": - return i18next.t(`${genderPrefix}achv:MONO_GEN_SIX.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_SIX.description", { context: genderStr }); case "MONO_GEN_SEVEN": - return i18next.t(`${genderPrefix}achv:MONO_GEN_SEVEN.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_SEVEN.description", { context: genderStr }); case "MONO_GEN_EIGHT": - return i18next.t(`${genderPrefix}achv:MONO_GEN_EIGHT.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_EIGHT.description", { context: genderStr }); case "MONO_GEN_NINE": - return i18next.t(`${genderPrefix}achv:MONO_GEN_NINE.description` as ParseKeys); + return i18next.t("achv:MONO_GEN_NINE.description", { context: genderStr }); case "MONO_NORMAL": case "MONO_FIGHTING": case "MONO_FLYING": @@ -279,9 +272,9 @@ export function getAchievementDescription(localizationKey: string): string { case "MONO_DRAGON": case "MONO_DARK": case "MONO_FAIRY": - return i18next.t(`${genderPrefix}achv:MonoType.description` as ParseKeys, {"type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`)}); + return i18next.t("achv:MonoType.description", { context: genderStr, "type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`) }); case "FRESH_START": - return i18next.t(`${genderPrefix}achv:FRESH_START.description` as ParseKeys); + return i18next.t("achv:FRESH_START.description", { context: genderStr }); default: return ""; } diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts index c79eee63a7c..be89fdeb2af 100644 --- a/src/test/battle/battle.test.ts +++ b/src/test/battle/battle.test.ts @@ -43,6 +43,7 @@ describe("Test Battle Phase", () => { beforeEach(() => { game = new GameManager(phaserGame); + game.scene.gameData.gender = undefined!; // just for these tests! }); it("test phase interceptor with prompt", async () => { diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index d3c2652fcbe..6ade758fd6f 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -134,7 +134,7 @@ export default class GameManager { this.scene.expParty = ExpNotification.SKIP; this.scene.hpBarSpeed = 3; this.scene.enableTutorials = false; - this.scene.gameData.gender = PlayerGender.MALE; + this.scene.gameData.gender = PlayerGender.MALE; // set initial player gender } diff --git a/src/test/utils/helpers/settingsHelper.ts b/src/test/utils/helpers/settingsHelper.ts index dec9e160d51..76ffafdbe10 100644 --- a/src/test/utils/helpers/settingsHelper.ts +++ b/src/test/utils/helpers/settingsHelper.ts @@ -1,3 +1,4 @@ +import { PlayerGender } from "#app/enums/player-gender"; import { GameManagerHelper } from "./gameManagerHelper"; /** @@ -11,5 +12,19 @@ export class SettingsHelper extends GameManagerHelper { */ typeHints(enable: boolean) { this.game.scene.typeHints = enable; + this.log(`Type Hints ${enable? "enabled" : "disabled"}` ); + } + + /** + * Change the player gender + * @param gender the {@linkcode PlayerGender} to set + */ + playerGender(gender: PlayerGender) { + this.game.scene.gameData.gender = gender; + this.log(`Gender set to: ${PlayerGender[gender]} (=${gender})` ); + } + + private log(...params: any[]) { + console.log("Settings:", ...params); } } diff --git a/src/ui/achvs-ui-handler.ts b/src/ui/achvs-ui-handler.ts index a3e698c63ba..eb4316dc24b 100644 --- a/src/ui/achvs-ui-handler.ts +++ b/src/ui/achvs-ui-handler.ts @@ -7,7 +7,6 @@ import MessageUiHandler from "./message-ui-handler"; import { addTextObject, TextStyle } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import { ParseKeys } from "i18next"; import { PlayerGender } from "#enums/player-gender"; enum Page { @@ -83,13 +82,10 @@ export default class AchvsUiHandler extends MessageUiHandler { this.headerActionText.setPositionRelative(this.headerBg, 264, 8); // We need to get the player gender from the game data to add the correct prefix to the achievement name - const playerGender = this.scene.gameData.gender; - let genderPrefix = "PGM"; - if (playerGender === PlayerGender.FEMALE) { - genderPrefix = "PGF"; - } + const genderIndex = this.scene.gameData.gender ?? PlayerGender.MALE; + const genderStr = PlayerGender[genderIndex].toLowerCase(); - this.achvsName = i18next.t(`${genderPrefix}achv:Achievements.name` as ParseKeys); + this.achvsName = i18next.t("achv:Achievements.name", { context: genderStr }); this.vouchersName = i18next.t("voucher:vouchers"); this.iconsBg = addWindow(this.scene, 0, this.headerBg.height, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - this.headerBg.height - 68); @@ -189,13 +185,10 @@ export default class AchvsUiHandler extends MessageUiHandler { protected showAchv(achv: Achv) { // We need to get the player gender from the game data to add the correct prefix to the achievement name - const playerGender = this.scene.gameData.gender; - let genderPrefix = "PGM"; - if (playerGender === PlayerGender.FEMALE) { - genderPrefix = "PGF"; - } + const genderIndex = this.scene.gameData.gender ?? PlayerGender.MALE; + const genderStr = PlayerGender[genderIndex].toLowerCase(); - achv.name = i18next.t(`${genderPrefix}achv:${achv.localizationKey}.name` as ParseKeys); + achv.name = i18next.t(`achv:${achv.localizationKey}.name`, { context: genderStr }); achv.description = getAchievementDescription(achv.localizationKey); const achvUnlocks = this.scene.gameData.achvUnlocks; const unlocked = achvUnlocks.hasOwnProperty(achv.id); @@ -203,7 +196,7 @@ export default class AchvsUiHandler extends MessageUiHandler { this.titleText.setText(unlocked ? achv.name : "???"); this.showText(!hidden ? achv.description : ""); this.scoreText.setText(`${achv.score}pt`); - this.unlockText.setText(unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t(`${genderPrefix}achv:Locked.name` as ParseKeys)); + this.unlockText.setText(unlocked ? new Date(achvUnlocks[achv.id]).toLocaleDateString() : i18next.t("achv:Locked.name")); } protected showVoucher(voucher: Voucher) { From b7815625531f86957023773a5eacaa5e0902ef17 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Fri, 30 Aug 2024 02:16:51 +1000 Subject: [PATCH 08/10] Updated rival battle to have space between words again (#3893) Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --- src/locales/en/dialogue-female.json | 4 ++-- src/locales/en/dialogue-male.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/en/dialogue-female.json b/src/locales/en/dialogue-female.json index ca7f961e3a6..9cd2c9a76b2 100644 --- a/src/locales/en/dialogue-female.json +++ b/src/locales/en/dialogue-female.json @@ -2582,10 +2582,10 @@ }, "rival": { "encounter": { - "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?After all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" + "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" }, "victory": { - "1": "@c{shock}Wow… You cleaned me out.Are you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" + "1": "@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" } }, "rival_female": { diff --git a/src/locales/en/dialogue-male.json b/src/locales/en/dialogue-male.json index 166c047c4ff..24d2139d3f3 100644 --- a/src/locales/en/dialogue-male.json +++ b/src/locales/en/dialogue-male.json @@ -2582,10 +2582,10 @@ }, "rival": { "encounter": { - "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?After all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" + "1": "@c{smile}Hey, I was looking for you! I knew you were eager to get going but I expected at least a goodbye…$@c{smile_eclosed}So you're really pursuing your dream after all? I almost can't believe it.$@c{serious_smile_fists}Since we're here, how about a battle?\nAfter all, I want to make sure you're ready.$@c{serious_mopen_fists}Don't hold back, I want you to give me everything you've got!" }, "victory": { - "1": "@c{shock}Wow… You cleaned me out.Are you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" + "1": "@c{shock}Wow… You cleaned me out.\nAre you actually a beginner?$@c{smile}Maybe it was a bit of luck but…Who knows you might just be able to go all the way.$By the way, the professor asked me to give you these items. They look pretty cool.$@c{serious_smile_fists}Good luck out there!" } }, "rival_female": { From af918975a88ae6c9de04ff2b6915f12d7fbcceb2 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 29 Aug 2024 09:25:45 -0700 Subject: [PATCH 09/10] adapt gender context logic to run-history (#3881) --- src/locales/de/run-history.json | 24 ++++++++++++------------ src/locales/en/run-history.json | 24 ++++++++++++------------ src/locales/es/run-history.json | 24 ++++++++++++------------ src/locales/fr/run-history.json | 24 ++++++++++++------------ src/locales/it/run-history.json | 24 ++++++++++++------------ src/locales/ja/run-history.json | 14 +++++++------- src/locales/ko/run-history.json | 24 ++++++++++++------------ src/locales/pt_BR/run-history.json | 24 ++++++++++++------------ src/locales/zh_CN/run-history.json | 16 ++++++++-------- src/locales/zh_TW/run-history.json | 24 ++++++++++++------------ src/ui/run-history-ui-handler.ts | 9 +++++---- src/ui/run-info-ui-handler.ts | 19 ++++++++++++------- 12 files changed, 128 insertions(+), 122 deletions(-) diff --git a/src/locales/de/run-history.json b/src/locales/de/run-history.json index 77c8fcb6170..0a36afe9adc 100644 --- a/src/locales/de/run-history.json +++ b/src/locales/de/run-history.json @@ -1,15 +1,15 @@ { "victory": "Sieg!", - "defeatedWildM": "Besiegt durch ", - "defeatedTrainerM": "Besiegt durch ", - "defeatedTrainerDoubleM": "Besiegt durch Doppelkampf", - "defeatedRivalM": "Besiegt durch Rivalin", - "defeatedM": "Besiegt", - "defeatedWildF": "Besiegt durch ", - "defeatedTrainerF": "Besiegt durch ", - "defeatedTrainerDoubleF": "Besiegt durch Doppelkampf", - "defeatedRivalF": "Besiegt durch Rivale", - "defeatedF": "Besiegt", + "defeatedWild": "Besiegt durch ", + "defeatedTrainer": "Besiegt durch ", + "defeatedTrainerDouble": "Besiegt durch Doppelkampf", + "defeatedRival": "Besiegt durch Rivalin", + "defeated": "Besiegt", + "defeatedWild_female": "Besiegt durch ", + "defeatedTrainer_female": "Besiegt durch ", + "defeatedTrainerDouble_female": "Besiegt durch Doppelkampf", + "defeatedRival_female": "Besiegt durch Rivale", + "defeated_female": "Besiegt", "luck": "Glück", "score": "Punkte", "mode": "Modus", @@ -30,8 +30,8 @@ "money": "Geld", "runLength": "Durchlauf Dauer", "viewHeldItems": "Getragene Items", - "hallofFameTextM": "Willkommen in der Ruhmeshalle!", - "hallofFameTextF": "Willkommen in der Ruhmeshalle", + "hallofFameText": "Willkommen in der Ruhmeshalle!", + "hallofFameText_female": "Willkommen in der Ruhmeshalle", "viewHallOfFame": "Ruhmeshalle ansehen!", "viewEndingSplash": "Endgrafik anzeigen!" } diff --git a/src/locales/en/run-history.json b/src/locales/en/run-history.json index 0099a4a3ff4..53596bdf629 100644 --- a/src/locales/en/run-history.json +++ b/src/locales/en/run-history.json @@ -1,15 +1,15 @@ { "victory": "Victory!", - "defeatedWildM": "Defeated by ", - "defeatedTrainerM": "Defeated by ", - "defeatedTrainerDoubleM": "Defeated by Duo", - "defeatedRivalM": "Defeated by Rival", - "defeatedM": "Defeated", - "defeatedWildF": "Defeated by ", - "defeatedTrainerF": "Defeated by ", - "defeatedTrainerDoubleF": "Defeated by Duo", - "defeatedRivalF": "Defeated by Rival", - "defeatedF": "Defeated", + "defeatedWild": "Defeated by ", + "defeatedTrainer": "Defeated by ", + "defeatedTrainerDouble": "Defeated by Duo", + "defeatedRival": "Defeated by Rival", + "defeated": "Defeated", + "defeatedWild_female": "Defeated by ", + "defeatedTrainer_female": "Defeated by ", + "defeatedTrainerDouble_female": "Defeated by Duo", + "defeatedRival_female": "Defeated by Rival", + "defeated_female": "Defeated", "luck": "Luck", "score": "Score", "mode": "Mode", @@ -30,8 +30,8 @@ "money": "Money", "runLength": "Run Length", "viewHeldItems": "Held Items", - "hallofFameTextM": "Welcome to the Hall of Fame!", - "hallofFameTextF": "Welcome to the Hall of Fame!", + "hallofFameText": "Welcome to the Hall of Fame!", + "hallofFameText_female": "Welcome to the Hall of Fame!", "viewHallOfFame": "View Hall of Fame!", "viewEndingSplash": "View ending art!" } diff --git a/src/locales/es/run-history.json b/src/locales/es/run-history.json index d5c52e10fd9..99b30586621 100644 --- a/src/locales/es/run-history.json +++ b/src/locales/es/run-history.json @@ -1,15 +1,15 @@ { "victory": "¡Victoria!", - "defeatedWildM": "Derrotado por ", - "defeatedTrainerM": "Derrotado por ", - "defeatedTrainerDoubleM": "Derrotado por un dúo", - "defeatedRivalM": "Derrotado por el rival", - "defeatedM": "Derrotado", - "defeatedWildF": "Derrotada por ", - "defeatedTrainerF": "Derrotada por ", - "defeatedTrainerDoubleF": "Derrotada por un dúo", - "defeatedRivalF": "Derrotada por el rival", - "defeatedF": "Derrotada", + "defeatedWild": "Derrotado por ", + "defeatedTrainer": "Derrotado por ", + "defeatedTrainerDouble": "Derrotado por un dúo", + "defeatedRival": "Derrotado por el rival", + "defeated": "Derrotado", + "defeatedWild_female": "Derrotada por ", + "defeatedTrainer_female": "Derrotada por ", + "defeatedTrainerDouble_female": "Derrotada por un dúo", + "defeatedRival_female": "Derrotada por el rival", + "defeated_female": "Derrotada", "luck": "Suerte", "score": "Puntuación", "mode": "Modo", @@ -30,8 +30,8 @@ "money": "Dinero", "runLength": "Duración de partida", "viewHeldItems": "Objetos equipados", - "hallofFameTextM": "¡Bienvenido al Hall de la Fama!", - "hallofFameTextF": "¡Bienvenida al Hall de la Fama!", + "hallofFameText": "¡Bienvenido al Hall de la Fama!", + "hallofFameText_female": "¡Bienvenida al Hall de la Fama!", "viewHallOfFame": "¡Ver Hall de la Fama!", "viewEndingSplash": "¡Ver la imagen final!" } \ No newline at end of file diff --git a/src/locales/fr/run-history.json b/src/locales/fr/run-history.json index 7ee0a879e3e..1def265acf1 100644 --- a/src/locales/fr/run-history.json +++ b/src/locales/fr/run-history.json @@ -1,15 +1,15 @@ { "victory": "Victoire !", - "defeatedWildM": "Battu par ", - "defeatedTrainerM": "Battu par ", - "defeatedTrainerDoubleM": "Battu par Duo", - "defeatedRivalM": "Battu par Rivale", - "defeatedM": "Vaincu", - "defeatedWildF": "Battue par ", - "defeatedTrainerF": "Battue par ", - "defeatedTrainerDoubleF": "Battue par Duo", - "defeatedRivalF": "Battue par Rival", - "defeatedF": "Vaincue", + "defeatedWild": "Battu par ", + "defeatedTrainer": "Battu par ", + "defeatedTrainerDouble": "Battu par Duo", + "defeatedRival": "Battu par Rivale", + "defeated": "Vaincu", + "defeatedWild_female": "Battue par ", + "defeatedTrainer_female": "Battue par ", + "defeatedTrainerDouble_female": "Battue par Duo", + "defeatedRival_female": "Battue par Rival", + "defeated_female": "Vaincue", "luck": "Chance ", "score": "Score", "mode": "Mode ", @@ -30,8 +30,8 @@ "money": "Argent", "runLength": "Durée session ", "viewHeldItems": "Objets tenus", - "hallofFameTextM": "Bienvenue au Panthéon !", - "hallofFameTextF": "Bienvenue au Panthéon !", + "hallofFameText": "Bienvenue au Panthéon !", + "hallofFameText_female": "Bienvenue au Panthéon !", "viewHallOfFame": "Voir le Panthéon", "viewEndingSplash": "Voir l’illustration\nde fin" } \ No newline at end of file diff --git a/src/locales/it/run-history.json b/src/locales/it/run-history.json index b49b7ddc168..87f5a746303 100644 --- a/src/locales/it/run-history.json +++ b/src/locales/it/run-history.json @@ -1,15 +1,15 @@ { "victory": "Vittoria!", - "defeatedWildM": "Sconfitto da ", - "defeatedTrainerM": "Sconfitto da ", - "defeatedTrainerDoubleM": "Sconfitto dalla coppia ", - "defeatedRivalM": "Sconfitto dalla rivale", - "defeatedM": "Sconfitto", - "defeatedWildF": "Sconfitta da ", - "defeatedTrainerF": "Sconfitta da ", - "defeatedTrainerDoubleF": "Sconfitta dalla coppia ", - "defeatedRivalF": "Sconfitta dal rivale", - "defeatedF": "Sconfitta", + "defeatedWild": "Sconfitto da ", + "defeatedTrainer": "Sconfitto da ", + "defeatedTrainerDouble": "Sconfitto dalla coppia ", + "defeatedRival": "Sconfitto dalla rivale", + "defeated": "Sconfitto", + "defeatedWild_female": "Sconfitta da ", + "defeatedTrainer_female": "Sconfitta da ", + "defeatedTrainerDouble_female": "Sconfitta dalla coppia ", + "defeatedRival_female": "Sconfitta dal rivale", + "defeated_female": "Sconfitta", "luck": "Fortuna", "score": "Punteggio", "mode": "Modalità", @@ -30,8 +30,8 @@ "money": "Patrimonio", "runLength": "Durata Run", "viewHeldItems": "Oggetti equip.", - "hallofFameTextM": "Benvenuto alla Sala d'Onore!", - "hallofFameTextF": "Benvenuto alla Sala d'Onore!", + "hallofFameText": "Benvenuto alla Sala d'Onore!", + "hallofFameText_female": "Benvenuto alla Sala d'Onore!", "viewHallOfFame": "Vai alla Sala d'Onore!", "viewEndingSplash": "Vai all'arte finale!" } \ No newline at end of file diff --git a/src/locales/ja/run-history.json b/src/locales/ja/run-history.json index 523cdbf8bb5..222f7de728d 100644 --- a/src/locales/ja/run-history.json +++ b/src/locales/ja/run-history.json @@ -5,11 +5,11 @@ "defeatedTrainerDouble": "倒された相手:", "defeatedRival": "倒された相手:", "defeated": "敗北", - "defeatedWildF": "倒された相手:", - "defeatedTrainerF": "倒された相手:", - "defeatedTrainerDoubleF": "倒された相手:", - "defeatedRivalF": "倒された相手:", - "defeatedF": "敗北", + "defeatedWild_female": "倒された相手:", + "defeatedTrainer_female": "倒された相手:", + "defeatedTrainerDouble_female": "倒された相手:", + "defeatedRival_female": "倒された相手:", + "defeated_female": "敗北", "luck": "運", "score": "スコア", "mode": "モード", @@ -30,8 +30,8 @@ "money": "お金", "runLength": "ラン最高ウェーブ", "viewHeldItems": "手持ちアイテム", - "hallofFameTextM": "殿堂へようこそ!", - "hallofFameTextF": "殿堂へようこそ!", + "hallofFameText": "殿堂へようこそ!", + "hallofFameText_female": "殿堂へようこそ!", "viewHallOfFame": "殿堂登録を見る!", "viewEndingSplash": "クリア後のアートを見る!" } \ No newline at end of file diff --git a/src/locales/ko/run-history.json b/src/locales/ko/run-history.json index 340b0c98439..dbf50efc632 100644 --- a/src/locales/ko/run-history.json +++ b/src/locales/ko/run-history.json @@ -1,15 +1,15 @@ { "victory": "승리!", - "defeatedWildM": "야생에서 패배: ", - "defeatedTrainerM": "트레이너에게 패배: ", - "defeatedTrainerDoubleM": "더블 배틀에서 패배", - "defeatedRivalM": "라이벌에게 패배", - "defeatedM": "패배", - "defeatedWildF": "야생에서 패배: ", - "defeatedTrainerF": "트레이너에게 패배: ", - "defeatedTrainerDoubleF": "더블 배틀에서 패배", - "defeatedRivalF": "라이벌에게 패배", - "defeatedF": "패배", + "defeatedWild": "야생에서 패배: ", + "defeatedTrainer": "트레이너에게 패배: ", + "defeatedTrainerDouble": "더블 배틀에서 패배", + "defeatedRival": "라이벌에게 패배", + "defeated": "패배", + "defeatedWild_female": "야생에서 패배: ", + "defeatedTrainer_female": "트레이너에게 패배: ", + "defeatedTrainerDouble_female": "더블 배틀에서 패배", + "defeatedRival_female": "라이벌에게 패배", + "defeated_female": "패배", "luck": "행운", "score": "점수", "mode": "모드", @@ -30,8 +30,8 @@ "money": "소지금", "runLength": "플레이 타임", "viewHeldItems": "도구", - "hallofFameTextM": "전당 등록을 축하합니다!", - "hallofFameTextF": "전당 등록을 축하합니다!", + "hallofFameText": "전당 등록을 축하합니다!", + "hallofFameText_female": "전당 등록을 축하합니다!", "viewHallOfFame": "전당 보기", "viewEndingSplash": "엔딩 화면 보기" } diff --git a/src/locales/pt_BR/run-history.json b/src/locales/pt_BR/run-history.json index fe02a3e31cb..74cc2c35d28 100644 --- a/src/locales/pt_BR/run-history.json +++ b/src/locales/pt_BR/run-history.json @@ -1,15 +1,15 @@ { "victory": "Vitória!", - "defeatedWildM": "Derrotado por ", - "defeatedTrainerM": "Derrotado por ", - "defeatedTrainerDoubleM": "Derrotado por Dupla", - "defeatedRivalM": "Derrotado por Rival", - "defeatedM": "Derrotado", - "defeatedWildF": "Derrotada por ", - "defeatedTrainerF": "Derrotada por ", - "defeatedTrainerDoubleF": "Derrotada por Dupla", - "defeatedRivalF": "Derrotada por Rival", - "defeatedF": "Derrotada", + "defeatedWild": "Derrotado por ", + "defeatedTrainer": "Derrotado por ", + "defeatedTrainerDouble": "Derrotado por Dupla", + "defeatedRival": "Derrotado por Rival", + "defeated": "Derrotado", + "defeatedWild_female": "Derrotada por ", + "defeatedTrainer_female": "Derrotada por ", + "defeatedTrainerDouble_female": "Derrotada por Dupla", + "defeatedRival_female": "Derrotada por Rival", + "defeated_female": "Derrotada", "luck": "Sorte", "score": "Pontuação", "mode": "Modo", @@ -30,8 +30,8 @@ "money": "Dinheiro", "runLength": "Duração do Jogo", "viewHeldItems": "Itens Segurados", - "hallofFameTextM": "Bem-vindo ao Hall da Fama!", - "hallofFameTextF": "Bem-vinda ao Hall da Fama!", + "hallofFameText": "Bem-vindo ao Hall da Fama!", + "hallofFameText_female": "Bem-vinda ao Hall da Fama!", "viewHallOfFame": "Veja o Hall da Fama!", "viewEndingSplash": "Veja a arte final!" } \ No newline at end of file diff --git a/src/locales/zh_CN/run-history.json b/src/locales/zh_CN/run-history.json index 2f5991d2472..08f430364fc 100644 --- a/src/locales/zh_CN/run-history.json +++ b/src/locales/zh_CN/run-history.json @@ -4,12 +4,12 @@ "defeatedTrainer": "被打败", "defeatedTrainerDouble": "被组合打败", "defeatedRival": "被劲敌打败", - "defeatedM": "被打败", - "defeatedWildF": "被打败", - "defeatedTrainerF": "被打败", - "defeatedTrainerDoubleF": "被组合打败", - "defeatedRivalF": "被劲敌打败", - "defeatedF": "被打败", + "defeated": "被打败", + "defeatedWild_female": "被打败", + "defeatedTrainer_female": "被打败", + "defeatedTrainerDouble_female": "被组合打败", + "defeatedRival_female": "被劲敌打败", + "defeated_female": "被打败", "luck": "幸运", "score": "分数", "mode": "模式", @@ -30,8 +30,8 @@ "money": "金钱", "runLength": "游戏时长", "viewHeldItems": "持有道具", - "hallofFameTextM": "欢迎来到名人堂!", - "hallofFameTextF": "欢迎来到名人堂!", + "hallofFameText": "欢迎来到名人堂!", + "hallofFameText_female": "欢迎来到名人堂!", "viewHallOfFame": "浏览名人堂!", "viewEndingSplash": "浏览结算画面" } \ No newline at end of file diff --git a/src/locales/zh_TW/run-history.json b/src/locales/zh_TW/run-history.json index 2658fe341f4..76cb2592ce2 100644 --- a/src/locales/zh_TW/run-history.json +++ b/src/locales/zh_TW/run-history.json @@ -1,15 +1,15 @@ { "victory": "勝利!", - "defeatedWildM": "被打敗", - "defeatedTrainerM": "被打敗", - "defeatedTrainerDoubleM": "被組合打敗", - "defeatedRivalM": "被勁敵打敗", - "defeatedM": "被打敗", - "defeatedWildF": "被打敗", - "defeatedTrainerF": "被打敗", - "defeatedTrainerDoubleF": "被組合打敗", - "defeatedRivalF": "被勁敵打敗", - "defeatedF": "被打敗", + "defeatedWild": "被打敗", + "defeatedTrainer": "被打敗", + "defeatedTrainerDouble": "被組合打敗", + "defeatedRival": "被勁敵打敗", + "defeated": "被打敗", + "defeatedWild_female": "被打敗", + "defeatedTrainer_female": "被打敗", + "defeatedTrainerDouble_female": "被組合打敗", + "defeatedRival_female": "被勁敵打敗", + "defeated_female": "被打敗", "luck": "幸運", "score": "分數", "mode": "模式", @@ -30,8 +30,8 @@ "money": "金錢", "runLength": "遊戲時長", "viewHeldItems": "持有道具", - "hallofFameTextM": "歡迎來到名人堂!", - "hallofFameTextF": "歡迎來到名人堂!", + "hallofFameText": "歡迎來到名人堂!", + "hallofFameText_female": "歡迎來到名人堂!", "viewHallOfFame": "浏覽名人堂!", "viewEndingSplash": "浏覽結算畫面" } \ No newline at end of file diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 253c49cd6ce..8f132a1ab1c 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -278,11 +278,12 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:victory")}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } else { // Run Result: Defeats - const genderLabel = (this.scene.gameData.gender === PlayerGender.FEMALE) ? "F" : "M"; + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex].toLowerCase(); // Defeats from wild Pokemon battles will show the Pokemon responsible by the text of the run result. if (data.battleType === BattleType.WILD) { const enemyContainer = this.scene.add.container(8, 5); - const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild"+genderLabel)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(this.scene, 0, 0, `${i18next.t("runHistory:defeatedWild", { context: genderStr })}`, TextStyle.WINDOW); enemyContainer.add(gameOutcomeLabel); data.enemyParty.forEach((enemyData, e) => { const enemyIconContainer = this.scene.add.container(65+(e*25), -8); @@ -307,10 +308,10 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const RIVAL_TRAINER_ID_THRESHOLD = 375; if (data.trainer.trainerType >= RIVAL_TRAINER_ID_THRESHOLD) { const rivalName = (tObj.variant === TrainerVariant.FEMALE) ? "trainerNames:rival_female" : "trainerNames:rival"; - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedRival"+genderLabel)} ${i18next.t(rivalName)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedRival", { context: genderStr })} ${i18next.t(rivalName)}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } else { - const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedTrainer"+genderLabel)}${tObj.getName(0, true)}`, TextStyle.WINDOW); + const gameOutcomeLabel = addTextObject(this.scene, 8, 5, `${i18next.t("runHistory:defeatedTrainer", { context: genderStr })}${tObj.getName(0, true)}`, TextStyle.WINDOW); this.add(gameOutcomeLabel); } } diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 8a4d430a1b6..ff4ed919e75 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -42,7 +42,6 @@ enum RunInfoUiMode { export default class RunInfoUiHandler extends UiHandler { protected runInfo: SessionSaveData; protected isVictory: boolean; - protected isPGF: boolean; protected pageMode: RunInfoUiMode; protected runContainer: Phaser.GameObjects.Container; @@ -94,7 +93,6 @@ export default class RunInfoUiHandler extends UiHandler { // Assigning information necessary for the UI's creation this.runInfo = this.scene.gameData.parseSessionData(JSON.stringify(run.entry)); this.isVictory = run.isVictory; - this.isPGF = this.scene.gameData.gender === PlayerGender.FEMALE; this.pageMode = RunInfoUiMode.MAIN; // Creates Header and adds to this.runContainer @@ -173,8 +171,10 @@ export default class RunInfoUiHandler extends UiHandler { * */ private async parseRunResult() { + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const genderStr = PlayerGender[genderIndex]; const runResultTextStyle = this.isVictory ? TextStyle.SUMMARY : TextStyle.SUMMARY_RED; - const runResultTitle = this.isVictory ? i18next.t("runHistory:victory") : (this.isPGF ? i18next.t("runHistory:defeatedF") : i18next.t("runHistory:defeatedM")); + const runResultTitle = this.isVictory ? i18next.t("runHistory:victory") : i18next.t("runHistory:defeated", { context: genderStr }); const runResultText = addBBCodeTextObject(this.scene, 6, 5, `${runResultTitle} - ${i18next.t("saveSlotSelectUiHandler:wave")} ${this.runInfo.waveIndex}`, runResultTextStyle, {fontSize : "65px", lineSpacing: 0.1}); if (this.isVictory) { @@ -684,7 +684,9 @@ export default class RunInfoUiHandler extends UiHandler { */ private createVictorySplash(): void { this.endCardContainer = this.scene.add.container(0, 0); - const endCard = this.scene.add.image(0, 0, `end_${this.isPGF ? "f" : "m"}`); + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const isFemale = genderIndex === PlayerGender.FEMALE; + const endCard = this.scene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); endCard.setOrigin(0); endCard.setScale(0.5); const text = addTextObject(this.scene, this.scene.game.canvas.width / 12, (this.scene.game.canvas.height / 6) - 16, i18next.t("battle:congratulations"), TextStyle.SUMMARY, { fontSize: "128px" }); @@ -698,16 +700,19 @@ export default class RunInfoUiHandler extends UiHandler { * This could be adapted into a public-facing method for victory screens. Perhaps. */ private createHallofFame(): void { + const genderIndex = this.scene.gameData.gender ?? PlayerGender.UNSET; + const isFemale = genderIndex === PlayerGender.FEMALE; + const genderStr = PlayerGender[genderIndex].toLowerCase(); // Issue Note (08-05-2024): It seems as if fused pokemon do not appear with the averaged color b/c pokemonData's loadAsset requires there to be some active battle? // As an alternative, the icons of the second/bottom fused Pokemon have been placed next to their fellow fused Pokemon in Hall of Fame this.hallofFameContainer = this.scene.add.container(0, 0); // Thank you Hayuna for the code - const endCard = this.scene.add.image(0, 0, `end_${this.isPGF ? "f" : "m"}`); + const endCard = this.scene.add.image(0, 0, `end_${isFemale ? "f" : "m"}`); endCard.setOrigin(0); endCard.setPosition(-1, -1); endCard.setScale(0.5); const endCardCoords = endCard.getBottomCenter(); - const overlayColor = this.isPGF ? "red" : "blue"; + const overlayColor = isFemale ? "red" : "blue"; const hallofFameBg = this.scene.add.image(0, 0, "hall_of_fame_"+overlayColor); hallofFameBg.setPosition(159, 89); hallofFameBg.setSize(this.scene.game.canvas.width, this.scene.game.canvas.height+10); @@ -715,7 +720,7 @@ export default class RunInfoUiHandler extends UiHandler { this.hallofFameContainer.add(endCard); this.hallofFameContainer.add(hallofFameBg); - const hallofFameText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:hallofFameText"+(this.isPGF ? "F" : "M")), TextStyle.WINDOW); + const hallofFameText = addTextObject(this.scene, 0, 0, i18next.t("runHistory:hallofFameText", { context: genderStr }), TextStyle.WINDOW); hallofFameText.setPosition(endCardCoords.x-(hallofFameText.displayWidth/2), 164); this.hallofFameContainer.add(hallofFameText); this.runInfo.party.forEach((p, i) => { From c742e99650d8391c45ceb73513793f56dcb6e365 Mon Sep 17 00:00:00 2001 From: "gitlocalize-app[bot]" <55277160+gitlocalize-app[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 18:41:44 +0200 Subject: [PATCH 10/10] [Localization] [DE] Fix Lusamine Dialog spelling (#3880) * Translate dialogue-male.json via GitLocalize * Translate dialogue-female.json via GitLocalize * Update src/locales/de/dialogue-male.json * Update src/locales/de/dialogue-male.json --------- Co-authored-by: Jannik Tappert Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --- src/locales/de/dialogue-female.json | 2 +- src/locales/de/dialogue-male.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/de/dialogue-female.json b/src/locales/de/dialogue-female.json index 2f80fc09eba..e5bcb81ce52 100644 --- a/src/locales/de/dialogue-female.json +++ b/src/locales/de/dialogue-female.json @@ -869,7 +869,7 @@ }, "aether_boss_lusamine_1": { "encounter": { - "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." + "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Bestien sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." }, "victory": { "1": "Wie kann eine Person nur so grausam sein?!" diff --git a/src/locales/de/dialogue-male.json b/src/locales/de/dialogue-male.json index 2f80fc09eba..e5bcb81ce52 100644 --- a/src/locales/de/dialogue-male.json +++ b/src/locales/de/dialogue-male.json @@ -869,7 +869,7 @@ }, "aether_boss_lusamine_1": { "encounter": { - "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Besiten sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." + "1": "Du wirst mein süßes Biest erschrecken! Wie kannst du nur? Ultra-Bestien sind so niedlich!\n$Es sieht so aus, als müsste ich dich zuerst zum Schweigen bringen." }, "victory": { "1": "Wie kann eine Person nur so grausam sein?!"