From aa94e044aba8834c040a9f93af3e031f830f1458 Mon Sep 17 00:00:00 2001 From: Flashfyre Date: Tue, 19 Dec 2023 23:51:48 -0500 Subject: [PATCH] Add egg gacha system and various minor changes Add egg gacha system; remove certain mythical Pokemon from the wild pool as egg exclusive; add egg vouchers with UI; rework Shiny Charm odds; fix trainer Pokemon shiny odds not properly ignoring Shiny Charm modifier --- public/audio/se/egg_crack.wav | Bin 21968 -> 43892 bytes public/audio/se/egg_hatch.wav | Bin 30844 -> 30844 bytes public/audio/se/gacha_dial.wav | Bin 0 -> 59364 bytes public/audio/se/gacha_dispense.wav | Bin 0 -> 62604 bytes public/audio/se/gacha_running.wav | Bin 0 -> 12892 bytes public/battle-anims/copycat.json | 2 +- public/images/egg.png | Bin 951 -> 0 bytes public/images/egg/default.png | Bin 0 -> 337 bytes public/images/{ => egg}/egg.json | 65 +- public/images/egg/egg.png | Bin 0 -> 1241 bytes public/images/{ => egg}/egg_crack.json | 0 public/images/{ => egg}/egg_crack.png | Bin public/images/egg/egg_icons.json | 125 + public/images/egg/egg_icons.png | Bin 0 -> 559 bytes public/images/{ => egg}/egg_lightrays.json | 0 public/images/{ => egg}/egg_lightrays.png | Bin public/images/{ => egg}/egg_shard.json | 0 public/images/{ => egg}/egg_shard.png | Bin public/images/egg/gacha_glass.png | Bin 0 -> 562 bytes public/images/egg/gacha_hatch.json | 104 + public/images/egg/gacha_hatch.png | Bin 0 -> 433 bytes public/images/egg/gacha_knob.png | Bin 0 -> 279 bytes public/images/egg/gacha_legendary.png | Bin 0 -> 2015 bytes public/images/egg/gacha_shiny.png | Bin 0 -> 2132 bytes public/images/egg/gacha_type.png | Bin 0 -> 1995 bytes .../images/egg/gacha_underlay_legendary.json | 62 + .../images/egg/gacha_underlay_legendary.png | Bin 0 -> 272 bytes public/images/egg/gacha_underlay_shiny.json | 62 + public/images/egg/gacha_underlay_shiny.png | Bin 0 -> 420 bytes public/images/egg/gacha_underlay_type.json | 62 + public/images/egg/gacha_underlay_type.png | Bin 0 -> 421 bytes public/images/egg/open_hatch.png | Bin 0 -> 314 bytes public/images/items.json | 2466 +++++++++-------- public/images/items.png | Bin 30817 -> 31436 bytes public/images/items/coupon.png | Bin 0 -> 253 bytes public/images/items/golden_mystic_ticket.png | Bin 0 -> 338 bytes public/images/items/mystic_ticket.png | Bin 0 -> 261 bytes public/images/items/pair_of_tickets.png | Bin 0 -> 255 bytes public/images/pokemon/icons/egg/0.png | Bin 0 -> 333 bytes public/images/pokemon/icons/egg/1.png | Bin 0 -> 338 bytes public/images/pokemon/icons/egg/2.png | Bin 0 -> 325 bytes public/images/pokemon/icons/egg/3.png | Bin 0 -> 333 bytes public/images/pokemon/icons/egg/manaphy.png | Bin 0 -> 358 bytes public/images/ui/egg_list_bg.png | Bin 0 -> 1249 bytes src/battle-phases.ts | 57 +- src/battle-scene.ts | 44 +- src/data/biome.ts | 177 +- src/data/egg.ts | 94 +- src/data/pokemon-species.ts | 2 +- src/egg-hatch-phase.ts | 219 +- src/main.ts | 8 + src/modifier/modifier-type.ts | 25 +- src/modifier/modifier.ts | 22 +- src/pokemon.ts | 19 +- src/system/achv.ts | 13 +- src/system/egg-data.ts | 4 +- src/system/game-data.ts | 60 +- src/system/voucher.ts | 106 + src/ui/achv-bar.ts | 13 +- src/ui/command-ui-handler.ts | 4 +- src/ui/egg-gacha-ui-handler.ts | 600 ++++ src/ui/egg-hatch-scene-handler.ts | 65 +- src/ui/egg-list-ui-handler.ts | 201 ++ src/ui/menu-ui-handler.ts | 26 +- src/ui/pokemon-icon-anim-handler.ts | 11 +- src/ui/starter-select-ui-handler.ts | 1496 +++++----- src/ui/stats-container.ts | 26 +- src/ui/text.ts | 39 +- src/ui/ui.ts | 62 +- src/ui/vouchers-ui-handler.ts | 196 ++ src/utils.ts | 7 + 71 files changed, 4303 insertions(+), 2241 deletions(-) create mode 100644 public/audio/se/gacha_dial.wav create mode 100644 public/audio/se/gacha_dispense.wav create mode 100644 public/audio/se/gacha_running.wav delete mode 100644 public/images/egg.png create mode 100644 public/images/egg/default.png rename public/images/{ => egg}/egg.json (60%) create mode 100644 public/images/egg/egg.png rename public/images/{ => egg}/egg_crack.json (100%) rename public/images/{ => egg}/egg_crack.png (100%) create mode 100644 public/images/egg/egg_icons.json create mode 100644 public/images/egg/egg_icons.png rename public/images/{ => egg}/egg_lightrays.json (100%) rename public/images/{ => egg}/egg_lightrays.png (100%) rename public/images/{ => egg}/egg_shard.json (100%) rename public/images/{ => egg}/egg_shard.png (100%) create mode 100644 public/images/egg/gacha_glass.png create mode 100644 public/images/egg/gacha_hatch.json create mode 100644 public/images/egg/gacha_hatch.png create mode 100644 public/images/egg/gacha_knob.png create mode 100644 public/images/egg/gacha_legendary.png create mode 100644 public/images/egg/gacha_shiny.png create mode 100644 public/images/egg/gacha_type.png create mode 100644 public/images/egg/gacha_underlay_legendary.json create mode 100644 public/images/egg/gacha_underlay_legendary.png create mode 100644 public/images/egg/gacha_underlay_shiny.json create mode 100644 public/images/egg/gacha_underlay_shiny.png create mode 100644 public/images/egg/gacha_underlay_type.json create mode 100644 public/images/egg/gacha_underlay_type.png create mode 100644 public/images/egg/open_hatch.png create mode 100644 public/images/items/coupon.png create mode 100644 public/images/items/golden_mystic_ticket.png create mode 100644 public/images/items/mystic_ticket.png create mode 100644 public/images/items/pair_of_tickets.png create mode 100644 public/images/pokemon/icons/egg/0.png create mode 100644 public/images/pokemon/icons/egg/1.png create mode 100644 public/images/pokemon/icons/egg/2.png create mode 100644 public/images/pokemon/icons/egg/3.png create mode 100644 public/images/pokemon/icons/egg/manaphy.png create mode 100644 public/images/ui/egg_list_bg.png create mode 100644 src/system/voucher.ts create mode 100644 src/ui/egg-gacha-ui-handler.ts create mode 100644 src/ui/egg-list-ui-handler.ts create mode 100644 src/ui/vouchers-ui-handler.ts diff --git a/public/audio/se/egg_crack.wav b/public/audio/se/egg_crack.wav index 33d587199a8df6b9f24abc127966703fffe69b78..72a8d22b628ef6156ef893b6ed972c44deb22ca0 100644 GIT binary patch literal 43892 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

>6P30oYEL0K?lf*CzC;}pRaiIE%g(+B$( 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 z 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 diff --git a/public/audio/se/egg_hatch.wav b/public/audio/se/egg_hatch.wav index 74ddf340a80e305f12c0b4130d6d69b42c100163..8e631b10f6d475e30fed0563cfc1a84a6370196d 100644 GIT binary patch literal 30844 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 literal 30844 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 literal 0 HcmV?d00001 diff --git a/public/audio/se/gacha_dispense.wav b/public/audio/se/gacha_dispense.wav new file mode 100644 index 0000000000000000000000000000000000000000..67238bc5423887a6a47d182f61b8d1c02b3287c0 GIT binary patch literal 62604 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 literal 0 HcmV?d00001 diff --git a/public/battle-anims/copycat.json b/public/battle-anims/copycat.json index 028722802..314b46ec6 100644 --- a/public/battle-anims/copycat.json +++ b/public/battle-anims/copycat.json @@ -1,6 +1,6 @@ { "id": 383, - "graphic": "'!", + "graphic": "!", "frames": [ [ { diff --git a/public/images/egg.png b/public/images/egg.png deleted file mode 100644 index f2bdfa1e123a8105d0b832dcd949efefefcc4b0f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 951 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 literal 0 HcmV?d00001 diff --git a/public/images/egg_lightrays.json b/public/images/egg/egg_lightrays.json similarity index 100% rename from public/images/egg_lightrays.json rename to public/images/egg/egg_lightrays.json diff --git a/public/images/egg_lightrays.png b/public/images/egg/egg_lightrays.png similarity index 100% rename from public/images/egg_lightrays.png rename to public/images/egg/egg_lightrays.png diff --git a/public/images/egg_shard.json b/public/images/egg/egg_shard.json similarity index 100% rename from public/images/egg_shard.json rename to public/images/egg/egg_shard.json diff --git a/public/images/egg_shard.png b/public/images/egg/egg_shard.png similarity index 100% rename from public/images/egg_shard.png rename to public/images/egg/egg_shard.png diff --git a/public/images/egg/gacha_glass.png b/public/images/egg/gacha_glass.png new file mode 100644 index 0000000000000000000000000000000000000000..b8c4a423454e1c2f95d303b3a684582c72a1ecad GIT binary patch literal 562 zcmeAS@N?(olHy`uVBq!ia0y~yU~~YoTR7N&Eo-J!<>q$(_;|ThuV*i} zp1+h~uB79PO~)%^j-EG(GRpk+;q2MBL4Q~Ts-zuR1RNL`@em74nUxoWiWe4LcwVm^ z?Ci$y(*47$IDY{_2P^q~yS@rIu}rwv;?E)IP$h4t_=Nutmrwa4@n2TT4IG`N?hJwg z?-?0gEcS@wv;p1jCnitaKFn`>KD|v~!wn9rgxF^cfOWtjmlp@P9Q=vLPhc&#b}W>5nIfLKatnE4A`zMOqb8Nfo}vF$$S0 zh63kl3Ibg*ar9@Sz(bM*6J0SBcudnE&>Q3HH0$!$_fWstkZ+U9El+Q$ZkOS(@A%qf d!2bFRcmqI#Y62A*qgMa`002ovPDHLkV1oIiaqs{D literal 0 HcmV?d00001 diff --git a/public/images/egg/gacha_legendary.png b/public/images/egg/gacha_legendary.png new file mode 100644 index 0000000000000000000000000000000000000000..8cd6fa38e295fcfb306a6ffbdb017bb1f101eeba GIT binary patch literal 2015 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 B&FcUF literal 0 HcmV?d00001 diff --git a/public/images/egg/gacha_type.png b/public/images/egg/gacha_type.png new file mode 100644 index 0000000000000000000000000000000000000000..19b3668424acb19ab8e45c044a903c33e33c2218 GIT binary patch literal 1995 zcmV;+2Q>JJP))uDnV>fk9uvoKpBRw7}P0+J)QktL?G zl);lH78syPB?dr9C<9Tp&Z%r&n@bzp30LVlq<4CId40a~y?^gMA1RU@UC!=vy{~`I z`<~wm0boo`Sb}nU{TDxPC4HYS&d(=$f1ljDH}u!+=RWfA(O>@RIaFdNEkU{C_vVGS zI-fuOvRTOQ^9MgF#(gAZ@?<6YX-fpl>x3m3jrfs|H!r-E$`p};5>RxL^mdEG~w|{rlJN-o5*dRVfE2 zK}w`vuUiC<5dsJ>JSRa)sC~={7>)zBC9|}&)OzpcO$$*#zq))m+`4tkb4mb7JAziB zc*G9?00000000000000000000007`azq~N?eMP>nR=r;L21S?vNiKd#hHq`-$$iayYdVAwLgT^15JCvQTfLa* zL@0tB<%A_5%lJhtE}RRC3+Ga~@2#yZZy$;YkYdHJz3p9GI2Uf;`S_`ilh_WM1Tg_J zbo{QYuBLYXKYMK<_T!{oSzR>=B7hXb;=;Mmc@q4D5hYTIEDKnfu` z?cKifacAqB_9O^#ybOlSz5df5b^;jv90ZWDnF39G*a8CxAb^+u$;9-4Q?vwhb;*P_jJshX9g;ot+&KEJ*yKj|Ju8 zlK3UFy}dnAuh&~wR#(H$&Q6${o9jd{gwTrKF3rHav{0At_ZfJ8pEQ5FwO8C7Cn=n0FtAxCymY5E3TVV3=-Sg+a@q}y}Hi*LnBdr)lqnGuTw0nKO zcmCB7LJ0r)$4CAr6hMj+!nh}F($nEl!5o$2WzjY4US9-|k_54Pdg(_N(adv#JI)Uk z1dtJ!4$}xm*1;U~`x7$+aLk>WoILV2|9|}WSiv~Xgq3yFK>&rXuiLgmC`gPl7ef%g zME@NKAf=9<2qJ)tb^JsS0R$LfPJ)!&)U!{174BevKeegt)a2yACq+hmy+g}yznK6j z)D!dl_4SF)6Ep?yudh#x>)N*eAb=Fu=GxlCGbc`l)2B~&{)pe;p%Xn@V9FZ7-~4)F z<+s0YRZcy5c#jjoM~@zLKK{e?>!pvMkRgC$7QyJ}t2b`+eMRJrt5+um4N3GEq@W>y z6iTnC2@>PVF+do?%-ORRK>*2}mt}we0tg_00FJg7GJZ265I_o{eE?nrK>)|v{CDOp z0tg^Lf4mTyfke042YY*+kM|=Vg8-7c7w7Zc_D)r+u^*>FY!N_8@1Gxj818@eS!(zH z{MobN`!Bz2q3MfbfF<_Hy?Yh`On@+$Gm$O(7q-*_2wC{a8*hY9cXyxq`=l0HF}Ui%xpox2set77PJoe5SsIKkFejtF1O!(r0)@(LIv)MfK zgh-zJCWrt+-|_1euecZ(ArDR_Q1(0;Kfs3fF6z8}`_q#{d%`iJLr`+$E{{ndnS`2q0srsIiNlIWF^y(Gft#ID)PO zjQ}!`$6q!r0s=_>Y`?zg)7{<7zowHQ0tg_000KxRT#4lP+uvbMfPC?A-+~Julrw%w davZkYz5?fi*Llt@ja2{u002ovPDHLkV1g_lu^a#Z literal 0 HcmV?d00001 diff --git a/public/images/egg/gacha_underlay_legendary.json b/public/images/egg/gacha_underlay_legendary.json new file mode 100644 index 000000000..cce1c3cd4 --- /dev/null +++ b/public/images/egg/gacha_underlay_legendary.json @@ -0,0 +1,62 @@ +{ + "textures": [ + { + "image": "gacha_underlay_legendary.png", + "format": "RGBA8888", + "size": { + "w": 25, + "h": 104 + }, + "scale": 1, + "frames": [ + { + "filename": "default", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 25, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 25, + "h": 52 + }, + "frame": { + "x": 0, + "y": 0, + "w": 25, + "h": 52 + } + }, + { + "filename": "open_hatch", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 25, + "h": 52 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 25, + "h": 52 + }, + "frame": { + "x": 0, + "y": 52, + "w": 25, + "h": 52 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:2714c584c99d3f151df83633a3e573e2:9a5a390cb558062cd2b0d8b9e577816a:dc9ad86988e4cd7eb47a54564121d8fa$" + } +} diff --git a/public/images/egg/gacha_underlay_legendary.png b/public/images/egg/gacha_underlay_legendary.png new file mode 100644 index 0000000000000000000000000000000000000000..5d116d3e11f7bda3dd24494876c16f36cb3b1718 GIT binary patch literal 272 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 N8miA!%9PAd{{v*tv?2fi literal 30817 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 literal 0 HcmV?d00001 diff --git a/public/images/items/mystic_ticket.png b/public/images/items/mystic_ticket.png new file mode 100644 index 0000000000000000000000000000000000000000..bd206998fed1fcb040a0d51293a2a66904ae2865 GIT binary patch literal 261 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJGoCJvArXh)PT9!Y;=seA`SR2P z9xsI@EQj{WJz(Oe~!C;iDw+>tph@t3Tk>OFr&$+CDn9*=TD z2#w}6Fk&XrgUtj0zQppLSFJV@Bly~GCAY`6%@ydufYavmoz{W`#?a<~)2Ox}fn!Oc z$agCWEzl1fcF(yz*ErNK38=KdHwPTU>+j)^MhkykN{~n?ehc)1O*%u*c)E$PRbT&YV!-rMdtB002ovPDHLk FV1nNTZ9xD4 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/egg/0.png b/public/images/pokemon/icons/egg/0.png new file mode 100644 index 0000000000000000000000000000000000000000..33473696ec5ad577ae6dbd5953dc3c926b8ed7ad GIT binary patch literal 333 zcmV-T0kZyyP)X0003LNklk^!5QQI685!8fb{)wE8yy+5cFgFl%D>28V8mlbHk1v<7JdB8}`!36}_iq3l*w=PZ&ArXjRzX>C+4{pS zcbT=PpNp~EWVY^V69rs2wTKahp?7^cOR&-k9LRv{po3H6#J~PJ>81vW$gZ@)bmj-s z-=6@0csPMM?D4L2qk3dHcn|IZw8&X52EX-q)Hs1LhJDTp=Vx;)5RRhiI_q_4js;W{ zcMN#g-vGO7t(=VFn|*)QsENqdoAWhXHJ9d%8#cQJAGs6t2i-=UFXo(!I?dT}*IG{c f(xUSm76CW|T61wC_66#z00000NkvXXu0mjfZ&#L0 literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/egg/1.png b/public/images/pokemon/icons/egg/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e3166fe95bce2514bd2cd8dfa61e8ce915929c90 GIT binary patch literal 338 zcmV-Y0j>UtP)X0003QNklY9sk(!1nC@B1gu^&8mz&L0e2y+;3;3Bx#=k;+^aVR4-9Jf_d zlYvuHlc7p69YyZql^YD-cji;%NG57I4ja(d(O}?opNJCmbafyD0|VS~=%EJ#EL?&E zlLi$O6#jF%Ph`;7(ZDL-c7G-V0|Ntt|Nj7nKi}Sy9n}FpoD_5%*s2a&H3thtZ)hf=q$Z(S kV*y)jL9GVED4+xY0PVqI4LaKErvLx|07*qoM6N<$g7~0^M*si- literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/egg/2.png b/public/images/pokemon/icons/egg/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c9f302da4352413e0a0bd4df62bdc7a5a99faf07 GIT binary patch literal 325 zcmV-L0lNN)P)X0003DNkl zu?oU45Qcw6g$}`jgNTC%U44bVgOjVigR@ZZMRfHw1XmXqhe91XbSOkR2s+folvXN& zi7mo?Q%FMixJ&K=Fbu;m48#004U>lvQL4s45EwbTWm0TFl%Gybh&D{f?bbtd#2B+x zR9HLvKCVfkCD}A3SH{S3U?X0003LNklY9sk(!1nC@B1gu^&8mKozrDsOhk&n&;tS*$jsNso_vYYB+B8 zk2(fPU0H_D(k>`+cOKqgsJ-t=kt3O?X0003kNkl1v6GsrpqLS=)h403hI-BiGVqmHYp?c5|x?QqO>lFBJInZJO`PY8l*C@@9J zipZnBOYU;d<^8?{0)apv5C{a0g_P1tDQ%x;j`|W4q9RFS0EEzXx65goCK_B&N@=fd zY5?|I4M38{Bxwy~)>rbRkDCLyoSeJ$wicqoH}c3=u&&=Iiq*mWvYe4+XI@c{d~a{P zi2+Sn&fxZ=2U%!}V#Rv%iVzyee;u_~#7P>vzH@S&dcW0fa0cnYWAG<}r;pE6l^9;I z8(}fNcXBONB|cl=*n&;dM8?d&thJI|jG22)v3JDZ2O-aQ2kSxJK>($u_G0qz<0k=l z*<7<+K1G8HwvyxVofF${HO9=n<$6b{sa0xf3H&480RRSeYsuw&C;$Ke07*qoM6N<$ Eg7rh9WB>pF literal 0 HcmV?d00001 diff --git a/public/images/ui/egg_list_bg.png b/public/images/ui/egg_list_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..5600a3e6ab7581549b13d6249d90323c973576e6 GIT binary patch literal 1249 zcmeAS@N?(olHy`uVBq!ia0y~yV6+3WH*v55$=kMz)fpIAR(QHNhE&{odv{^c?Ffms zhxcbPI6FE5k>g>fSSP*1(*bHa?LOAcQ`!tKJ{efCkss{7YwYn-0y-1t9J zCjRm9)5$I_GKa5+ES)@aW}QU;>HP11RcHND?0S0b-~smBa@Q{}E#Ju;t&y#hxVrzJ z?D2yO4@9ocujjvO-Q_QHY+Ki^HL@&!T&04)+MT*gyPkj6N$pDumplC7>GkXD=9tt?liTw@?q%|!54B&HmRtR`T5t4& z1*jxCqH6#2d)!=kb~R%12_GYC8jhxaWE7i!lsy8MfIIa)j zq*FkqHGYT$x|Cx+CKGNKPOlvJ@^JUktL4QL*&qHc|6A1a%&qByzWaJL0Xs*AXD`nQ zG8|%8s3Am{XaC($uYcI2!rytvlHd0EM$go9=ZS^J?ziOJQSf6%;smp3;zaPPXU&wX(A`&Y%e545`9r=)HPy^{L2#KWV%`V4{Qjln{$Cz6cfZ^T3ETR0Y{KpD z1@_zBsX5SV^NNW>{(!E{t1A0_HGlf}jattC{`mCi-yaHx7q447eSS8Ba67-l4~7;3 zgn%8xLuNt*ra5Wi`%Ki9Pnwy{aJ}^ZbMs$$9UXeFHkDb;T(o^Z+kupa)<@R!o68p{ z_wNEmQ2}@VF5l>%vhiwl$Jr$hUEdPA<@L3bDVtV>30~}!_xZUZ`{mQ;QU{I@b_md| z$R2vIxmCaS iv === 31).length === 6) - this.scene.validateAchv(achvs.PERFECT_IVS); - } while (pokemonPrevolutions.hasOwnProperty(speciesId) && (speciesId = pokemonPrevolutions[speciesId])); + this.scene.gameData.updateSpeciesDexIvs(pokemon.species.speciesId, pokemon.ivs); this.scene.ui.showText(`${pokemon.name} was caught!`, null, () => { const end = () => { @@ -3229,6 +3233,31 @@ export class SelectModifierPhase extends BattlePhase { } } +export class EggLapsePhase extends BattlePhase { + constructor(scene: BattleScene) { + super(scene); + } + + start() { + super.start(); + + const eggsToHatch: Egg[] = []; + + for (let egg of this.scene.gameData.eggs) { + if (--egg.hatchWaves < 1) + eggsToHatch.push(egg); + } + + if (eggsToHatch.length) + this.scene.queueMessage('Oh?'); + + for (let egg of eggsToHatch) + this.scene.unshiftPhase(new EggHatchPhase(this.scene, egg)); + + this.end(); + } +} + export class AddEnemyBuffModifierPhase extends BattlePhase { constructor(scene: BattleScene) { super(scene); diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 87657ff30..36a8913dc 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -35,6 +35,8 @@ import MessageUiHandler from './ui/message-ui-handler'; import { Species } from './data/species'; import InvertPostFX from './pipelines/invert'; import { Achv, ModifierAchv, achvs } from './system/achv'; +import { GachaType } from './data/egg'; +import { Voucher, vouchers } from './system/voucher'; const enableAuto = true; const quickStart = false; @@ -301,10 +303,22 @@ export default class BattleScene extends Phaser.Scene { this.loadAtlas('types', ''); this.loadAtlas('statuses', ''); this.loadAtlas('categories', ''); - this.loadAtlas('egg', ''); - this.loadAtlas('egg_crack', ''); - this.loadAtlas('egg_shard', ''); - this.loadAtlas('egg_lightrays', ''); + + this.loadAtlas('egg', 'egg'); + this.loadAtlas('egg_crack', 'egg'); + this.loadAtlas('egg_icons', 'egg'); + this.loadAtlas('egg_shard', 'egg'); + this.loadAtlas('egg_lightrays', 'egg'); + Utils.getEnumKeys(GachaType).forEach(gt => { + const key = gt.toLowerCase(); + this.loadImage(`gacha_${key}`, 'egg'); + this.loadAtlas(`gacha_underlay_${key}`, 'egg'); + }); + this.loadImage('gacha_glass', 'egg'); + this.loadAtlas('gacha_hatch', 'egg'); + this.loadImage('gacha_knob', 'egg'); + + this.loadImage('egg_list_bg', 'ui'); for (let i = 0; i < 10; i++) this.loadAtlas(`pokemon_icons_${i}`, 'ui'); @@ -345,6 +359,9 @@ export default class BattleScene extends Phaser.Scene { this.loadSe('egg_crack'); this.loadSe('egg_hatch'); + this.loadSe('gacha_dial'); + this.loadSe('gacha_running'); + this.loadSe('gacha_dispense'); this.loadSe('PRSFX- Transform', 'battle_anims'); @@ -713,10 +730,7 @@ export default class BattleScene extends Phaser.Scene { this.currentBattle.incrementTurn(this); //this.pushPhase(new TrainerMessageTestPhase(this)); - - //for (let t = 0; t < 4; t++) - //this.pushPhase(new EggHatchPhase(this, new Egg(2423432 + EGG_SEED * t, GachaType.LEGENDARY, new Date().getTime()))); - + if (!waveIndex) { const isNewBiome = !lastBattle || !(lastBattle.waveIndex % 10); const resetArenaState = isNewBiome || this.currentBattle.battleType === BattleType.TRAINER; @@ -1447,7 +1461,6 @@ export default class BattleScene extends Phaser.Scene { validateAchvs(achvType: { new(...args: any[]): Achv }, ...args: any[]): void { const filteredAchvs = Object.values(achvs).filter(a => a instanceof achvType); - let newAchv = false; for (let achv of filteredAchvs) this.validateAchv(achv, args); } @@ -1456,6 +1469,19 @@ export default class BattleScene extends Phaser.Scene { if (!this.gameData.achvUnlocks.hasOwnProperty(achv.id) && achv.validate(this, args)) { this.gameData.achvUnlocks[achv.id] = new Date().getTime(); this.ui.achvBar.showAchv(achv); + if (vouchers.hasOwnProperty(achv.id)) + this.validateVoucher(vouchers[achv.id]); + return true; + } + + return false; + } + + validateVoucher(voucher: Voucher, args?: any[]): boolean { + if (!this.gameData.voucherUnlocks.hasOwnProperty(voucher.id) && voucher.validate(this, args)) { + this.gameData.voucherUnlocks[voucher.id] = new Date().getTime(); + this.ui.achvBar.showAchv(voucher); + this.gameData.voucherCounts[voucher.voucherType]++; return true; } diff --git a/src/data/biome.ts b/src/data/biome.ts index d13d4a651..26f08c97d 100644 --- a/src/data/biome.ts +++ b/src/data/biome.ts @@ -181,24 +181,20 @@ export const biomePokemonPools: BiomePokemonPools = { Species.VENONAT, Species.MEOWTH, Species.BELLSPROUT, - Species.PICHU, - Species.IGGLYBUFF, Species.LOTAD, Species.SEEDOT, Species.SHROOMISH, Species.NINCADA, Species.WHISMUR, - Species.AZURILL, Species.SKITTY, Species.KRICKETOT, - Species.BUDEW, Species.COMBEE, Species.CHERUBI, Species.VENIPEDE, Species.MINCCINO ], - [BiomePoolTier.RARE]: [ Species.ABRA, Species.CLEFFA, Species.SURSKIT ], - [BiomePoolTier.SUPER_RARE]: [ Species.EEVEE, Species.TOGEPI, Species.TYROGUE, Species.SMOOCHUM, Species.ELEKID, Species.MAGBY, Species.RALTS, Species.WYNAUT, Species.BONSLY, Species.MIME_JR, Species.HAPPINY, Species.MUNCHLAX, Species.RIOLU ], + [BiomePoolTier.RARE]: [ Species.ABRA, Species.SURSKIT ], + [BiomePoolTier.SUPER_RARE]: [ Species.EEVEE, Species.RALTS ], [BiomePoolTier.ULTRA_RARE]: [ Species.DITTO ], [BiomePoolTier.BOSS]: [], [BiomePoolTier.BOSS_RARE]: [], @@ -250,7 +246,7 @@ export const biomePokemonPools: BiomePokemonPools = { [BiomePoolTier.BOSS]: [ Species.JUMPLUFF, Species.SUNFLORA, Species.WHIMSICOTT ], [BiomePoolTier.BOSS_RARE]: [ Species.VENUSAUR, Species.SUDOWOODO, Species.TORTERRA ], [BiomePoolTier.BOSS_SUPER_RARE]: [], - [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.SHAYMIN ] + [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.TALL_GRASS]: { [BiomePoolTier.COMMON]: [ @@ -329,7 +325,7 @@ export const biomePokemonPools: BiomePokemonPools = { { 1: [ Species.ROWLET ], 17: [ Species.DARTRIX ], 36: [ Species.DECIDUEYE ] } ], [BiomePoolTier.SUPER_RARE]: [ Species.DURANT ], - [BiomePoolTier.ULTRA_RARE]: [ Species.CELEBI, Species.KARTANA ], + [BiomePoolTier.ULTRA_RARE]: [ Species.KARTANA ], [BiomePoolTier.BOSS]: [ Species.VENOMOTH, Species.VICTREEBEL, @@ -351,7 +347,7 @@ export const biomePokemonPools: BiomePokemonPools = { ], [BiomePoolTier.BOSS_RARE]: [ Species.HERACROSS, Species.STANTLER, Species.SCEPTILE, Species.ESCAVALIER, Species.ACCELGOR, Species.DURANT, Species.CHESNAUGHT, Species.DECIDUEYE, Species.LYCANROC ], [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.KARTANA ], - [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.CELEBI, Species.CALYREX ] + [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.CALYREX ] }, [Biome.SEA]: { [BiomePoolTier.COMMON]: [ @@ -474,7 +470,7 @@ export const biomePokemonPools: BiomePokemonPools = { { 1: [ Species.SKRELP ], 48: [ Species.DRAGALGE ] }, Species.PINCURCHIN ], - [BiomePoolTier.RARE]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 20: [ Species.MANTINE ] }, Species.PHIONE, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ], + [BiomePoolTier.RARE]: [ Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, { 1: [ Species.MANTYKE ], 20: [ Species.MANTINE ] }, Species.ALOMOMOLA, { 1: [ Species.TYNAMO ], 39: [ Species.EELEKTRIK ] }, Species.DHELMISE ], [BiomePoolTier.SUPER_RARE]: [ { 1: [ Species.OMANYTE ], 40: [ Species.OMASTAR ] }, { 1: [ Species.KABUTO ], 40: [ Species.KABUTOPS ] }, @@ -484,10 +480,10 @@ export const biomePokemonPools: BiomePokemonPools = { Species.ARCTOVISH, Species.HISUI_QWILFISH ], - [BiomePoolTier.ULTRA_RARE]: [ Species.FEEBAS, Species.MANAPHY, Species.NIHILEGO ], + [BiomePoolTier.ULTRA_RARE]: [ Species.FEEBAS, Species.NIHILEGO ], [BiomePoolTier.BOSS]: [ Species.LANTURN, Species.QWILFISH, Species.CORSOLA, Species.OCTILLERY, Species.MANTINE, Species.WAILORD, Species.HUNTAIL, Species.GOREBYSS, Species.LUVDISC, Species.JELLICENT, Species.ALOMOMOLA, Species.DRAGALGE, Species.BARRASKEWDA ], - [BiomePoolTier.BOSS_RARE]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.PHIONE, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.ARCTOVISH, Species.BASCULEGION ], - [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.MILOTIC, Species.MANAPHY, Species.NIHILEGO, Species.CURSOLA, Species.OVERQWIL ], + [BiomePoolTier.BOSS_RARE]: [ Species.OMASTAR, Species.KABUTOPS, Species.RELICANTH, Species.EELEKTROSS, Species.PYUKUMUKU, Species.DHELMISE, Species.ARCTOVISH, Species.BASCULEGION ], + [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.MILOTIC, Species.NIHILEGO, Species.CURSOLA, Species.OVERQWIL ], [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.KYOGRE ] }, [Biome.MOUNTAIN]: { @@ -573,10 +569,10 @@ export const biomePokemonPools: BiomePokemonPools = { ], [BiomePoolTier.RARE]: [ Species.ONIX, { 1: [ Species.FERROSEED ], 40: [ Species.FERROTHORN ] }, Species.CARBINK ], [BiomePoolTier.SUPER_RARE]: [ Species.SHUCKLE ], - [BiomePoolTier.ULTRA_RARE]: [ Species.REGISTEEL, Species.UXIE ], + [BiomePoolTier.ULTRA_RARE]: [ Species.UXIE ], [BiomePoolTier.BOSS]: [ Species.PARASECT, Species.ONIX, Species.CROBAT, Species.URSARING, Species.EXPLOUD, Species.PROBOPASS, Species.GIGALITH, Species.SWOOBAT, Species.DIGGERSBY, Species.NOIVERN, Species.GOLISOPOD ], [BiomePoolTier.BOSS_RARE]: [ Species.SHUCKLE, Species.FERROTHORN, Species.LYCANROC ], - [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.REGISTEEL, Species.UXIE ], + [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.UXIE ], [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.DESERT]: { @@ -726,7 +722,7 @@ export const biomePokemonPools: BiomePokemonPools = { { 1: [ Species.CLOBBOPUS ], 20: [ Species.GRAPPLOCT ] } ], [BiomePoolTier.UNCOMMON]: [ { 1: [ Species.CROAGUNK ], 37: [ Species.TOXICROAK ] }, { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ] }, { 1: [ Species.MIENFOO ], 50: [ Species.MIENSHAO ] } ], - [BiomePoolTier.RARE]: [ { 1: [ Species.TYROGUE ], 20: [ Species.HITMONLEE ] }, Species.HITMONCHAN, Species.LUCARIO, Species.THROH, Species.SAWK ], + [BiomePoolTier.RARE]: [ Species.HITMONLEE, Species.HITMONCHAN, Species.LUCARIO, Species.THROH, Species.SAWK ], [BiomePoolTier.SUPER_RARE]: [ Species.HITMONTOP, Species.GALLADE, Species.GALAR_FARFETCHD ], [BiomePoolTier.ULTRA_RARE]: [ Species.TERRAKION, Species.KUBFU, Species.GALAR_ZAPDOS ], [BiomePoolTier.BOSS]: [ Species.PRIMEAPE, Species.HITMONLEE, Species.HITMONCHAN, Species.HARIYAMA, Species.MEDICHAM, Species.LUCARIO, Species.TOXICROAK, Species.THROH, Species.SAWK, Species.SCRAFTY, Species.MIENSHAO, Species.BEWEAR, Species.GRAPPLOCT ], @@ -745,11 +741,11 @@ export const biomePokemonPools: BiomePokemonPools = { [BiomePoolTier.UNCOMMON]: [ { 1: [ Species.BRONZOR ], 33: [ Species.BRONZONG ] }, Species.KLEFKI ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [ { 1: [ Species.PORYGON ], 20: [ Species.PORYGON2 ] }, { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] } ], - [BiomePoolTier.ULTRA_RARE]: [ Species.GENESECT, Species.MAGEARNA, Species.MELTAN ], + [BiomePoolTier.ULTRA_RARE]: [ Species.GENESECT, Species.MAGEARNA ], [BiomePoolTier.BOSS]: [ Species.KLINKLANG, Species.KLEFKI ], [BiomePoolTier.BOSS_RARE]: [], [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.GENESECT, Species.MAGEARNA ], - [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.MELMETAL ] + [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.RUINS]: { [BiomePoolTier.COMMON]: [ @@ -763,11 +759,11 @@ export const biomePokemonPools: BiomePokemonPools = { [BiomePoolTier.UNCOMMON]: [ { 1: [ Species.ABRA ], 16: [ Species.KADABRA ] }, Species.SIGILYPH ], [BiomePoolTier.RARE]: [ Species.MR_MIME, Species.WOBBUFFET, { 1: [ Species.GOTHITA ], 32: [ Species.GOTHORITA ], 41: [ Species.GOTHITELLE ] }, Species.STONJOURNER ], [BiomePoolTier.SUPER_RARE]: [ Species.ESPEON, { 1: [ Species.ARCHEN ], 37: [ Species.ARCHEOPS ] }, { 1: [ Species.GALAR_YAMASK ], 34: [ Species.RUNERIGUS ] } ], - [BiomePoolTier.ULTRA_RARE]: [ Species.MEW, Species.VICTINI ], + [BiomePoolTier.ULTRA_RARE]: [ Species.REGISTEEL ], [BiomePoolTier.BOSS]: [ Species.ALAKAZAM, Species.HYPNO, Species.XATU, Species.GRUMPIG, Species.CLAYDOL, Species.SIGILYPH, Species.GOTHITELLE, Species.BEHEEYEM ], [BiomePoolTier.BOSS_RARE]: [ Species.MR_MIME, Species.ESPEON, Species.WOBBUFFET, Species.ARCHEOPS ], - [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.VICTINI, Species.RUNERIGUS ], - [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.MEW ] + [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.REGISTEEL, Species.RUNERIGUS ], + [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.WASTELAND]: { [BiomePoolTier.COMMON]: [ @@ -812,11 +808,11 @@ export const biomePokemonPools: BiomePokemonPools = { [BiomePoolTier.UNCOMMON]: [ { 1: [ Species.BALTOY ], 36: [ Species.CLAYDOL ] }, { 1: [ Species.ELGYEM ], 42: [ Species.BEHEEYEM ] } ], [BiomePoolTier.RARE]: [ { 1: [ Species.BELDUM ], 20: [ Species.METANG ], 45: [ Species.METAGROSS ] }, Species.SIGILYPH, { 1: [ Species.SOLOSIS ], 32: [ Species.DUOSION ], 41: [ Species.REUNICLUS ] } ], [BiomePoolTier.SUPER_RARE]: [ { 1: [ Species.PORYGON ], 20: [ Species.PORYGON2 ] } ], - [BiomePoolTier.ULTRA_RARE]: [ Species.JIRACHI, Species.DEOXYS, Species.CRESSELIA, { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ], + [BiomePoolTier.ULTRA_RARE]: [ Species.DEOXYS, Species.CRESSELIA, { 1: [ Species.COSMOG ], 43: [ Species.COSMOEM ] }, Species.CELESTEELA ], [BiomePoolTier.BOSS]: [ Species.CLEFABLE, Species.LUNATONE, Species.SOLROCK, Species.BRONZONG, Species.MUSHARNA, Species.REUNICLUS, Species.MINIOR ], [BiomePoolTier.BOSS_RARE]: [ Species.METAGROSS, Species.PORYGON_Z ], - [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.JIRACHI, Species.DEOXYS, Species.CRESSELIA, Species.CELESTEELA ], - [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.RAYQUAZA, Species.ARCEUS, Species.SOLGALEO, Species.LUNALA, Species.NECROZMA ] + [BiomePoolTier.BOSS_SUPER_RARE]: [ Species.DEOXYS, Species.CRESSELIA, Species.CELESTEELA ], + [BiomePoolTier.BOSS_ULTRA_RARE]: [ Species.RAYQUAZA, Species.SOLGALEO, Species.LUNALA, Species.NECROZMA ] }, [Biome.CONSTRUCTION_SITE]: { [BiomePoolTier.COMMON]: [ @@ -831,7 +827,7 @@ export const biomePokemonPools: BiomePokemonPools = { { 1: [ Species.RHYHORN ], 42: [ Species.RHYDON ] }, { 1: [ Species.SCRAGGY ], 39: [ Species.SCRAFTY ] } ], - [BiomePoolTier.RARE]: [ Species.ONIX, { 1: [ Species.TYROGUE ], 20: [ Species.HITMONLEE ] }, Species.HITMONCHAN, Species.DURALUDON ], + [BiomePoolTier.RARE]: [ Species.ONIX, Species.HITMONLEE, Species.HITMONCHAN, Species.DURALUDON ], [BiomePoolTier.SUPER_RARE]: [ Species.DITTO, Species.HITMONTOP, { 1: [ Species.GALAR_MEOWTH ], 28: [ Species.PERRSERKER ] } ], [BiomePoolTier.ULTRA_RARE]: [ Species.COBALION ], [BiomePoolTier.BOSS]: [ Species.MACHAMP, Species.CONKELDURR ], @@ -1075,7 +1071,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.NORMAN, TrainerType.CHEREN, TrainerType.LENORA ], + [BiomePoolTier.BOSS]: [ TrainerType.CILAN, TrainerType.CHILI, TrainerType.CRESS, TrainerType.CHEREN, TrainerType.LENORA ], [BiomePoolTier.BOSS_RARE]: [], [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] @@ -1108,7 +1104,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.RARE]: [ TrainerType.ARTIST ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], - [BiomePoolTier.BOSS]: [ TrainerType.CHEREN ], + [BiomePoolTier.BOSS]: [ TrainerType.NORMAN, TrainerType.CHEREN ], [BiomePoolTier.BOSS_RARE]: [], [BiomePoolTier.BOSS_SUPER_RARE]: [], [BiomePoolTier.BOSS_ULTRA_RARE]: [] @@ -2206,10 +2202,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.END, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.MEW, Type.PSYCHIC, -1, [ - [ Biome.RUINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_ULTRA_RARE ] - ] + [ Species.MEW, Type.PSYCHIC, -1, [ ] ], [ Species.CHIKORITA, Type.GRASS, -1, [ [ Biome.TALL_GRASS, BiomePoolTier.RARE ] @@ -2306,21 +2299,13 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.SEABED, BiomePoolTier.BOSS ] ] ], - [ Species.PICHU, Type.ELECTRIC, -1, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ] - ] + [ Species.PICHU, Type.ELECTRIC, -1, [ ] ], - [ Species.CLEFFA, Type.FAIRY, -1, [ - [ Biome.TOWN, BiomePoolTier.RARE ] - ] + [ Species.CLEFFA, Type.FAIRY, -1, [ ] ], - [ Species.IGGLYBUFF, Type.NORMAL, Type.FAIRY, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ] - ] + [ Species.IGGLYBUFF, Type.NORMAL, Type.FAIRY, [ ] ], - [ Species.TOGEPI, Type.FAIRY, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.TOGEPI, Type.FAIRY, -1, [ ] ], [ Species.TOGETIC, Type.FAIRY, Type.FLYING, [ [ Biome.FAIRY_CAVE, BiomePoolTier.UNCOMMON ] @@ -2615,11 +2600,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.METROPOLIS, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.TYROGUE, Type.FIGHTING, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ], - [ Biome.DOJO, BiomePoolTier.RARE ], - [ Biome.CONSTRUCTION_SITE, BiomePoolTier.RARE ] - ] + [ Species.TYROGUE, Type.FIGHTING, -1, [ ] ], [ Species.HITMONTOP, Type.FIGHTING, -1, [ [ Biome.DOJO, BiomePoolTier.SUPER_RARE ], @@ -2627,17 +2608,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.CONSTRUCTION_SITE, BiomePoolTier.SUPER_RARE ] ] ], - [ Species.SMOOCHUM, Type.ICE, Type.PSYCHIC, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.SMOOCHUM, Type.ICE, Type.PSYCHIC, [ ] ], - [ Species.ELEKID, Type.ELECTRIC, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.ELEKID, Type.ELECTRIC, -1, [ ] ], - [ Species.MAGBY, Type.FIRE, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.MAGBY, Type.FIRE, -1, [ ] ], [ Species.MILTANK, Type.NORMAL, -1, [ [ Biome.MEADOW, BiomePoolTier.RARE ], @@ -2688,10 +2663,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.MOUNTAIN, BiomePoolTier.BOSS_ULTRA_RARE ] ] ], - [ Species.CELEBI, Type.PSYCHIC, Type.GRASS, [ - [ Biome.FOREST, BiomePoolTier.ULTRA_RARE ], - [ Biome.FOREST, BiomePoolTier.BOSS_ULTRA_RARE ] - ] + [ Species.CELEBI, Type.PSYCHIC, Type.GRASS, [ ] ], [ Species.TREECKO, Type.GRASS, -1, [ [ Biome.FOREST, BiomePoolTier.RARE ] @@ -2918,9 +2890,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.DOJO, BiomePoolTier.BOSS ] ] ], - [ Species.AZURILL, Type.NORMAL, Type.FAIRY, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ] - ] + [ Species.AZURILL, Type.NORMAL, Type.FAIRY, [ ] ], [ Species.NOSEPASS, Type.ROCK, -1, [ [ Biome.CAVE, BiomePoolTier.UNCOMMON ] @@ -3216,9 +3186,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.ABYSS, BiomePoolTier.BOSS ] ] ], - [ Species.WYNAUT, Type.PSYCHIC, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.WYNAUT, Type.PSYCHIC, -1, [ ] ], [ Species.SNORUNT, Type.ICE, -1, [ [ Biome.ICE_CAVE, BiomePoolTier.UNCOMMON ] @@ -3306,8 +3274,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ Species.REGISTEEL, Type.STEEL, -1, [ - [ Biome.CAVE, BiomePoolTier.ULTRA_RARE ], - [ Biome.CAVE, BiomePoolTier.BOSS_SUPER_RARE ] + [ Biome.RUINS, BiomePoolTier.ULTRA_RARE ], + [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], [ Species.LATIAS, Type.DRAGON, Type.PSYCHIC, [ @@ -3333,10 +3301,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.END, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.JIRACHI, Type.STEEL, Type.PSYCHIC, [ - [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ], - [ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] - ] + [ Species.JIRACHI, Type.STEEL, Type.PSYCHIC, [ ] ], [ Species.DEOXYS, Type.PSYCHIC, -1, [ [ Biome.SPACE, BiomePoolTier.ULTRA_RARE ], @@ -3435,9 +3400,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ Species.BUDEW, Type.GRASS, Type.POISON, [ - [ Biome.TOWN, BiomePoolTier.UNCOMMON ] - ] + [ Species.BUDEW, Type.GRASS, Type.POISON, [ ] ], [ Species.ROSERADE, Type.GRASS, Type.POISON, [ [ Biome.MEADOW, BiomePoolTier.BOSS ] @@ -3599,17 +3562,11 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.LABORATORY, BiomePoolTier.BOSS ] ] ], - [ Species.BONSLY, Type.ROCK, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.BONSLY, Type.ROCK, -1, [ ] ], - [ Species.MIME_JR, Type.PSYCHIC, Type.FAIRY, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.MIME_JR, Type.PSYCHIC, Type.FAIRY, [ ] ], - [ Species.HAPPINY, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.HAPPINY, Type.NORMAL, -1, [] ], [ Species.CHATOT, Type.NORMAL, Type.FLYING, [ [ Biome.JUNGLE, BiomePoolTier.SUPER_RARE ] @@ -3638,13 +3595,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.END, BiomePoolTier.COMMON ] ] ], - [ Species.MUNCHLAX, Type.NORMAL, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.MUNCHLAX, Type.NORMAL, -1, [ ] ], - [ Species.RIOLU, Type.FIGHTING, -1, [ - [ Biome.TOWN, BiomePoolTier.SUPER_RARE ] - ] + [ Species.RIOLU, Type.FIGHTING, -1, [ ] ], [ Species.LUCARIO, Type.FIGHTING, Type.STEEL, [ [ Biome.DOJO, BiomePoolTier.RARE ], @@ -3844,34 +3797,22 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.SPACE, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.PHIONE, Type.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_RARE ] - ] + [ Species.PHIONE, Type.WATER, -1, [ ] ], - [ Species.MANAPHY, Type.WATER, -1, [ - [ Biome.SEABED, BiomePoolTier.ULTRA_RARE ], - [ Biome.SEABED, BiomePoolTier.BOSS_SUPER_RARE ] - ] + [ Species.MANAPHY, Type.WATER, -1, [ ] ], [ Species.DARKRAI, Type.DARK, -1, [ [ Biome.ABYSS, BiomePoolTier.ULTRA_RARE ], [ Biome.ABYSS, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.SHAYMIN, Type.GRASS, -1, [ - [ Biome.GRASS, BiomePoolTier.BOSS_ULTRA_RARE ] - ] + [ Species.SHAYMIN, Type.GRASS, -1, [ ] ], [ Species.ARCEUS, Type.NORMAL, -1, [ - [ Biome.SPACE, BiomePoolTier.BOSS_ULTRA_RARE ], [ Biome.END, BiomePoolTier.ULTRA_RARE ] ] ], - [ Species.VICTINI, Type.PSYCHIC, Type.FIRE, [ - [ Biome.RUINS, BiomePoolTier.ULTRA_RARE ], - [ Biome.RUINS, BiomePoolTier.BOSS_SUPER_RARE ] - ] + [ Species.VICTINI, Type.PSYCHIC, Type.FIRE, [ ] ], [ Species.SNIVY, Type.GRASS, -1, [ [ Biome.JUNGLE, BiomePoolTier.RARE ] @@ -5345,13 +5286,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.POWER_PLANT, BiomePoolTier.BOSS_SUPER_RARE ] ] ], - [ Species.MELTAN, Type.STEEL, -1, [ - [ Biome.FACTORY, BiomePoolTier.ULTRA_RARE ] - ] + [ Species.MELTAN, Type.STEEL, -1, [ ] ], - [ Species.MELMETAL, Type.STEEL, -1, [ - [ Biome.FACTORY, BiomePoolTier.BOSS_ULTRA_RARE ] - ] + [ Species.MELMETAL, Type.STEEL, -1, [ ] ], [ Species.GROOKEY, Type.GRASS, -1, [ [ Biome.JUNGLE, BiomePoolTier.RARE ] @@ -6619,7 +6556,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { ] ], [ TrainerType.NORMAN, [ - [ Biome.PLAINS, BiomePoolTier.BOSS ] + [ Biome.METROPOLIS, BiomePoolTier.BOSS ] ] ], [ TrainerType.WINONA, [ @@ -6673,9 +6610,15 @@ export const biomeTrainerPools: BiomeTrainerPools = { [ Biome.POWER_PLANT, BiomePoolTier.BOSS ] ] ], - [ TrainerType.CILAN, [] ], - [ TrainerType.CHILI, [] ], - [ TrainerType.CRESS, [] ], + [ TrainerType.CILAN, [ + [ Biome.PLAINS, BiomePoolTier.BOSS ] + ] ], + [ TrainerType.CHILI, [ + [ Biome.PLAINS, BiomePoolTier.BOSS ] + ] ], + [ TrainerType.CRESS, [ + [ Biome.PLAINS, BiomePoolTier.BOSS ] + ] ], [ TrainerType.CHEREN, [ [ Biome.PLAINS, BiomePoolTier.BOSS ], [ Biome.METROPOLIS, BiomePoolTier.BOSS ] diff --git a/src/data/egg.ts b/src/data/egg.ts index 53fae3840..8824dc2b3 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -1,4 +1,9 @@ import { ModifierTier } from "../modifier/modifier-type"; +import { Type } from "./type"; +import * as Utils from "../utils"; +import BattleScene from "../battle-scene"; +import { Species } from "./species"; +import { getPokemonSpecies, speciesStarters } from "./pokemon-species"; export const EGG_SEED = 1073741824; @@ -12,12 +17,99 @@ export class Egg { public id: integer; public tier: ModifierTier; public gachaType: GachaType; + public hatchWaves: integer; public timestamp: integer; - constructor(id: integer, gachaType: GachaType, timestamp: integer) { + constructor(id: integer, gachaType: GachaType, hatchWaves: integer, timestamp: integer) { this.id = id; this.tier = Math.floor(id / EGG_SEED); this.gachaType = gachaType; + this.hatchWaves = hatchWaves; this.timestamp = timestamp; } + + isManaphyEgg(): boolean { + return this.tier === ModifierTier.COMMON && !(this.id % 255); + } + + getKey(): string { + if (this.isManaphyEgg()) + return 'manaphy'; + return this.tier.toString(); + } +} + +export function getEggTierDefaultHatchWaves(tier: ModifierTier): integer { + switch (tier) { + case ModifierTier.COMMON: + return 10; + case ModifierTier.GREAT: + return 25; + case ModifierTier.ULTRA: + return 50; + } + return 100; +} + +export function getEggDescriptor(egg: Egg): string { + if (egg.isManaphyEgg()) + return 'Manaphy'; + switch (egg.tier) { + case ModifierTier.GREAT: + return 'Rare'; + case ModifierTier.ULTRA: + return 'Epic'; + case ModifierTier.MASTER: + return 'Legendary'; + default: + return 'Common'; + } +} + +export function getEggHatchWavesMessage(hatchWaves: integer): string { + if (hatchWaves <= 5) + return 'Sounds can be heard coming from inside! It will hatch soon!'; + if (hatchWaves <= 15) + return 'It appears to move occasionally. It may be close to hatching.'; + if (hatchWaves <= 50) + return 'What will hatch from this? It doesn\'t seem close to hatching.'; + return 'It looks like this Egg will take a long time to hatch.'; +} + +export function getEggGachaTypeDescriptor(scene: BattleScene, egg: Egg): string { + if (egg.isManaphyEgg()) + return ''; + switch (egg.gachaType) { + case GachaType.LEGENDARY: + return `Legendary Rate Up (${getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(scene, egg.timestamp)).getName()})`; + case GachaType.TYPE: + return `Type Rate Up (${Utils.toReadableString(Type[getTypeGachaTypeForTimestamp(scene, egg.timestamp)])})`; + case GachaType.SHINY: + return 'Shiny Rate Up'; + } +} + +export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: integer): Species { + const legendarySpecies = Object.entries(speciesStarters) + .filter(s => s[1] >= 8 && s[1] <= 9) + .map(s => parseInt(s[0])); + + let ret: Species; + + scene.executeWithSeedOffset(() => { + ret = Phaser.Math.RND.pick(legendarySpecies); + }, Utils.getSunday(new Date(timestamp)).getTime(), EGG_SEED.toString()); + + return ret; +} + +export function getTypeGachaTypeForTimestamp(scene: BattleScene, timestamp: integer): Type { + const types = Utils.getEnumValues(Type); + let ret: Type; + + scene.executeWithSeedOffset(() => { + ret = Phaser.Math.RND.pick(types); + }, Utils.getSunday(new Date(timestamp)).getTime(), EGG_SEED.toString()); + + return ret; } \ No newline at end of file diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index 6b6566f65..23e11a826 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -230,7 +230,7 @@ export abstract class PokemonSpeciesForm { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot console.warn = () => {}; - const frameNames = scene.anims.generateFrameNames(this.getSpriteKey(female, formIndex, shiny), { zeroPad: 4, suffix: ".png", start: 1, end: 256 }); + const frameNames = scene.anims.generateFrameNames(this.getSpriteKey(female, formIndex, shiny), { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); console.warn = originalWarn; scene.anims.create({ key: this.getSpriteKey(female, formIndex, shiny), diff --git a/src/egg-hatch-phase.ts b/src/egg-hatch-phase.ts index 9e1b1dd05..e22a05d93 100644 --- a/src/egg-hatch-phase.ts +++ b/src/egg-hatch-phase.ts @@ -3,12 +3,16 @@ import { BattlePhase } from "./battle-phase"; import BattleScene, { AnySound } from "./battle-scene"; import * as Utils from "./utils"; import { Mode } from "./ui/ui"; -import { Egg } from "./data/egg"; +import { EGG_SEED, Egg, GachaType, getLegendaryGachaSpeciesForTimestamp, getTypeGachaTypeForTimestamp } from "./data/egg"; import EggHatchSceneHandler from "./ui/egg-hatch-scene-handler"; import { ModifierTier } from "./modifier/modifier-type"; import { Species } from "./data/species"; import Pokemon, { PlayerPokemon } from "./pokemon"; import { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; +import { StatsContainer } from "./ui/stats-container"; +import { TextStyle, addTextObject } from "./ui/text"; +import { Gender, getGenderColor, getGenderSymbol } from "./data/gender"; +import { achvs } from "./system/achv"; export class EggHatchPhase extends BattlePhase { private egg: Egg; @@ -22,6 +26,9 @@ export class EggHatchPhase extends BattlePhase { private eggLightraysOverlay: Phaser.GameObjects.Sprite; private pokemonSprite: Phaser.GameObjects.Sprite; + private infoContainer: Phaser.GameObjects.Container; + private statsContainer: StatsContainer; + constructor(scene: BattleScene, egg: Egg) { super(scene); @@ -36,6 +43,13 @@ export class EggHatchPhase extends BattlePhase { if (!this.egg) return this.end(); + const eggIndex = this.scene.gameData.eggs.findIndex(e => e.id === this.egg.id); + + if (eggIndex === -1) + return this.end(); + + this.scene.gameData.eggs.splice(eggIndex, 1); + this.scene.fadeOutBgm(null, false); const eggHatchHandler = this.scene.ui.getHandler() as EggHatchSceneHandler; @@ -48,7 +62,7 @@ export class EggHatchPhase extends BattlePhase { this.eggContainer = this.scene.add.container(this.eggHatchBg.displayWidth / 2, this.eggHatchBg.displayHeight / 2); - this.eggSprite = this.scene.add.sprite(0, 0, 'egg', `egg_${this.egg.tier}`); + this.eggSprite = this.scene.add.sprite(0, 0, 'egg', `egg_${this.egg.getKey()}`); this.eggCrackSprite = this.scene.add.sprite(0, 0, 'egg_crack', '0'); this.eggCrackSprite.setVisible(false); @@ -70,9 +84,58 @@ export class EggHatchPhase extends BattlePhase { this.eggHatchOverlay.setAlpha(0); this.scene.fieldUI.add(this.eggHatchOverlay); + const infoBg = this.scene.add.nineslice(0, 0, 'window', null, 96, 116, 6, 6, 6, 6); + + this.infoContainer = this.scene.add.container(this.eggHatchBg.displayWidth + infoBg.width / 2, this.eggHatchBg.displayHeight / 2); + + this.statsContainer = new StatsContainer(this.scene, -48, -54, true); + + this.infoContainer.add(infoBg); + this.infoContainer.add(this.statsContainer); + + const pokemonGenderLabelText = addTextObject(this.scene, -16, 32, 'Gender:', TextStyle.WINDOW, { fontSize: '64px' }); + pokemonGenderLabelText.setOrigin(1, 0); + pokemonGenderLabelText.setVisible(false); + this.infoContainer.add(pokemonGenderLabelText); + + const pokemonGenderText = addTextObject(this.scene, -12, 32, '', TextStyle.WINDOW, { fontSize: '64px' }); + pokemonGenderText.setOrigin(0, 0); + pokemonGenderText.setVisible(false); + this.infoContainer.add(pokemonGenderText); + + const pokemonAbilityLabelText = addTextObject(this.scene, -16, 32, 'Ability:', TextStyle.WINDOW, { fontSize: '64px' }); + pokemonAbilityLabelText.setOrigin(1, 0); + this.infoContainer.add(pokemonAbilityLabelText); + + const pokemonAbilityText = addTextObject(this.scene, -12, 32, '', TextStyle.WINDOW, { fontSize: '64px' }); + pokemonAbilityText.setOrigin(0, 0); + this.infoContainer.add(pokemonAbilityText); + + this.eggHatchContainer.add(this.infoContainer); + const pokemon = this.generatePokemon(); - console.log(pokemon.name, pokemon); + let abilityYOffset = 5; + + if (pokemon.gender > Gender.GENDERLESS) { + pokemonGenderText.setText(getGenderSymbol(pokemon.gender)); + pokemonGenderText.setColor(getGenderColor(pokemon.gender)); + pokemonGenderText.setShadowColor(getGenderColor(pokemon.gender, true)); + pokemonGenderLabelText.setVisible(true); + pokemonGenderText.setVisible(true); + + abilityYOffset = 10; + } + + [ pokemonAbilityLabelText, pokemonAbilityText ].map(t => t.y += abilityYOffset); + + pokemonAbilityText.setText(pokemon.getAbility().name); + + const originalIvs: integer[] = this.scene.gameData.dexData[pokemon.species.speciesId].caughtAttr + ? this.scene.gameData.dexData[pokemon.species.speciesId].ivs + : null; + + this.statsContainer.updateIvs(pokemon.ivs, originalIvs); this.pokemonSprite.setVisible(false); @@ -108,19 +171,35 @@ export class EggHatchPhase extends BattlePhase { ease: 'Cubic.easeIn' }); this.scene.time.delayedCall(Utils.fixedInt(1500), () => { + if (pokemon.species.mythical) + this.scene.validateAchv(achvs.HATCH_MYTHICAL); + if (pokemon.species.legendary) + this.scene.validateAchv(achvs.HATCH_LEGENDARY); + if (pokemon.isShiny()) + this.scene.validateAchv(achvs.HATCH_SHINY); this.eggContainer.setVisible(false); this.pokemonSprite.play(pokemon.getSpriteKey(true)); this.pokemonSprite.setVisible(true); this.scene.time.delayedCall(Utils.fixedInt(1000), () => { pokemon.cry(); this.scene.time.delayedCall(Utils.fixedInt(1250), () => { + this.scene.tweens.add({ + targets: this.infoContainer, + duration: Utils.fixedInt(750), + ease: 'Cubic.easeInOut', + x: this.eggHatchBg.displayWidth - 48 + }); + this.scene.playSoundWithoutBgm('evolution_fanfare'); this.scene.ui.showText(`${pokemon.name} hatched from the egg!`, null, () => { - this.scene.ui.showText(null, 0); - this.end(); + this.scene.gameData.updateSpeciesDexIvs(pokemon.species.speciesId, pokemon.ivs); + this.scene.gameData.setPokemonCaught(pokemon).then(() => { + this.scene.ui.showText(null, 0); + this.end(); + }); }, null, true, 3000); - this.scene.time.delayedCall(Utils.fixedInt(4250), () => this.scene.playBgm()); + //this.scene.time.delayedCall(Utils.fixedInt(4250), () => this.scene.playBgm()); }); }); this.scene.tweens.add({ @@ -193,7 +272,8 @@ export class EggHatchPhase extends BattlePhase { doSprayParticle(trigIndex: integer, offsetY: number) { const initialX = this.eggHatchBg.displayWidth / 2; const initialY = this.eggHatchBg.displayHeight / 2 + offsetY; - const particle = this.scene.add.image(initialX, initialY, 'egg_shard', `${this.egg.tier}_${Math.floor(trigIndex / 2)}`); + const shardKey = !this.egg.isManaphyEgg() ? this.egg.tier.toString() : '1'; + const particle = this.scene.add.image(initialX, initialY, 'egg_shard', `${shardKey}_${Math.floor(trigIndex / 2)}`); this.eggHatchContainer.add(particle); let f = 0; @@ -228,58 +308,99 @@ export class EggHatchPhase extends BattlePhase { } generatePokemon(): Pokemon { - let minStarterValue: integer; - let maxStarterValue: integer; + let ret: Pokemon; + let speciesOverride: Species; - switch (this.egg.tier) { - case ModifierTier.GREAT: - minStarterValue = 3; - maxStarterValue = 5; - break; - case ModifierTier.ULTRA: - minStarterValue = 6; - maxStarterValue = 7; - break; - case ModifierTier.MASTER: - minStarterValue = 8; - maxStarterValue = 9; - break; - default: - minStarterValue = 1; - maxStarterValue = 2; - break; + if (this.egg.isManaphyEgg()) { + this.scene.executeWithSeedOffset(() => { + const rand = Utils.randSeedInt(8); + + speciesOverride = rand ? Species.PHIONE : Species.MANAPHY; + }, this.egg.id, EGG_SEED.toString()); + } else if (this.egg.tier === ModifierTier.MASTER + && this.egg.gachaType === GachaType.LEGENDARY) { + this.scene.executeWithSeedOffset(() => { + if (!Utils.randSeedInt(2)) + speciesOverride = getLegendaryGachaSpeciesForTimestamp(this.scene, this.egg.timestamp); + }, this.egg.id, EGG_SEED.toString()); } - const speciesPool = Object.keys(speciesStarters) - .filter(s => speciesStarters[s] >= minStarterValue && speciesStarters[s] <= maxStarterValue) - .map(s => parseInt(s) as Species) - .filter(s => getPokemonSpecies(s).isObtainable()); + if (speciesOverride) { + this.scene.executeWithSeedOffset(() => { + ret = new PlayerPokemon(this.scene, getPokemonSpecies(speciesOverride), 5, null, null, undefined, false); + }, this.egg.id, EGG_SEED.toString()); + } else { + let minStarterValue: integer; + let maxStarterValue: integer; - let totalWeight = 0; - const speciesWeights = []; - for (let speciesId of speciesPool) { - const weight = Math.floor((((maxStarterValue - speciesStarters[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100); - speciesWeights.push(totalWeight + weight); - totalWeight += weight; - } - - let species: Species; - - this.scene.executeWithSeedOffset(() => { - const rand = Utils.randSeedInt(totalWeight); - for (let s = 0; s < speciesWeights.length; s++) { - if (rand < speciesWeights[s]) { - species = speciesPool[s]; + switch (this.egg.tier) { + case ModifierTier.GREAT: + minStarterValue = 4; + maxStarterValue = 5; break; + case ModifierTier.ULTRA: + minStarterValue = 6; + maxStarterValue = 7; + break; + case ModifierTier.MASTER: + minStarterValue = 8; + maxStarterValue = 9; + break; + default: + minStarterValue = 1; + maxStarterValue = 3; + break; + } + + const ignoredSpecies = [ Species.PHIONE, Species.MANAPHY, Species.ETERNATUS ]; + + let speciesPool = Object.keys(speciesStarters) + .filter(s => speciesStarters[s] >= minStarterValue && speciesStarters[s] <= maxStarterValue) + .map(s => parseInt(s) as Species) + .filter(s => getPokemonSpecies(s).isObtainable() && ignoredSpecies.indexOf(s) === -1); + + if (this.egg.gachaType === GachaType.TYPE) { + let tryOverrideType: boolean; + + this.scene.executeWithSeedOffset(() => { + tryOverrideType = !Utils.randSeedInt(2); + }, this.egg.id, EGG_SEED.toString()); + + if (tryOverrideType) { + const type = getTypeGachaTypeForTimestamp(this.scene, this.egg.timestamp); + const typeFilteredSpeciesPool = speciesPool + .filter(s => getPokemonSpecies(s).isOfType(type)); + if (typeFilteredSpeciesPool.length) + speciesPool = typeFilteredSpeciesPool; } } - }, this.egg.id); - console.log(species, totalWeight); + let totalWeight = 0; + const speciesWeights = []; + for (let speciesId of speciesPool) { + const weight = Math.floor((((maxStarterValue - speciesStarters[speciesId]) / ((maxStarterValue - minStarterValue) + 1)) * 1.5 + 1) * 100); + speciesWeights.push(totalWeight + weight); + totalWeight += weight; + } - const pokemon = new PlayerPokemon(this.scene, getPokemonSpecies(species), 5, null, null); + let species: Species; - return pokemon; + this.scene.executeWithSeedOffset(() => { + const rand = Utils.randSeedInt(totalWeight); + for (let s = 0; s < speciesWeights.length; s++) { + if (rand < speciesWeights[s]) { + species = speciesPool[s]; + break; + } + } + + ret = new PlayerPokemon(this.scene, getPokemonSpecies(species), 5, null, null, undefined, false); + }, this.egg.id, EGG_SEED.toString()); + } + + ret.trySetShiny(this.egg.gachaType === GachaType.SHINY ? 1024 : 512); + + return ret; } } diff --git a/src/main.ts b/src/main.ts index db44f0522..8af3a44c4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -2,6 +2,7 @@ import Phaser from 'phaser'; import BattleScene from './battle-scene'; import InvertPostFX from './pipelines/invert'; import { version } from '../package.json'; +import BBCodeTextPlugin from 'phaser3-rex-plugins/plugins/bbcodetext-plugin'; const config: Phaser.Types.Core.GameConfig = { type: Phaser.WEBGL, @@ -11,6 +12,13 @@ const config: Phaser.Types.Core.GameConfig = { height: 1080, mode: Phaser.Scale.FIT }, + plugins: { + global: [{ + key: 'rexBBCodeTextPlugin', + plugin: BBCodeTextPlugin, + start: true + }] + }, pixelArt: true, pipeline: [ InvertPostFX ] as unknown as Phaser.Types.Core.PipelineConfig, scene: [ BattleScene ], diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index c66037a19..7cdd09d9f 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -15,6 +15,7 @@ import { GameMode } from '../game-mode'; import { StatusEffect, getStatusEffectDescriptor } from '../data/status-effect'; import { SpeciesFormKey } from '../data/pokemon-species'; import BattleScene from '../battle-scene'; +import { VoucherType, getVoucherTypeIcon, getVoucherTypeName } from '../system/voucher'; type Modifier = Modifiers.Modifier; @@ -96,6 +97,13 @@ class AddPokeballModifierType extends ModifierType { } } +class AddVoucherModifierType extends ModifierType { + constructor(voucherType: VoucherType, count: integer) { + super(`${count}x ${getVoucherTypeName(voucherType)}`, `Receive ${getVoucherTypeName(voucherType)} x${count}`, + (_type, _args) => new Modifiers.AddVoucherModifier(this, voucherType, count), getVoucherTypeIcon(voucherType), 'voucher'); + } +} + export class PokemonModifierType extends ModifierType { public selectFilter: PokemonSelectFilter; @@ -702,6 +710,10 @@ export const modifierTypes = { MINI_BLACK_HOLE: () => new TurnHeldItemTransferModifierType('Mini Black Hole'), + VOUCHER: () => new AddVoucherModifierType(VoucherType.REGULAR, 1), + VOUCHER_PLUS: () => new AddVoucherModifierType(VoucherType.PLUS, 1), + VOUCHER_PREMIUM: () => new AddVoucherModifierType(VoucherType.PREMIUM, 1), + GOLDEN_POKEBALL: () => new ModifierType(`Golden ${getPokeballName(PokeballType.POKEBALL)}`, 'Adds 1 extra item option at the end of every battle', (type, _args) => new Modifiers.ExtraModifierModifier(type), 'pb_gold', null, 'pb_bounce_1'), @@ -811,16 +823,17 @@ const modifierPool = { new WeightedModifierType(modifierTypes.ABILITY_CHARM, 2), new WeightedModifierType(modifierTypes.IV_SCANNER, 2), new WeightedModifierType(modifierTypes.EXP_BALANCE, 1), - new WeightedModifierType(modifierTypes.COIN_CASE, 1), new WeightedModifierType(modifierTypes.MEGA_EVOLUTION_ITEM, (party: Pokemon[]) => party[0].scene.getModifiers(Modifiers.MegaEvolutionAccessModifier).length && !party.filter(p => p.getFormKey().indexOf(SpeciesFormKey.MEGA) > -1).length ? 1 : 0), new WeightedModifierType(modifierTypes.REVERSE_DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode !== GameMode.SPLICED_ENDLESS && party.filter(p => p.fusionSpecies).length ? 3 : 0), ].map(m => { m.setTier(ModifierTier.ULTRA); return m; }), [ModifierTier.MASTER]: [ - new WeightedModifierType(modifierTypes.MASTER_BALL, 3), - new WeightedModifierType(modifierTypes.SHINY_CHARM, 2), - new WeightedModifierType(modifierTypes.MEGA_BRACELET, 1), - new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode !== GameMode.SPLICED_ENDLESS && party.filter(p => !p.fusionSpecies).length > 1 ? 1 : 0), - new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0), + new WeightedModifierType(modifierTypes.MASTER_BALL, 32), + new WeightedModifierType(modifierTypes.SHINY_CHARM, 18), + new WeightedModifierType(modifierTypes.MEGA_BRACELET, 12), + new WeightedModifierType(modifierTypes.VOUCHER, 6), + new WeightedModifierType(modifierTypes.VOUCHER_PLUS, 1), + new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => party[0].scene.gameMode !== GameMode.SPLICED_ENDLESS && party.filter(p => !p.fusionSpecies).length > 1 ? 12 : 0), + new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 2 : 0), ].map(m => { m.setTier(ModifierTier.MASTER); return m; }), [ModifierTier.LUXURY]: [ new WeightedModifierType(modifierTypes.GOLDEN_EXP_CHARM, 1), diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index f0c421ae9..4228c2176 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -15,6 +15,7 @@ import { TempBattleStat } from '../data/temp-battle-stat'; import { BerryType, getBerryEffectFunc, getBerryPredicate } from '../data/berry'; import { StatusEffect, getStatusEffectDescriptor } from '../data/status-effect'; import { MoneyAchv } from '../system/achv'; +import { VoucherType } from '../system/voucher'; type ModifierType = ModifierTypes.ModifierType; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -234,6 +235,25 @@ export class AddPokeballModifier extends ConsumableModifier { } } +export class AddVoucherModifier extends ConsumableModifier { + private voucherType: VoucherType; + private count: integer; + + constructor(type: ModifierType, voucherType: VoucherType, count: integer) { + super(type); + + this.voucherType = voucherType; + this.count = count; + } + + apply(args: any[]): boolean { + const voucherCounts = (args[0] as BattleScene).gameData.voucherCounts; + voucherCounts[this.voucherType] += this.count; + + return true; + } +} + export abstract class LapsingPersistentModifier extends PersistentModifier { protected battlesLeft: integer; @@ -1299,7 +1319,7 @@ export class ShinyRateBoosterModifier extends PersistentModifier { } apply(args: any[]): boolean { - (args[0] as Utils.IntegerHolder).value /= Math.pow(2, -3 - this.getStackCount()); + (args[0] as Utils.IntegerHolder).value *= Math.pow(2, 2 + this.getStackCount()); return true; } diff --git a/src/pokemon.ts b/src/pokemon.ts index 6ea4005dc..d2770aced 100644 --- a/src/pokemon.ts +++ b/src/pokemon.ts @@ -271,7 +271,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot console.warn = () => {}; - const battleFrameNames = this.scene.anims.generateFrameNames(this.getBattleSpriteKey(), { zeroPad: 4, suffix: ".png", start: 1, end: 256 }); + const battleFrameNames = this.scene.anims.generateFrameNames(this.getBattleSpriteKey(), { zeroPad: 4, suffix: ".png", start: 1, end: 400 }); console.warn = originalWarn; this.scene.anims.create({ key: this.getBattleSpriteKey(), @@ -686,7 +686,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.summonData.moveset[moveIndex] = move; } - trySetShiny(): boolean { + trySetShiny(thresholdOverride?: integer): boolean { const rand1 = Utils.binToDec(Utils.decToBin(this.id).substring(0, 16)); const rand2 = Utils.binToDec(Utils.decToBin(this.id).substring(16, 32)); @@ -694,10 +694,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const F = rand1 ^ rand2; let shinyThreshold = new Utils.IntegerHolder(32); - if (!this.hasTrainer()) { - this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); - console.log(shinyThreshold.value); - } + if (thresholdOverride === undefined) { + if (!this.hasTrainer()) { + this.scene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); + console.log(shinyThreshold.value, 'SHINY THRESHOLD'); + } + } else + shinyThreshold.value = thresholdOverride; this.shiny = (E ^ F) < shinyThreshold.value; if ((E ^ F) < 32) @@ -1836,11 +1839,13 @@ export class EnemyPokemon extends Pokemon { constructor(scene: BattleScene, species: PokemonSpecies, level: integer, trainer: boolean, dataSource?: PokemonData) { super(scene, 236, 84, species, level, dataSource?.abilityIndex, dataSource ? dataSource.formIndex : scene.getSpeciesFormIndex(species), - dataSource?.gender, dataSource?.shiny, null, dataSource); + dataSource?.gender, dataSource ? dataSource.shiny : false, null, dataSource); this.trainer = trainer; if (!dataSource) { + this.trySetShiny(); + let prevolution: Species; let speciesId = species.speciesId; while ((prevolution = pokemonPrevolutions[speciesId])) { diff --git a/src/system/achv.ts b/src/system/achv.ts index 112823e4d..c5c6f0e05 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -31,6 +31,14 @@ export class Achv { this.conditionFunc = conditionFunc; } + getName(): string { + return this.name; + } + + getIconImage(): string { + return this.iconImage; + } + setSecret(hasParent?: boolean): this { this.secret = true; this.hasParent = !!hasParent; @@ -118,10 +126,13 @@ export const achvs = { MEGA_EVOLVE: new Achv('Megamorph', 'Mega evolve a Pokémon', 'mega_bracelet', 50), SPLICE: new Achv('Infinite Fusion', 'Splice two Pokémon together with DNA Splicers', 'dna_splicers', 10), MINI_BLACK_HOLE: new ModifierAchv('A Hole Lot of Items', 'Acquire a Mini Black Hole', 'mini_black_hole', 25, modifier => modifier instanceof TurnHeldItemTransferModifier).setSecret(), - CATCH_LEGENDARY: new Achv('Legendary', 'Catch a legendary Pokémon', 'mb', 50).setSecret(), CATCH_MYTHICAL: new Achv('Mythical', 'Catch a mythical Pokémon', 'strange_ball', 50).setSecret(), + CATCH_LEGENDARY: new Achv('Legendary', 'Catch a legendary Pokémon', 'mb', 75).setSecret(), SEE_SHINY: new Achv('Shiny', 'Find a shiny Pokémon in the wild', 'pb_gold', 75), SHINY_PARTY: new Achv('That\'s Dedication', 'Have a full party of shiny Pokémon', 'shiny_charm', 100).setSecret(true), + HATCH_MYTHICAL: new Achv('Mythical Egg', 'Hatch a mythical Pokémon from an egg', 'pair_of_tickets', 75).setSecret(), + HATCH_LEGENDARY: new Achv('Legendary Egg', 'Hatch a legendary Pokémon from an egg', 'mystic_ticket', 100).setSecret(), + HATCH_SHINY: new Achv('Shiny Egg', 'Hatch a shiny Pokémon from an egg', 'golden_mystic_ticket', 100).setSecret(), HIDDEN_ABILITY: new Achv('Hidden Potential', 'Catch a Pokémon with a hidden ability', 'ability_charm', 75), PERFECT_IVS: new Achv('Certificate of Authenticity', 'Get perfect IVs on a Pokémon', 'blunder_policy', 100), CLASSIC_VICTORY: new Achv('Undefeated', 'Beat the game in classic mode', 'relic_crown', 150) diff --git a/src/system/egg-data.ts b/src/system/egg-data.ts index 3c6f20363..c1642d106 100644 --- a/src/system/egg-data.ts +++ b/src/system/egg-data.ts @@ -3,16 +3,18 @@ import { Egg, GachaType } from "../data/egg"; export default class EggData { public id: integer; public gachaType: GachaType; + public hatchWaves: integer; public timestamp: integer; constructor(source: Egg | any) { const sourceEgg = source instanceof Egg ? source as Egg : null; this.id = sourceEgg ? sourceEgg.id : source.id; this.gachaType = sourceEgg ? sourceEgg.gachaType : source.gachaType; + this.hatchWaves = sourceEgg ? sourceEgg.hatchWaves : source.hatchWaves; this.timestamp = sourceEgg ? sourceEgg.timestamp : source.timestamp; } toEgg(): Egg { - return new Egg(this.id, this.gachaType, this.timestamp); + return new Egg(this.id, this.gachaType, this.hatchWaves, this.timestamp); } } \ No newline at end of file diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 43b771921..d9ab91b48 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -16,6 +16,7 @@ import { Setting, setSetting, settingDefaults } from "./settings"; import { achvs } from "./achv"; import EggData from "./egg-data"; import { Egg } from "../data/egg"; +import { VoucherType, vouchers } from "./voucher"; interface SystemSaveData { trainerId: integer; @@ -23,6 +24,8 @@ interface SystemSaveData { dexData: DexData; unlocks: Unlocks; achvUnlocks: AchvUnlocks; + voucherUnlocks: VoucherUnlocks; + voucherCounts: VoucherCounts; eggs: EggData[]; gameVersion: string; timestamp: integer; @@ -54,6 +57,14 @@ interface AchvUnlocks { [key: string]: integer } +interface VoucherUnlocks { + [key: string]: integer +} + +export interface VoucherCounts { + [type: string]: integer; +} + export interface DexData { [key: integer]: DexEntry } @@ -96,6 +107,8 @@ export class GameData { public achvUnlocks: AchvUnlocks; + public voucherUnlocks: VoucherUnlocks; + public voucherCounts: VoucherCounts; public eggs: Egg[]; constructor(scene: BattleScene) { @@ -109,6 +122,12 @@ export class GameData { [Unlockables.SPLICED_ENDLESS_MODE]: false }; this.achvUnlocks = {}; + this.voucherUnlocks = {}; + this.voucherCounts = { + [VoucherType.REGULAR]: 0, + [VoucherType.PLUS]: 0, + [VoucherType.PREMIUM]: 0 + }; this.eggs = []; this.initDexData(); this.loadSystem(); @@ -124,6 +143,8 @@ export class GameData { dexData: this.dexData, unlocks: this.unlocks, achvUnlocks: this.achvUnlocks, + voucherUnlocks: this.voucherUnlocks, + voucherCounts: this.voucherCounts, eggs: this.eggs.map(e => new EggData(e)), gameVersion: this.scene.game.config.gameVersion, timestamp: new Date().getTime() @@ -141,7 +162,16 @@ export class GameData { if (!localStorage.hasOwnProperty('data')) return false; - const data = JSON.parse(atob(localStorage.getItem('data')), (k: string, v: any) => k.endsWith('Attr') ? BigInt(v) : v) as SystemSaveData; + const data = JSON.parse(atob(localStorage.getItem('data')), (k: string, v: any) => { + if (k === 'eggs') { + const ret: EggData[] = []; + for (let e of v) + ret.push(new EggData(e)); + return ret; + } + + return k.endsWith('Attr') ? BigInt(v) : v; + }) as SystemSaveData; console.debug(data); @@ -168,6 +198,20 @@ export class GameData { } } + if (data.voucherUnlocks) { + for (let v of Object.keys(data.voucherUnlocks)) { + if (vouchers.hasOwnProperty(v)) + this.voucherUnlocks[v] = data.voucherUnlocks[v]; + } + } + + if (data.voucherCounts) { + Utils.getEnumKeys(VoucherType).forEach(key => { + const index = VoucherType[key]; + this.voucherCounts[index] = data.voucherCounts[index] || 0; + }); + } + this.eggs = data.eggs ? data.eggs.map(e => e.toEgg()) : []; @@ -423,6 +467,20 @@ export class GameData { }); } + updateSpeciesDexIvs(speciesId: Species, ivs: integer[]): void { + let dexEntry: DexEntry; + do { + dexEntry = this.scene.gameData.dexData[speciesId]; + const dexIvs = dexEntry.ivs; + for (let i = 0; i < dexIvs.length; i++) { + if (dexIvs[i] < ivs[i]) + dexIvs[i] = ivs[i]; + } + if (dexIvs.filter(iv => iv === 31).length === 6) + this.scene.validateAchv(achvs.PERFECT_IVS); + } while (pokemonPrevolutions.hasOwnProperty(speciesId) && (speciesId = pokemonPrevolutions[speciesId])); + } + getSpeciesDefaultDexAttr(species: PokemonSpecies): bigint { let ret = 0n; const dexEntry = this.dexData[species.speciesId]; diff --git a/src/system/voucher.ts b/src/system/voucher.ts new file mode 100644 index 000000000..007ca0493 --- /dev/null +++ b/src/system/voucher.ts @@ -0,0 +1,106 @@ +import BattleScene from "../battle-scene"; +import { TrainerType, trainerConfigs } from "../data/trainer-type"; +import { ModifierTier } from "../modifier/modifier-type"; +import { Achv, achvs } from "./achv"; + +export enum VoucherType { + REGULAR, + PLUS, + PREMIUM +} + +export class Voucher { + public id: string; + public voucherType: VoucherType; + public description: string; + + private conditionFunc: (scene: BattleScene, args: any[]) => boolean; + + constructor(voucherType: VoucherType, description: string, conditionFunc?: (scene: BattleScene, args: any[]) => boolean) { + this.description = description; + this.voucherType = voucherType; + this.conditionFunc = conditionFunc; + } + + validate(scene: BattleScene, args: any[]): boolean { + return !this.conditionFunc || this.conditionFunc(scene, args); + } + + getName(): string { + return getVoucherTypeName(this.voucherType); + } + + getIconImage(): string { + return getVoucherTypeIcon(this.voucherType); + } + + getTier(): ModifierTier { + switch (this.voucherType) { + case VoucherType.REGULAR: + return ModifierTier.GREAT; + case VoucherType.PLUS: + return ModifierTier.ULTRA; + case VoucherType.PREMIUM: + return ModifierTier.MASTER; + } + } +} + +export function getVoucherTypeName(voucherType: VoucherType): string { + switch (voucherType) { + case VoucherType.REGULAR: + return 'Egg Voucher'; + case VoucherType.PLUS: + return 'Egg Voucher Plus'; + case VoucherType.PREMIUM: + return 'Egg Voucher Premium'; + } +} + +export function getVoucherTypeIcon(voucherType: VoucherType): string { + switch (voucherType) { + case VoucherType.REGULAR: + return 'coupon'; + case VoucherType.PLUS: + return 'pair_of_tickets'; + case VoucherType.PREMIUM: + return 'mystic_ticket'; + } +} + + +export interface Vouchers { + [key: string]: Voucher +} + +export const vouchers: Vouchers = {}; + +const voucherAchvs: Achv[] = [ achvs.CLASSIC_VICTORY ]; + +{ + (function() { + const bossTrainerTypes = Object.keys(trainerConfigs) + .filter(tt => trainerConfigs[tt].isBoss && trainerConfigs[tt].getDerivedType() !== TrainerType.RIVAL); + + for (let trainerType of bossTrainerTypes) { + const voucherType = trainerConfigs[trainerType].moneyMultiplier < 10 + ? VoucherType.REGULAR + : VoucherType.PLUS; + const key = TrainerType[trainerType]; + vouchers[key] = new Voucher(voucherType, `Defeat ${trainerConfigs[trainerType].name}`); + } + + for (let achv of voucherAchvs) { + const voucherType = achv.score >= 150 + ? VoucherType.PREMIUM + : achv.score >= 100 + ? VoucherType.PLUS + : VoucherType.REGULAR; + vouchers[achv.id] = new Voucher(voucherType, achv.description); + } + + const voucherKeys = Object.keys(vouchers); + for (let k of voucherKeys) + vouchers[k].id = k; + })(); +} \ No newline at end of file diff --git a/src/ui/achv-bar.ts b/src/ui/achv-bar.ts index f06b9affe..78dda7d36 100644 --- a/src/ui/achv-bar.ts +++ b/src/ui/achv-bar.ts @@ -1,5 +1,6 @@ import BattleScene from "../battle-scene"; import { Achv } from "../system/achv"; +import { Voucher } from "../system/voucher"; import { TextStyle, addTextObject } from "./text"; export default class AchvBar extends Phaser.GameObjects.Container { @@ -9,7 +10,7 @@ export default class AchvBar extends Phaser.GameObjects.Container { private scoreText: Phaser.GameObjects.Text; private descriptionText: Phaser.GameObjects.Text; - private queue: Achv[] = []; + private queue: (Achv | Voucher)[] = []; public shown: boolean; @@ -47,7 +48,7 @@ export default class AchvBar extends Phaser.GameObjects.Container { this.shown = false; } - showAchv(achv: Achv): void { + showAchv(achv: Achv | Voucher): void { if (this.shown) { this.queue.push(achv); return; @@ -56,10 +57,12 @@ export default class AchvBar extends Phaser.GameObjects.Container { const tier = achv.getTier(); this.bg.setTexture(`achv_bar${tier ? `_${tier + 1}` : ''}`); - this.icon.setFrame(achv.iconImage); - this.titleText.setText(achv.name); + this.icon.setFrame(achv.getIconImage()); + this.titleText.setText(achv.getName()); this.descriptionText.setText(achv.description); - this.scoreText.setText(`+${achv.score}pt`); + + if (achv instanceof Achv) + this.scoreText.setText(`+${(achv as Achv).score}pt`); (this.scene as BattleScene).playSound('achv'); diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index b083ba02f..8bbe16d21 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -127,10 +127,10 @@ export default class CommandUiHandler extends UiHandler { if (!this.cursorObj) { this.cursorObj = this.scene.add.image(0, 0, 'cursor'); - ui.add(this.cursorObj); + this.commandsContainer.add(this.cursorObj); } - this.cursorObj.setPosition(211 + (cursor % 2 === 1 ? 56 : 0), -31 + (cursor >= 2 ? 16 : 0)); + this.cursorObj.setPosition(-5 + (cursor % 2 === 1 ? 56 : 0), 8 + (cursor >= 2 ? 16 : 0)); return changed; } diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts new file mode 100644 index 000000000..7b17317b1 --- /dev/null +++ b/src/ui/egg-gacha-ui-handler.ts @@ -0,0 +1,600 @@ +import BattleScene, { Button } from "../battle-scene"; +import { Mode } from "./ui"; +import { TextStyle, addTextObject, getModifierTierTextTint } from "./text"; +import MessageUiHandler from "./message-ui-handler"; +import * as Utils from "../utils"; +import { ModifierTier } from "../modifier/modifier-type"; +import { EGG_SEED, Egg, GachaType, getEggTierDefaultHatchWaves, getEggDescriptor, getLegendaryGachaSpeciesForTimestamp, getTypeGachaTypeForTimestamp } from "../data/egg"; +import { VoucherType, getVoucherTypeIcon } from "../system/voucher"; +import { getPokemonSpecies } from "../data/pokemon-species"; +import { Type } from "../data/type"; + +const defaultText = 'Select a machine.'; + +export default class EggGachaUiHandler extends MessageUiHandler { + private eggGachaContainer: Phaser.GameObjects.Container; + private eggGachaMessageBox: Phaser.GameObjects.NineSlice; + private eggGachaOptionsContainer: Phaser.GameObjects.Container; + private eggGachaOptionSelectBg: Phaser.GameObjects.NineSlice; + + private gachaContainers: Phaser.GameObjects.Container[]; + private gachaKnobs: Phaser.GameObjects.Sprite[]; + private gachaHatches: Phaser.GameObjects.Sprite[]; + private gachaInfoContainers: Phaser.GameObjects.Container[]; + private eggGachaOverlay: Phaser.GameObjects.Rectangle; + private eggGachaSummaryContainer: Phaser.GameObjects.Container; + + private voucherCountLabels: Phaser.GameObjects.Text[]; + + private gachaCursor: integer; + + private cursorObj: Phaser.GameObjects.Image; + private transitioning: boolean; + private transitionCancelled: boolean; + + constructor(scene: BattleScene) { + super(scene, Mode.EGG_GACHA); + + this.gachaContainers = []; + this.gachaKnobs = []; + this.gachaHatches = []; + this.gachaInfoContainers = []; + + this.voucherCountLabels = []; + } + + setup() { + this.gachaCursor = 0; + + const ui = this.getUi(); + + this.eggGachaContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.eggGachaContainer.setVisible(false); + ui.add(this.eggGachaContainer); + + const bg = this.scene.add.nineslice(0, 0, 'default_bg', null, 320, 180, 0, 0, 16, 0); + bg.setOrigin(0, 0); + + this.eggGachaContainer.add(bg); + + const hatchFrameNames = this.scene.anims.generateFrameNames('gacha_hatch', { suffix: ".png", start: 1, end: 4 }); + this.scene.anims.create({ + key: 'open', + frames: hatchFrameNames, + frameRate: 12 + }); + this.scene.anims.create({ + key: 'close', + frames: hatchFrameNames.reverse(), + frameRate: 12 + }); + + Utils.getEnumValues(GachaType).forEach((gachaType, g) => { + const gachaTypeKey = GachaType[gachaType].toString().toLowerCase(); + const gachaContainer = this.scene.add.container(180 * g, 18); + + const gacha = this.scene.add.sprite(0, 0, `gacha_${gachaTypeKey}`); + gacha.setOrigin(0, 0); + + const gachaUnderlay = this.scene.add.sprite(115, 80, `gacha_underlay_${gachaTypeKey}`); + gachaUnderlay.setOrigin(0, 0); + + const gachaGlass = this.scene.add.sprite(0, 0, 'gacha_glass'); + gachaGlass.setOrigin(0, 0); + + const gachaInfoContainer = this.scene.add.container(160, 46); + + const gachaUpLabel = addTextObject(this.scene, 4, 0, 'UP!', TextStyle.WINDOW); + gachaUpLabel.setOrigin(0, 0); + gachaInfoContainer.add(gachaUpLabel); + + switch (gachaType as GachaType) { + case GachaType.LEGENDARY: + const pokemonIcon = this.scene.add.sprite(-20, 6, 'pokemon_icons_0'); + pokemonIcon.setScale(0.5); + pokemonIcon.setOrigin(0, 0.5); + + gachaInfoContainer.add(pokemonIcon); + break; + case GachaType.TYPE: + const typeIcon = this.scene.add.sprite(-22, 7, 'types', 'unknown'); + typeIcon.setScale(0.75); + typeIcon.setOrigin(0, 0.5); + + gachaUpLabel.x += 4; + + gachaInfoContainer.add(typeIcon); + break; + case GachaType.SHINY: + gachaUpLabel.setText('Shiny UP!'); + gachaUpLabel.setX(0); + gachaUpLabel.setOrigin(0.5, 0); + break; + } + + const gachaKnob = this.scene.add.sprite(191, 89, 'gacha_knob'); + + const gachaHatch = this.scene.add.sprite(115, 73, 'gacha_hatch'); + gachaHatch.setOrigin(0, 0); + + gachaContainer.add(gachaUnderlay); + gachaContainer.add(gacha); + gachaContainer.add(gachaGlass); + gachaContainer.add(gachaKnob); + gachaContainer.add(gachaHatch); + gachaContainer.add(gachaInfoContainer); + + gachaGlass.setAlpha(0.5); + gachaHatch.setAlpha(0.9); + + gachaHatch.on('animationupdate', (_anim, frame) => gachaUnderlay.setFrame(frame.textureFrame === '4.png' ? 'open_hatch' : 'default')); + + this.gachaContainers.push(gachaContainer); + this.gachaKnobs.push(gachaKnob); + this.gachaHatches.push(gachaHatch); + this.gachaInfoContainers.push(gachaInfoContainer); + + this.eggGachaContainer.add(gachaContainer); + + this.updateGachaInfo(g); + }); + + this.eggGachaOptionsContainer = this.scene.add.container() + + this.eggGachaOptionsContainer = this.scene.add.container((this.scene.game.canvas.width / 6), 148); + this.eggGachaContainer.add(this.eggGachaOptionsContainer); + + this.eggGachaOptionSelectBg = this.scene.add.nineslice(0, 0, 'window', null, 96, 96, 6, 6, 6, 6); + this.eggGachaOptionSelectBg.setOrigin(1, 1); + this.eggGachaOptionsContainer.add(this.eggGachaOptionSelectBg); + + const optionText = addTextObject(this.scene, 0, 0, ' x1 1 Pull\n x10 10 Pulls\n x1 5 Pulls\n x1 10 Pulls\nCancel', TextStyle.WINDOW, { maxLines: 5 }); + optionText.setLineSpacing(12); + this.eggGachaOptionsContainer.add(optionText); + + optionText.setPositionRelative(this.eggGachaOptionSelectBg, 16, 9); + + new Array(4).fill(null).map((_, i) => { + const voucherType = i < 2 ? VoucherType.REGULAR : i === 2 ? VoucherType.PLUS : VoucherType.PREMIUM; + const icon = this.scene.add.sprite(0, 0, 'items', getVoucherTypeIcon(voucherType)); + icon.setScale(0.5); + icon.setPositionRelative(this.eggGachaOptionSelectBg, 20, 17 + i * 16); + this.eggGachaOptionsContainer.add(icon); + }); + + this.eggGachaContainer.add(this.eggGachaOptionsContainer); + + new Array(Utils.getEnumKeys(VoucherType).length).fill(null).map((_, i) => { + const container = this.scene.add.container((this.scene.game.canvas.width / 6) - 56 * i, 0); + + const bg = this.scene.add.nineslice(0, 0, 'window', null, 56, 22, 6, 6, 6, 6); + bg.setOrigin(1, 0); + container.add(bg); + + const countLabel = addTextObject(this.scene, -48, 3, '0', TextStyle.WINDOW); + countLabel.setOrigin(0, 0); + container.add(countLabel); + + this.voucherCountLabels.push(countLabel); + + const iconImage = getVoucherTypeIcon(i as VoucherType); + + const icon = this.scene.add.sprite(-19, 2, 'items', iconImage); + icon.setOrigin(0, 0); + icon.setScale(0.5); + container.add(icon); + + this.eggGachaContainer.add(container); + }); + + this.eggGachaOverlay = this.scene.add.rectangle(0, 0, bg.displayWidth, bg.displayHeight, 0x000000); + this.eggGachaOverlay.setOrigin(0, 0); + this.eggGachaOverlay.setAlpha(0); + + this.eggGachaContainer.add(this.eggGachaOverlay); + + this.eggGachaSummaryContainer = this.scene.add.container(0, 0); + this.eggGachaSummaryContainer.setVisible(false); + this.eggGachaContainer.add(this.eggGachaSummaryContainer); + + const gachaMessageBoxContainer = this.scene.add.container(0, 148); + this.eggGachaContainer.add(gachaMessageBoxContainer); + + const gachaMessageBox = this.scene.add.nineslice(0, 0, 'window', null, 320, 32, 6, 6, 6, 6); + gachaMessageBox.setOrigin(0, 0); + gachaMessageBoxContainer.add(gachaMessageBox); + + this.eggGachaMessageBox = gachaMessageBox; + + const gachaMessageText = addTextObject(this.scene, 8, 8, '', TextStyle.WINDOW, { maxLines: 2 }); + gachaMessageText.setOrigin(0, 0); + gachaMessageBoxContainer.add(gachaMessageText); + + this.message = gachaMessageText; + + this.eggGachaContainer.add(gachaMessageBoxContainer); + + this.setCursor(0); + } + + show(args: any[]): void { + super.show(args); + + this.getUi().showText(defaultText, 0); + + this.setGachaCursor(1); + + for (let g = 0; g < this.gachaContainers.length; g++) + this.updateGachaInfo(g); + + this.updateVoucherCounts(); + + this.eggGachaContainer.setVisible(true); + } + + getDelayValue(delay: integer) { + if (this.transitioning && this.transitionCancelled) + delay = Math.ceil(delay / 5); + return Utils.fixedInt(delay); + } + + pull(pullCount?: integer, count?: integer, eggs?: Egg[]) { + this.eggGachaOptionsContainer.setVisible(false); + this.setTransitioning(true); + + if (!pullCount) + pullCount = 1; + if (!count) + count = 0; + if (!eggs) { + eggs = []; + + const tiers = new Array(pullCount).fill(null).map(() => { + const tierValue = Utils.randInt(256); + return tierValue >= 52 ? ModifierTier.COMMON : tierValue >= 8 ? ModifierTier.GREAT : tierValue >= 1 ? ModifierTier.ULTRA : ModifierTier.MASTER; + }); + /*if (pullCount >= 100 && !tiers.filter(t => t >= ModifierTier.ULTRA).length) + tiers[Utils.randInt(tiers.length)] = ModifierTier.ULTRA;*/ + if (pullCount >= 10 && !tiers.filter(t => t >= ModifierTier.GREAT).length) + tiers[Utils.randInt(tiers.length)] = ModifierTier.GREAT; + + const timestamp = new Date().getTime(); + + for (let tier of tiers) { + const egg = new Egg(Utils.randInt(EGG_SEED, EGG_SEED * tier), this.gachaCursor, getEggTierDefaultHatchWaves(tier), timestamp); + if (egg.isManaphyEgg()) + egg.hatchWaves = getEggTierDefaultHatchWaves(ModifierTier.ULTRA); + eggs.push(egg); + this.scene.gameData.eggs.push(egg); + } + + this.scene.gameData.saveSystem(); + } + + if (this.transitionCancelled) { + return this.showSummary(eggs); + } + + const egg = this.scene.add.sprite(127, 75, 'egg', `egg_${eggs[count].getKey()}`); + egg.setScale(0.5); + + this.gachaContainers[this.gachaCursor].add(egg); + this.gachaContainers[this.gachaCursor].moveTo(egg, 1); + + const doPullAnim = () => { + this.scene.playSound('gacha_running', { loop: true }); + this.scene.time.delayedCall(this.getDelayValue(count ? 500 : 1250), () => { + this.scene.playSound('gacha_dispense'); + this.scene.time.delayedCall(this.getDelayValue(750), () => { + this.scene.sound.stopByKey('gacha_running'); + this.scene.tweens.add({ + targets: egg, + duration: this.getDelayValue(350), + y: 95, + ease: 'Bounce.easeOut', + onComplete: () => { + this.scene.time.delayedCall(this.getDelayValue(125), () => { + this.scene.playSound('pb_catch'); + this.gachaHatches[this.gachaCursor].play('open'); + this.scene.tweens.add({ + targets: egg, + duration: this.getDelayValue(350), + scale: 0.75, + ease: 'Sine.easeIn' + }); + this.scene.tweens.add({ + targets: egg, + y: 110, + duration: this.getDelayValue(350), + ease: 'Back.easeOut', + onComplete: () => { + this.gachaHatches[this.gachaCursor].play('close'); + this.scene.tweens.add({ + targets: egg, + y: 200, + duration: this.getDelayValue(350), + ease: 'Cubic.easeIn', + onComplete: () => { + if (++count < pullCount) + this.pull(pullCount, count, eggs); + else + this.showSummary(eggs); + } + }); + } + }); + }); + } + }); + }); + }); + }; + + if (!count) { + this.scene.playSound('gacha_dial'); + this.scene.tweens.add({ + targets: this.gachaKnobs[this.gachaCursor], + duration: this.getDelayValue(350), + angle: 90, + ease: 'Cubic.easeInOut', + onComplete: () => { + this.scene.tweens.add({ + targets: this.gachaKnobs[this.gachaCursor], + duration: this.getDelayValue(350), + angle: 0, + ease: 'Sine.easeInOut' + }); + this.scene.time.delayedCall(this.getDelayValue(350), doPullAnim); + } + }); + } else + doPullAnim(); + } + + showSummary(eggs: Egg[]): void { + this.transitioning = false; + this.eggGachaSummaryContainer.setVisible(true); + + this.scene.tweens.add({ + targets: this.eggGachaOverlay, + alpha: 0.5, + ease: 'Sine.easeOut', + duration: 750, + onComplete: () => { + const rows = Math.ceil(eggs.length / 5); + const cols = Math.min(eggs.length, 5); + const height = this.eggGachaOverlay.displayHeight - this.eggGachaMessageBox.displayHeight; + const eggContainers = eggs.map((egg, t) => { + const col = t % 5; + const row = Math.floor(t / 5); + const sliceWidth = this.eggGachaOverlay.displayWidth / (cols + 2); + const sliceHeight = height / (rows + 2); + const yOffset = (sliceHeight / 2 * (row / Math.max(rows - 1, 1))) + sliceHeight / 4; + const ret = this.scene.add.container(sliceWidth * (col + 1) + (sliceWidth * 0.5), sliceHeight * (row + 1) + yOffset); + ret.setScale(0.0001); + + const eggSprite = this.scene.add.sprite(0, 0, 'egg', `egg_${egg.getKey()}`); + ret.add(eggSprite); + + const eggText = addTextObject(this.scene, 0, 14, getEggDescriptor(egg), TextStyle.PARTY, { align: 'center' }); + eggText.setOrigin(0.5, 0); + eggText.setTint(getModifierTierTextTint(!egg.isManaphyEgg() ? egg.tier : ModifierTier.ULTRA)); + ret.add(eggText); + + this.eggGachaSummaryContainer.add(ret); + return ret; + }); + + eggContainers.forEach((eggContainer, e) => { + this.scene.tweens.add({ + targets: eggContainer, + delay: this.getDelayValue(e * 100), + duration: this.getDelayValue(350), + scale: 1, + ease: 'Sine.easeOut' + }); + }); + } + }); + } + + hideSummary() { + this.setTransitioning(true); + this.scene.tweens.add({ + targets: [ this.eggGachaOverlay, this.eggGachaSummaryContainer ], + alpha: 0, + duration: this.getDelayValue(250), + ease: 'Cubic.easeIn', + onComplete: () => { + this.eggGachaSummaryContainer.setVisible(false); + this.eggGachaSummaryContainer.setAlpha(1); + this.eggGachaSummaryContainer.removeAll(true); + this.setTransitioning(false); + this.eggGachaOptionsContainer.setVisible(true); + } + }); + } + + updateGachaInfo(gachaType: GachaType): void { + const infoContainer = this.gachaInfoContainers[gachaType]; + switch (gachaType as GachaType) { + case GachaType.LEGENDARY: + const species = getPokemonSpecies(getLegendaryGachaSpeciesForTimestamp(this.scene, new Date().getTime())); + const pokemonIcon = infoContainer.getAt(1) as Phaser.GameObjects.Sprite; + pokemonIcon.setTexture(species.getIconAtlasKey(), species.getIconId(false)); + break; + case GachaType.TYPE: + const typeIcon = infoContainer.getAt(1) as Phaser.GameObjects.Sprite; + typeIcon.setFrame(Type[getTypeGachaTypeForTimestamp(this.scene, new Date().getTime())].toLowerCase()); + break; + } + } + + consumeVouchers(voucherType: VoucherType, count: integer): void { + this.scene.gameData.voucherCounts[voucherType] = Math.max(this.scene.gameData.voucherCounts[voucherType] - count, 0); + this.updateVoucherCounts(); + } + + updateVoucherCounts(): void { + this.voucherCountLabels.forEach((label, type) => { + label.setText(this.scene.gameData.voucherCounts[type].toString()); + }); + } + + showError(text: string): void { + this.showText(text, null, () => this.showText(defaultText), Utils.fixedInt(1500)); + } + + setTransitioning(transitioning: boolean): void { + if (this.transitioning === transitioning) + return; + this.transitioning = transitioning; + this.transitionCancelled = false; + } + + processInput(button: Button): boolean { + const ui = this.getUi(); + + let success = false; + let error = false; + + if (this.transitioning) { + if (!this.transitionCancelled && (button === Button.ACTION || button === Button.CANCEL)) { + this.transitionCancelled = true; + success = true; + } else + return false; + } else { + + if (this.eggGachaSummaryContainer.visible) { + if (button === Button.ACTION || button === Button.CANCEL) { + this.hideSummary(); + success = true; + } + } else { + switch (button) { + case Button.ACTION: + switch (this.cursor) { + case 0: + if (!this.scene.gameData.voucherCounts[VoucherType.REGULAR]) { + error = true; + this.showError('You don\'t have enough vouchers!'); + } else if (this.scene.gameData.eggs.length < 99) { + this.consumeVouchers(VoucherType.REGULAR, 1); + this.pull(); + success = true; + } else { + error = true; + this.showError('You have too many eggs!'); + } + break; + case 2: + if (!this.scene.gameData.voucherCounts[VoucherType.PLUS]) { + error = true; + this.showError('You don\'t have enough vouchers!'); + } else if (this.scene.gameData.eggs.length < 95) { + this.consumeVouchers(VoucherType.PLUS, 1); + this.pull(5); + success = true; + } else { + error = true; + this.showError('You have too many eggs!'); + } + break; + case 1: + case 3: + if ((this.cursor === 1 && this.scene.gameData.voucherCounts[VoucherType.REGULAR] < 10) + || (this.cursor === 3 && !this.scene.gameData.voucherCounts[VoucherType.PREMIUM])) { + error = true; + this.showError('You don\'t have enough vouchers!'); + } else if (this.scene.gameData.eggs.length < 90) { + if (this.cursor === 3) + this.consumeVouchers(VoucherType.PREMIUM, 1); + else + this.consumeVouchers(VoucherType.REGULAR, 10); + this.pull(10); + success = true; + } else { + error = true; + this.showError('You have too many eggs!'); + } + break; + case 4: + ui.revertMode(); + success = true; + break; + } + break; + case Button.CANCEL: + this.getUi().revertMode(); + success = true; + break; + case Button.UP: + if (this.cursor) + success = this.setCursor(this.cursor - 1); + break; + case Button.DOWN: + if (this.cursor < 4) + success = this.setCursor(this.cursor + 1); + break; + case Button.LEFT: + if (this.gachaCursor) + success = this.setGachaCursor(this.gachaCursor - 1); + break; + case Button.RIGHT: + if (this.gachaCursor < Utils.getEnumKeys(GachaType).length - 1) + success = this.setGachaCursor(this.gachaCursor + 1); + break; + } + } + } + + if (success) + ui.playSelect(); + else if (error) + ui.playError(); + + return success || error; + } + + setCursor(cursor: integer): boolean { + const ret = super.setCursor(cursor); + + if (!this.cursorObj) { + this.cursorObj = this.scene.add.image(0, 0, 'cursor'); + this.eggGachaOptionsContainer.add(this.cursorObj); + } + + this.cursorObj.setPositionRelative(this.eggGachaOptionSelectBg, 10, 17 + this.cursor * 16); + + return ret; + } + + setGachaCursor(cursor: integer): boolean { + let oldCursor = this.gachaCursor; + + let changed = oldCursor !== cursor; + + if (changed) { + this.gachaCursor = cursor; + + this.setTransitioning(true); + + this.scene.tweens.add({ + targets: this.gachaContainers, + duration: this.eggGachaContainer.visible ? 500 : 0, + x: (_target, _key, _value, index) => 180 * (index - cursor), + ease: 'Cubic.easeInOut', + onComplete: () => this.setTransitioning(false) + }); + } + + return changed; + } + + clear(): void { + super.clear(); + this.setGachaCursor(-1); + this.eggGachaContainer.setVisible(false); + } +} \ No newline at end of file diff --git a/src/ui/egg-hatch-scene-handler.ts b/src/ui/egg-hatch-scene-handler.ts index 7105e13ea..8d050637a 100644 --- a/src/ui/egg-hatch-scene-handler.ts +++ b/src/ui/egg-hatch-scene-handler.ts @@ -3,39 +3,40 @@ import { Mode } from "./ui"; import UiHandler from "./uiHandler"; export default class EggHatchSceneHandler extends UiHandler { - public eggHatchContainer: Phaser.GameObjects.Container; + public eggHatchContainer: Phaser.GameObjects.Container; - constructor(scene: BattleScene) { - super(scene, Mode.EGG_HATCH_SCENE); - } - - setup() { - this.eggHatchContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); - this.scene.fieldUI.add(this.eggHatchContainer); + constructor(scene: BattleScene) { + super(scene, Mode.EGG_HATCH_SCENE); + } - const eggLightraysAnimFrames = this.scene.anims.generateFrameNames('egg_lightrays', { start: 0, end: 3 }); - this.scene.anims.create({ - key: 'egg_lightrays', - frames: eggLightraysAnimFrames, - frameRate: 32 - }); - } + setup() { + this.eggHatchContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.scene.fieldUI.add(this.eggHatchContainer); - show(_args: any[]): void { - super.show(_args); - - this.scene.fieldUI.bringToTop(this.eggHatchContainer); - } - - processInput(button: Button): boolean { - return this.scene.ui.getMessageHandler().processInput(button); - } - - setCursor(_cursor: integer): boolean { - return false; - } + const eggLightraysAnimFrames = this.scene.anims.generateFrameNames('egg_lightrays', { start: 0, end: 3 }); + this.scene.anims.create({ + key: 'egg_lightrays', + frames: eggLightraysAnimFrames, + frameRate: 32 + }); + } - clear() { - this.eggHatchContainer.removeAll(true); - } - } \ No newline at end of file + show(_args: any[]): void { + super.show(_args); + + this.getUi().showText(null, 0); + } + + processInput(button: Button): boolean { + return this.scene.ui.getMessageHandler().processInput(button); + } + + setCursor(_cursor: integer): boolean { + return false; + } + + clear() { + super.clear(); + this.eggHatchContainer.removeAll(true); + } +} \ No newline at end of file diff --git a/src/ui/egg-list-ui-handler.ts b/src/ui/egg-list-ui-handler.ts new file mode 100644 index 000000000..e62524316 --- /dev/null +++ b/src/ui/egg-list-ui-handler.ts @@ -0,0 +1,201 @@ +import BattleScene, { Button } from "../battle-scene"; +import { Mode } from "./ui"; +import PokemonIconAnimHandler, { PokemonIconAnimMode } from "./pokemon-icon-anim-handler"; +import { TextStyle, addTextObject } from "./text"; +import MessageUiHandler from "./message-ui-handler"; +import { EGG_SEED, Egg, GachaType, getEggGachaTypeDescriptor, getEggHatchWavesMessage, getEggDescriptor } from "../data/egg"; +import * as Utils from "../utils"; + +export default class EggListUiHandler extends MessageUiHandler { + private eggListContainer: Phaser.GameObjects.Container; + private eggListIconContainer: Phaser.GameObjects.Container; + private eggSprite: Phaser.GameObjects.Sprite; + private eggNameText: Phaser.GameObjects.Text; + private eggDateText: Phaser.GameObjects.Text; + private eggHatchWavesText: Phaser.GameObjects.Text; + private eggGachaInfoText: Phaser.GameObjects.Text; + private eggListMessageBoxContainer: Phaser.GameObjects.Container; + + private cursorObj: Phaser.GameObjects.Image; + + private iconAnimHandler: PokemonIconAnimHandler; + + constructor(scene: BattleScene) { + super(scene, Mode.EGG_LIST); + } + + setup() { + const ui = this.getUi(); + + this.eggListContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.eggListContainer.setVisible(false); + ui.add(this.eggListContainer); + + const bgColor = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x006860); + bgColor.setOrigin(0, 0); + this.eggListContainer.add(bgColor); + + const starterSelectBg = this.scene.add.image(1, 1, 'egg_list_bg'); + starterSelectBg.setOrigin(0, 0); + this.eggListContainer.add(starterSelectBg); + + this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler.setup(this.scene); + + this.eggNameText = addTextObject(this.scene, 6, 66, '', TextStyle.SUMMARY); + this.eggNameText.setOrigin(0, 0); + this.eggListContainer.add(this.eggNameText); + + this.eggDateText = addTextObject(this.scene, 8, 91, '', TextStyle.TOOLTIP_CONTENT); + this.eggListContainer.add(this.eggDateText); + + this.eggHatchWavesText = addTextObject(this.scene, 8, 108, '', TextStyle.TOOLTIP_CONTENT); + this.eggHatchWavesText.setWordWrapWidth(540); + this.eggListContainer.add(this.eggHatchWavesText); + + this.eggGachaInfoText = addTextObject(this.scene, 8, 152, '', TextStyle.TOOLTIP_CONTENT); + this.eggGachaInfoText.setWordWrapWidth(540); + this.eggListContainer.add(this.eggGachaInfoText); + + this.eggListIconContainer = this.scene.add.container(115, 9); + this.eggListContainer.add(this.eggListIconContainer); + + this.cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor'); + this.cursorObj.setOrigin(0, 0); + this.eggListContainer.add(this.cursorObj); + + this.eggSprite = this.scene.add.sprite(54, 37, `egg`); + this.eggListContainer.add(this.eggSprite); + + this.eggListMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6); + this.eggListMessageBoxContainer.setVisible(false); + this.eggListContainer.add(this.eggListMessageBoxContainer); + + const starterSelectMessageBox = this.scene.add.image(0, 0, 'starter_select_message'); + starterSelectMessageBox.setOrigin(0, 1); + this.eggListMessageBoxContainer.add(starterSelectMessageBox); + + this.message = addTextObject(this.scene, 8, -8, '', TextStyle.WINDOW, { maxLines: 1 }); + this.message.setOrigin(0, 1); + this.eggListMessageBoxContainer.add(this.message); + + this.cursor = -1; + } + + show(args: any[]): void { + super.show(args); + + this.eggListContainer.setVisible(true); + + let e = 0; + + /*this.scene.gameData.eggs = [ + new Egg(1, 1, 5, new Date().getTime()), + new Egg(1 + EGG_SEED, 1, 15, new Date().getTime()), + new Egg(1 + EGG_SEED * 2, 1, 50, new Date().getTime()), + new Egg(1 + EGG_SEED * 3, GachaType.LEGENDARY, 100, new Date().getTime()) + ];*/ + + for (let egg of this.scene.gameData.eggs) { + const x = (e % 11) * 18; + const y = Math.floor(e / 11) * 18; + const icon = this.scene.add.sprite(x - 2, y + 2, 'egg_icons'); + icon.setScale(0.5); + icon.setOrigin(0, 0); + icon.setFrame(egg.getKey()); + this.eggListIconContainer.add(icon); + this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); + e++; + } + + this.setCursor(0); + } + + showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer) { + super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); + } + + processInput(button: Button): boolean { + const ui = this.getUi(); + + let success = false; + let error = false; + + if (button === Button.CANCEL) { + ui.revertMode(); + success = true; + } else { + const eggCount = this.eggListIconContainer.getAll().length; + const rows = Math.ceil(eggCount / 11); + const row = Math.floor(this.cursor / 11); + switch (button) { + case Button.UP: + if (row) + success = this.setCursor(this.cursor - 11); + break; + case Button.DOWN: + if (row < rows - 2 || (row < rows - 1 && this.cursor % 11 <= (eggCount - 1) % 11)) + success = this.setCursor(this.cursor + 11); + break; + case Button.LEFT: + if (this.cursor % 11) + success = this.setCursor(this.cursor - 1); + break; + case Button.RIGHT: + if (this.cursor % 11 < (row < rows - 1 ? 10 : (eggCount - 1) % 11)) + success = this.setCursor(this.cursor + 1); + break; + } + } + + if (success) + ui.playSelect(); + else if (error) + ui.playError(); + + return success || error; + } + + setEggDetails(egg: Egg): void { + this.eggSprite.setFrame(`egg_${egg.getKey()}`); + this.eggNameText.setText(`Egg (${getEggDescriptor(egg)})`); + this.eggDateText.setText( + new Date(egg.timestamp).toLocaleString(undefined, { + weekday: 'short', + year: 'numeric', + month: '2-digit', + day: 'numeric' + }) + ); + this.eggHatchWavesText.setText(getEggHatchWavesMessage(egg.hatchWaves)); + this.eggGachaInfoText.setText(getEggGachaTypeDescriptor(this.scene, egg)); + } + + setCursor(cursor: integer): boolean { + let changed = false; + + let lastCursor = this.cursor; + + changed = super.setCursor(cursor); + + if (changed) { + this.cursorObj.setPosition(114 + 18 * (cursor % 11), 10 + 18 * Math.floor(cursor / 11)); + + if (lastCursor > -1) + this.iconAnimHandler.addOrUpdate(this.eggListIconContainer.getAt(lastCursor) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.NONE); + this.iconAnimHandler.addOrUpdate(this.eggListIconContainer.getAt(cursor) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.ACTIVE); + + this.setEggDetails(this.scene.gameData.eggs[cursor]); + } + + return changed; + } + + clear(): void { + super.clear(); + this.cursor = -1; + this.eggListContainer.setVisible(false); + this.iconAnimHandler.removeAll(); + this.eggListIconContainer.removeAll(true); + } +} \ No newline at end of file diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 244da125e..f6282e849 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -6,7 +6,10 @@ import * as Utils from "../utils"; export enum MenuOptions { SETTINGS, - ACHIEVEMENTS + ACHIEVEMENTS, + VOUCHERS, + EGG_LIST, + EGG_GACHA } export default class MenuUiHandler extends UiHandler { @@ -62,6 +65,7 @@ export default class MenuUiHandler extends UiHandler { const ui = this.getUi(); let success = false; + let error = false; if (button === Button.ACTION) { switch (this.cursor as MenuOptions) { @@ -73,6 +77,24 @@ export default class MenuUiHandler extends UiHandler { this.scene.ui.setOverlayMode(Mode.ACHIEVEMENTS); success = true; break; + case MenuOptions.VOUCHERS: + this.scene.ui.setOverlayMode(Mode.VOUCHERS); + success = true; + break; + case MenuOptions.EGG_LIST: + if (this.scene.gameData.eggs.length) { + this.scene.ui.revertMode(); + this.scene.ui.setOverlayMode(Mode.EGG_LIST); + success = true; + } else + error = true; + break; + case MenuOptions.EGG_GACHA: + this.scene.ui.revertMode(); + this.scene.ui.setOverlayMode(Mode.EGG_GACHA); + success = true; + break; + } } else if (button === Button.CANCEL) { success = true; @@ -93,6 +115,8 @@ export default class MenuUiHandler extends UiHandler { if (success) ui.playSelect(); + else if (error) + ui.playError(); return true; } diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index 29f7366e5..efa16f296 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -8,7 +8,6 @@ export enum PokemonIconAnimMode { } export default class PokemonIconAnimHandler { - private counter: Phaser.Tweens.Tween; private icons: Map; private toggled: boolean; @@ -22,7 +21,7 @@ export default class PokemonIconAnimHandler { for (let i of this.icons.keys()) i.y += this.getModeYDelta(this.icons.get(i)) * (this.toggled ? 1 : -1); }; - this.counter = scene.tweens.addCounter({ + scene.tweens.addCounter({ duration: Utils.fixedInt(200), from: 0, to: 1, @@ -70,4 +69,12 @@ export default class PokemonIconAnimHandler { this.icons.delete(i); } } + + removeAll(): void { + for (let i of this.icons.keys()) { + if (this.toggled) + i.y -= this.getModeYDelta(this.icons.get(i)); + this.icons.delete(i); + } + } } \ No newline at end of file diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index e6c002f72..1a71efc4c 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -25,850 +25,850 @@ export interface Starter { const gens = [ 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII' ]; export default class StarterSelectUiHandler extends MessageUiHandler { - private starterSelectContainer: Phaser.GameObjects.Container; - private starterSelectGenIconContainers: Phaser.GameObjects.Container[]; - private pokemonNumberText: Phaser.GameObjects.Text; - private pokemonSprite: Phaser.GameObjects.Sprite; - private pokemonNameText: Phaser.GameObjects.Text; - private pokemonGrowthRateLabelText: Phaser.GameObjects.Text; - private pokemonGrowthRateText: Phaser.GameObjects.Text; - private pokemonGenderText: Phaser.GameObjects.Text; - private pokemonAbilityLabelText: Phaser.GameObjects.Text; - private pokemonAbilityText: Phaser.GameObjects.Text; - private genOptionsText: Phaser.GameObjects.Text; - private instructionsText: Phaser.GameObjects.Text; - private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; - private statsContainer: StatsContainer; + private starterSelectContainer: Phaser.GameObjects.Container; + private starterSelectGenIconContainers: Phaser.GameObjects.Container[]; + private pokemonNumberText: Phaser.GameObjects.Text; + private pokemonSprite: Phaser.GameObjects.Sprite; + private pokemonNameText: Phaser.GameObjects.Text; + private pokemonGrowthRateLabelText: Phaser.GameObjects.Text; + private pokemonGrowthRateText: Phaser.GameObjects.Text; + private pokemonGenderText: Phaser.GameObjects.Text; + private pokemonAbilityLabelText: Phaser.GameObjects.Text; + private pokemonAbilityText: Phaser.GameObjects.Text; + private genOptionsText: Phaser.GameObjects.Text; + private instructionsText: Phaser.GameObjects.Text; + private starterSelectMessageBoxContainer: Phaser.GameObjects.Container; + private statsContainer: StatsContainer; - private genMode: boolean; - private statsMode: boolean; - private dexAttrCursor: bigint = 0n; - private genCursor: integer = 0; - private genScrollCursor: integer = 0; + private genMode: boolean; + private statsMode: boolean; + private dexAttrCursor: bigint = 0n; + private genCursor: integer = 0; + private genScrollCursor: integer = 0; - private genSpecies: PokemonSpecies[][] = []; - private lastSpecies: PokemonSpecies; - private speciesLoaded: Map = new Map(); - private starterGens: integer[] = []; - private starterCursors: integer[] = []; - private pokerusGens: integer[] = []; - private pokerusCursors: integer[] = []; - private starterAttr: bigint[] = []; - private speciesStarterDexEntry: DexEntry; - private canCycleShiny: boolean; - private canCycleForm: boolean; - private canCycleGender: boolean; - private canCycleAbility: boolean; - private value: integer = 0; + private genSpecies: PokemonSpecies[][] = []; + private lastSpecies: PokemonSpecies; + private speciesLoaded: Map = new Map(); + private starterGens: integer[] = []; + private starterCursors: integer[] = []; + private pokerusGens: integer[] = []; + private pokerusCursors: integer[] = []; + private starterAttr: bigint[] = []; + private speciesStarterDexEntry: DexEntry; + private canCycleShiny: boolean; + private canCycleForm: boolean; + private canCycleGender: boolean; + private canCycleAbility: boolean; + private value: integer = 0; - private assetLoadCancelled: Utils.BooleanHolder; - private cursorObj: Phaser.GameObjects.Image; - private starterCursorObjs: Phaser.GameObjects.Image[]; - private pokerusCursorObjs: Phaser.GameObjects.Image[]; - private starterIcons: Phaser.GameObjects.Sprite[]; - private genCursorObj: Phaser.GameObjects.Image; - private genCursorHighlightObj: Phaser.GameObjects.Image; - private valueLimitLabel: Phaser.GameObjects.Text; - private startCursorObj: Phaser.GameObjects.NineSlice; - private starterValueLabels: Phaser.GameObjects.Text[]; - private shinyIcons: Phaser.GameObjects.Image[]; + private assetLoadCancelled: Utils.BooleanHolder; + private cursorObj: Phaser.GameObjects.Image; + private starterCursorObjs: Phaser.GameObjects.Image[]; + private pokerusCursorObjs: Phaser.GameObjects.Image[]; + private starterIcons: Phaser.GameObjects.Sprite[]; + private genCursorObj: Phaser.GameObjects.Image; + private genCursorHighlightObj: Phaser.GameObjects.Image; + private valueLimitLabel: Phaser.GameObjects.Text; + private startCursorObj: Phaser.GameObjects.NineSlice; + private starterValueLabels: Phaser.GameObjects.Text[]; + private shinyIcons: Phaser.GameObjects.Image[]; - private iconAnimHandler: PokemonIconAnimHandler; + private iconAnimHandler: PokemonIconAnimHandler; - private starterSelectCallback: StarterSelectCallback; - - constructor(scene: BattleScene) { - super(scene, Mode.STARTER_SELECT); - } - - setup() { - const ui = this.getUi(); - - this.starterSelectContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); - this.starterSelectContainer.setVisible(false); - ui.add(this.starterSelectContainer); + private starterSelectCallback: StarterSelectCallback; - const bgColor = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x006860); - bgColor.setOrigin(0, 0); - this.starterSelectContainer.add(bgColor); + constructor(scene: BattleScene) { + super(scene, Mode.STARTER_SELECT); + } - const starterSelectBg = this.scene.add.image(1, 1, 'starter_select_bg'); - starterSelectBg.setOrigin(0, 0); - this.starterSelectContainer.add(starterSelectBg); + setup() { + const ui = this.getUi(); - this.iconAnimHandler = new PokemonIconAnimHandler(); - this.iconAnimHandler.setup(this.scene); + this.starterSelectContainer = this.scene.add.container(0, -this.scene.game.canvas.height / 6); + this.starterSelectContainer.setVisible(false); + ui.add(this.starterSelectContainer); - this.pokemonNumberText = addTextObject(this.scene, 17, 1, '000', TextStyle.SUMMARY); - this.pokemonNumberText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonNumberText); + const bgColor = this.scene.add.rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6, 0x006860); + bgColor.setOrigin(0, 0); + this.starterSelectContainer.add(bgColor); - this.pokemonNameText = addTextObject(this.scene, 6, 112, '', TextStyle.SUMMARY); - this.pokemonNameText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonNameText); + const starterSelectBg = this.scene.add.image(1, 1, 'starter_select_bg'); + starterSelectBg.setOrigin(0, 0); + this.starterSelectContainer.add(starterSelectBg); - this.pokemonGrowthRateLabelText = addTextObject(this.scene, 8, 103, 'Growth Rate:', TextStyle.SUMMARY, { fontSize: '48px' }); - this.pokemonGrowthRateLabelText.setOrigin(0, 0); - this.pokemonGrowthRateLabelText.setVisible(false); - this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); + this.iconAnimHandler = new PokemonIconAnimHandler(); + this.iconAnimHandler.setup(this.scene); - this.pokemonGrowthRateText = addTextObject(this.scene, 44, 103, '', TextStyle.SUMMARY_RED, { fontSize: '48px' }); - this.pokemonGrowthRateText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonGrowthRateText); + this.pokemonNumberText = addTextObject(this.scene, 17, 1, '000', TextStyle.SUMMARY); + this.pokemonNumberText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonNumberText); - this.pokemonGenderText = addTextObject(this.scene, 96, 112, '', TextStyle.SUMMARY); - this.pokemonGenderText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonGenderText); + this.pokemonNameText = addTextObject(this.scene, 6, 112, '', TextStyle.SUMMARY); + this.pokemonNameText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonNameText); - this.pokemonAbilityLabelText = addTextObject(this.scene, 6, 126, 'Ability:', TextStyle.SUMMARY, { fontSize: '64px' }); - this.pokemonAbilityLabelText.setOrigin(0, 0); - this.pokemonAbilityLabelText.setVisible(false); - this.starterSelectContainer.add(this.pokemonAbilityLabelText); + this.pokemonGrowthRateLabelText = addTextObject(this.scene, 8, 103, 'Growth Rate:', TextStyle.SUMMARY, { fontSize: '48px' }); + this.pokemonGrowthRateLabelText.setOrigin(0, 0); + this.pokemonGrowthRateLabelText.setVisible(false); + this.starterSelectContainer.add(this.pokemonGrowthRateLabelText); - this.pokemonAbilityText = addTextObject(this.scene, 38, 126, '', TextStyle.SUMMARY, { fontSize: '64px' }); - this.pokemonAbilityText.setOrigin(0, 0); - this.starterSelectContainer.add(this.pokemonAbilityText); + this.pokemonGrowthRateText = addTextObject(this.scene, 44, 103, '', TextStyle.SUMMARY_RED, { fontSize: '48px' }); + this.pokemonGrowthRateText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonGrowthRateText); - this.genOptionsText = addTextObject(this.scene, 124, 7, '', TextStyle.WINDOW, { fontSize: 72, lineSpacing: 39, align: 'center' }); - this.genOptionsText.setShadowOffset(4.5, 4.5); - this.genOptionsText.setOrigin(0.5, 0); - this.starterSelectContainer.add(this.genOptionsText); + this.pokemonGenderText = addTextObject(this.scene, 96, 112, '', TextStyle.SUMMARY); + this.pokemonGenderText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonGenderText); - this.updateGenOptions(); + this.pokemonAbilityLabelText = addTextObject(this.scene, 6, 126, 'Ability:', TextStyle.SUMMARY, { fontSize: '64px' }); + this.pokemonAbilityLabelText.setOrigin(0, 0); + this.pokemonAbilityLabelText.setVisible(false); + this.starterSelectContainer.add(this.pokemonAbilityLabelText); - this.starterSelectGenIconContainers = new Array(gens.length).fill(null).map((_, i) => { - const container = this.scene.add.container(149, 9); - if (i) - container.setVisible(false); - this.starterSelectContainer.add(container); - return container; - }); + this.pokemonAbilityText = addTextObject(this.scene, 38, 126, '', TextStyle.SUMMARY, { fontSize: '64px' }); + this.pokemonAbilityText.setOrigin(0, 0); + this.starterSelectContainer.add(this.pokemonAbilityText); - this.pokerusCursorObjs = new Array(3).fill(null).map(() => { - const cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor_pokerus'); - cursorObj.setVisible(false); - cursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(cursorObj); - return cursorObj; - }); + this.genOptionsText = addTextObject(this.scene, 124, 7, '', TextStyle.WINDOW, { fontSize: 72, lineSpacing: 39, align: 'center' }); + this.genOptionsText.setShadowOffset(4.5, 4.5); + this.genOptionsText.setOrigin(0.5, 0); + this.starterSelectContainer.add(this.genOptionsText); - this.starterCursorObjs = new Array(3).fill(null).map(() => { - const cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor_highlight'); - cursorObj.setVisible(false); - cursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(cursorObj); - return cursorObj; - }); + this.updateGenOptions(); - this.cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor'); - this.cursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.cursorObj); + this.starterSelectGenIconContainers = new Array(gens.length).fill(null).map((_, i) => { + const container = this.scene.add.container(149, 9); + if (i) + container.setVisible(false); + this.starterSelectContainer.add(container); + return container; + }); - this.genCursorHighlightObj = this.scene.add.image(111, 5, 'starter_select_gen_cursor_highlight'); - this.genCursorHighlightObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.genCursorHighlightObj); + this.pokerusCursorObjs = new Array(3).fill(null).map(() => { + const cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor_pokerus'); + cursorObj.setVisible(false); + cursorObj.setOrigin(0, 0); + this.starterSelectContainer.add(cursorObj); + return cursorObj; + }); - this.genCursorObj = this.scene.add.image(111, 5, 'starter_select_gen_cursor'); - this.genCursorObj.setVisible(false); - this.genCursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.genCursorObj); - - this.valueLimitLabel = addTextObject(this.scene, 124, 150, '0/10', TextStyle.TOOLTIP_CONTENT); - this.valueLimitLabel.setOrigin(0.5, 0); - this.starterSelectContainer.add(this.valueLimitLabel); + this.starterCursorObjs = new Array(3).fill(null).map(() => { + const cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor_highlight'); + cursorObj.setVisible(false); + cursorObj.setOrigin(0, 0); + this.starterSelectContainer.add(cursorObj); + return cursorObj; + }); - const startLabel = addTextObject(this.scene, 124, 162, 'Start', TextStyle.TOOLTIP_CONTENT); - startLabel.setOrigin(0.5, 0); - this.starterSelectContainer.add(startLabel); + this.cursorObj = this.scene.add.image(0, 0, 'starter_select_cursor'); + this.cursorObj.setOrigin(0, 0); + this.starterSelectContainer.add(this.cursorObj); - this.startCursorObj = this.scene.add.nineslice(111, 160, 'starter_select_cursor', null, 26, 15, 1, 1, 1, 1); - this.startCursorObj.setVisible(false); - this.startCursorObj.setOrigin(0, 0); - this.starterSelectContainer.add(this.startCursorObj); + this.genCursorHighlightObj = this.scene.add.image(111, 5, 'starter_select_gen_cursor_highlight'); + this.genCursorHighlightObj.setOrigin(0, 0); + this.starterSelectContainer.add(this.genCursorHighlightObj); - const starterSpecies: Species[] = []; - - for (let g = 0; g < this.starterSelectGenIconContainers.length; g++) { - let s = 0; - this.genSpecies.push([]); + this.genCursorObj = this.scene.add.image(111, 5, 'starter_select_gen_cursor'); + this.genCursorObj.setVisible(false); + this.genCursorObj.setOrigin(0, 0); + this.starterSelectContainer.add(this.genCursorObj); + + this.valueLimitLabel = addTextObject(this.scene, 124, 150, '0/10', TextStyle.TOOLTIP_CONTENT); + this.valueLimitLabel.setOrigin(0.5, 0); + this.starterSelectContainer.add(this.valueLimitLabel); - for (let species of allSpecies) { - if (!speciesStarterValues.hasOwnProperty(species.speciesId) || species.generation !== g + 1) - continue; - starterSpecies.push(species.speciesId); - this.speciesLoaded.set(species.speciesId, false); - this.genSpecies[g].push(species); - const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species); - const defaultProps = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); - const x = (s % 9) * 18; - const y = Math.floor(s / 9) * 18; - const icon = this.scene.add.sprite(x - 2, y + 2, species.getIconAtlasKey(defaultProps.formIndex)); - icon.setScale(0.5); - icon.setOrigin(0, 0); - icon.setFrame(species.getIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny)); - icon.setTintFill(0); - this.starterSelectGenIconContainers[g].add(icon); - this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); - s++; - } - } + const startLabel = addTextObject(this.scene, 124, 162, 'Start', TextStyle.TOOLTIP_CONTENT); + startLabel.setOrigin(0.5, 0); + this.starterSelectContainer.add(startLabel); - this.starterIcons = new Array(3).fill(null).map((_, i) => { - const icon = this.scene.add.sprite(113, 97 + 16 * i, 'pokemon_icons_0'); + this.startCursorObj = this.scene.add.nineslice(111, 160, 'starter_select_cursor', null, 26, 15, 1, 1, 1, 1); + this.startCursorObj.setVisible(false); + this.startCursorObj.setOrigin(0, 0); + this.starterSelectContainer.add(this.startCursorObj); + + const starterSpecies: Species[] = []; + + for (let g = 0; g < this.starterSelectGenIconContainers.length; g++) { + let s = 0; + this.genSpecies.push([]); + + for (let species of allSpecies) { + if (!speciesStarterValues.hasOwnProperty(species.speciesId) || species.generation !== g + 1) + continue; + starterSpecies.push(species.speciesId); + this.speciesLoaded.set(species.speciesId, false); + this.genSpecies[g].push(species); + const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species); + const defaultProps = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + const x = (s % 9) * 18; + const y = Math.floor(s / 9) * 18; + const icon = this.scene.add.sprite(x - 2, y + 2, species.getIconAtlasKey(defaultProps.formIndex)); icon.setScale(0.5); icon.setOrigin(0, 0); - icon.setFrame('unknown'); - this.starterSelectContainer.add(icon); - this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE); - return icon; - }); + icon.setFrame(species.getIconId(defaultProps.female, defaultProps.formIndex, defaultProps.shiny)); + icon.setTintFill(0); + this.starterSelectGenIconContainers[g].add(icon); + this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE); + s++; + } + } - this.starterValueLabels = new Array(81).fill(null).map((_, i) => { - const x = (i % 9) * 18; - const y = Math.floor(i / 9) * 18; - const ret = addTextObject(this.scene, x + 150, y + 11, '0', TextStyle.WINDOW, { fontSize: '32px' }); - ret.setShadowOffset(2, 2); - ret.setOrigin(0, 0); - ret.setVisible(false); - this.starterSelectContainer.add(ret); - return ret; - }); + this.starterIcons = new Array(3).fill(null).map((_, i) => { + const icon = this.scene.add.sprite(113, 97 + 16 * i, 'pokemon_icons_0'); + icon.setScale(0.5); + icon.setOrigin(0, 0); + icon.setFrame('unknown'); + this.starterSelectContainer.add(icon); + this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE); + return icon; + }); - this.shinyIcons = new Array(81).fill(null).map((_, i) => { - const x = (i % 9) * 18; - const y = Math.floor(i / 9) * 18; - const ret = this.scene.add.image(x + 161, y + 11, 'shiny_star'); - ret.setOrigin(0, 0); - ret.setScale(0.5); - ret.setVisible(false); - this.starterSelectContainer.add(ret); - return ret; - }); + this.starterValueLabels = new Array(81).fill(null).map((_, i) => { + const x = (i % 9) * 18; + const y = Math.floor(i / 9) * 18; + const ret = addTextObject(this.scene, x + 150, y + 11, '0', TextStyle.WINDOW, { fontSize: '32px' }); + ret.setShadowOffset(2, 2); + ret.setOrigin(0, 0); + ret.setVisible(false); + this.starterSelectContainer.add(ret); + return ret; + }); - this.pokemonSprite = this.scene.add.sprite(53, 63, `pkmn__sub`); - this.starterSelectContainer.add(this.pokemonSprite); + this.shinyIcons = new Array(81).fill(null).map((_, i) => { + const x = (i % 9) * 18; + const y = Math.floor(i / 9) * 18; + const ret = this.scene.add.image(x + 161, y + 11, 'shiny_star'); + ret.setOrigin(0, 0); + ret.setScale(0.5); + ret.setVisible(false); + this.starterSelectContainer.add(ret); + return ret; + }); - this.instructionsText = addTextObject(this.scene, 4, 140, '', TextStyle.PARTY, { fontSize: '42px' }); - this.starterSelectContainer.add(this.instructionsText); + this.pokemonSprite = this.scene.add.sprite(53, 63, `pkmn__sub`); + this.starterSelectContainer.add(this.pokemonSprite); - this.starterSelectMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6); - this.starterSelectMessageBoxContainer.setVisible(false); - this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); + this.instructionsText = addTextObject(this.scene, 4, 140, '', TextStyle.PARTY, { fontSize: '42px' }); + this.starterSelectContainer.add(this.instructionsText); - const starterSelectMessageBox = this.scene.add.image(0, 0, 'starter_select_message'); - starterSelectMessageBox.setOrigin(0, 1); - this.starterSelectMessageBoxContainer.add(starterSelectMessageBox); + this.starterSelectMessageBoxContainer = this.scene.add.container(0, this.scene.game.canvas.height / 6); + this.starterSelectMessageBoxContainer.setVisible(false); + this.starterSelectContainer.add(this.starterSelectMessageBoxContainer); - this.message = addTextObject(this.scene, 8, -8, '', TextStyle.WINDOW, { maxLines: 1 }); - this.message.setOrigin(0, 1); - this.starterSelectMessageBoxContainer.add(this.message); + const starterSelectMessageBox = this.scene.add.image(0, 0, 'starter_select_message'); + starterSelectMessageBox.setOrigin(0, 1); + this.starterSelectMessageBoxContainer.add(starterSelectMessageBox); - const date = new Date(); - date.setUTCHours(0, 0, 0, 0); + this.message = addTextObject(this.scene, 8, -8, '', TextStyle.WINDOW, { maxLines: 1 }); + this.message.setOrigin(0, 1); + this.starterSelectMessageBoxContainer.add(this.message); - this.scene.executeWithSeedOffset(() => { - for (let c = 0; c < 3; c++) { - let randomSpeciesId: Species; - let species: PokemonSpecies; - let pokerusCursor: integer; + const date = new Date(); + date.setUTCHours(0, 0, 0, 0); - const generateSpecies = () => { - randomSpeciesId = Phaser.Math.RND.pick(starterSpecies); - species = getPokemonSpecies(randomSpeciesId); - pokerusCursor = this.genSpecies[species.generation - 1].indexOf(species); - }; - - let dupe = false; + this.scene.executeWithSeedOffset(() => { + for (let c = 0; c < 3; c++) { + let randomSpeciesId: Species; + let species: PokemonSpecies; + let pokerusCursor: integer; - do { - generateSpecies(); + const generateSpecies = () => { + randomSpeciesId = Phaser.Math.RND.pick(starterSpecies); + species = getPokemonSpecies(randomSpeciesId); + pokerusCursor = this.genSpecies[species.generation - 1].indexOf(species); + }; + + let dupe = false; - for (let pc = 0; pc < c; pc++) { - if (this.pokerusGens[pc] === species.generation -1 && this.pokerusCursors[pc] === pokerusCursor) { - dupe = true; + do { + generateSpecies(); + + for (let pc = 0; pc < c; pc++) { + if (this.pokerusGens[pc] === species.generation -1 && this.pokerusCursors[pc] === pokerusCursor) { + dupe = true; + break; + } + } + } while (dupe); + + this.pokerusGens.push(species.generation - 1); + this.pokerusCursors.push(pokerusCursor); + this.pokerusCursorObjs[c].setPosition(148 + 18 * (pokerusCursor % 9), 10 + 18 * Math.floor(pokerusCursor / 9)); + } + }, 0, date.getTime().toString()); + + this.statsContainer = new StatsContainer(this.scene, 6, 16); + + this.scene.add.existing(this.statsContainer); + + this.statsContainer.setVisible(false); + + this.starterSelectContainer.add(this.statsContainer); + + this.updateInstructions(); + } + + show(args: any[]): void { + if (args.length >= 1 && args[0] instanceof Function) { + super.show(args); + + for (let g = 0; g < this.genSpecies.length; g++) { + this.genSpecies[g].forEach((species, s) => { + const dexEntry = this.scene.gameData.dexData[species.speciesId]; + const icon = this.starterSelectGenIconContainers[g].getAt(s) as Phaser.GameObjects.Sprite; + if (dexEntry.caughtAttr) + icon.clearTint(); + }); + } + + this.starterSelectCallback = args[0] as StarterSelectCallback; + + this.starterSelectContainer.setVisible(true); + + this.setGenMode(false); + this.setCursor(0); + this.setGenMode(true); + this.setCursor(0); + } + } + + showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer) { + super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); + + this.starterSelectMessageBoxContainer.setVisible(true); + } + + processInput(button: Button): boolean { + const ui = this.getUi(); + + let success = false; + let error = false; + + if (this.startCursorObj.visible) { + switch (button) { + case Button.ACTION: + if (this.tryStart()) + success = true; + else + error = true; + break; + case Button.UP: + this.startCursorObj.setVisible(false); + this.setGenMode(true); + success = true; + break; + case Button.RIGHT: + this.startCursorObj.setVisible(false); + this.setGenMode(false); + success = true; + break; + } + } else if (this.genMode) { + switch (button) { + case Button.UP: + if (this.genCursor) + success = this.setCursor(this.genCursor - 1); + break; + case Button.DOWN: + if (this.genCursor < 4) + success = this.setCursor(this.genCursor + 1); + else { + this.startCursorObj.setVisible(true); + this.setGenMode(true); + success = true; + } + break; + case Button.RIGHT: + success = this.setGenMode(false); + break; + } + } else { + if (button === Button.ACTION) { + if (!this.speciesStarterDexEntry?.caughtAttr) + error = true; + else if (this.starterCursors.length < 3) { + ui.setModeWithoutClear(Mode.OPTION_SELECT, 'Add to Party', () => { + ui.setMode(Mode.STARTER_SELECT); + let isDupe = false; + for (let s = 0; s < this.starterCursors.length; s++) { + if (this.starterGens[s] === this.getGenCursorWithScroll() && this.starterCursors[s] === this.cursor) { + isDupe = true; break; } } - } while (dupe); - - this.pokerusGens.push(species.generation - 1); - this.pokerusCursors.push(pokerusCursor); - this.pokerusCursorObjs[c].setPosition(148 + 18 * (pokerusCursor % 9), 10 + 18 * Math.floor(pokerusCursor / 9)); - } - }, 0, date.getTime().toString()); - - this.statsContainer = new StatsContainer(this.scene, 6, 16); - - this.scene.add.existing(this.statsContainer); - - this.statsContainer.setVisible(false); - - this.starterSelectContainer.add(this.statsContainer); - - this.updateInstructions(); - } - - show(args: any[]): void { - if (args.length >= 1 && args[0] instanceof Function) { - super.show(args); - - for (let g = 0; g < this.genSpecies.length; g++) { - this.genSpecies[g].forEach((species, s) => { - const dexEntry = this.scene.gameData.dexData[species.speciesId]; - const icon = this.starterSelectGenIconContainers[g].getAt(s) as Phaser.GameObjects.Sprite; - if (dexEntry.caughtAttr) - icon.clearTint(); + const species = this.genSpecies[this.getGenCursorWithScroll()][this.cursor]; + if (!isDupe && this.tryUpdateValue(speciesStarterValues[species.speciesId])) { + const cursorObj = this.starterCursorObjs[this.starterCursors.length]; + cursorObj.setVisible(true); + cursorObj.setPosition(this.cursorObj.x, this.cursorObj.y); + const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor); + this.starterIcons[this.starterCursors.length].setTexture(species.getIconAtlasKey(props.formIndex)); + this.starterIcons[this.starterCursors.length].setFrame(species.getIconId(props.female, props.formIndex, props.shiny)); + this.starterGens.push(this.getGenCursorWithScroll()); + this.starterCursors.push(this.cursor); + this.starterAttr.push(this.dexAttrCursor); + if (this.speciesLoaded.get(species.speciesId)) + species.cry(this.scene); + if (this.starterCursors.length === 3) + this.tryStart(); + this.updateInstructions(); + ui.playSelect(); + } else + ui.playError(); + }, 'Toggle IVs', () => { + this.toggleStatsMode(); + ui.setMode(Mode.STARTER_SELECT); }); + success = true; } - - this.starterSelectCallback = args[0] as StarterSelectCallback; - - this.starterSelectContainer.setVisible(true); - - this.setGenMode(false); - this.setCursor(0); - this.setGenMode(true); - this.setCursor(0); - } - } - - showText(text: string, delay?: integer, callback?: Function, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer) { - super.showText(text, delay, callback, callbackDelay, prompt, promptDelay); - - this.starterSelectMessageBoxContainer.setVisible(true); - } - - processInput(button: Button): boolean { - const ui = this.getUi(); - - let success = false; - let error = false; - - if (this.startCursorObj.visible) { - switch (button) { - case Button.ACTION: - if (this.tryStart()) - success = true; - else - error = true; - break; - case Button.UP: - this.startCursorObj.setVisible(false); - this.setGenMode(true); - success = true; - break; - case Button.RIGHT: - this.startCursorObj.setVisible(false); - this.setGenMode(false); - success = true; - break; + } else if (button === Button.CANCEL) { + if (this.statsMode) { + this.toggleStatsMode(false); + success = true; + } else if (this.starterCursors.length) { + this.popStarter(); + success = true; + this.updateInstructions(); } - } else if (this.genMode) { + } else { + const genStarters = this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAll().length; + const rows = Math.ceil(genStarters / 9); + const row = Math.floor(this.cursor / 9); + const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor); switch (button) { - case Button.UP: - if (this.genCursor) - success = this.setCursor(this.genCursor - 1); + case Button.CYCLE_SHINY: + if (this.canCycleShiny) { + this.setSpeciesDetails(this.lastSpecies, !props.shiny, undefined, undefined, undefined); + if (this.dexAttrCursor & DexAttr.SHINY) + this.scene.playSound('sparkle'); + else + success = true; + } break; - case Button.DOWN: - if (this.genCursor < 4) - success = this.setCursor(this.genCursor + 1); - else { - this.startCursorObj.setVisible(true); - this.setGenMode(true); + case Button.CYCLE_FORM: + if (this.canCycleForm) { + const formCount = this.lastSpecies.forms.length; + let newFormIndex = props.formIndex; + do { + newFormIndex = (newFormIndex + 1) % formCount; + if (this.speciesStarterDexEntry.caughtAttr & this.scene.gameData.getFormAttr(newFormIndex)) + break; + } while (newFormIndex !== props.formIndex); + this.setSpeciesDetails(this.lastSpecies, undefined, newFormIndex, undefined, undefined); success = true; } break; + case Button.CYCLE_GENDER: + if (this.canCycleGender) { + this.setSpeciesDetails(this.lastSpecies, undefined, undefined, !props.female, undefined); + success = true; + } + break; + case Button.CYCLE_ABILITY: + if (this.canCycleAbility) { + const abilityCount = this.lastSpecies.getAbilityCount(); + let newAbilityIndex = props.abilityIndex; + do { + newAbilityIndex = (newAbilityIndex + 1) % abilityCount; + if (!newAbilityIndex) { + if (this.speciesStarterDexEntry.caughtAttr & DexAttr.ABILITY_1) + break; + } else if (newAbilityIndex === 1) { + if (this.speciesStarterDexEntry.caughtAttr & (this.lastSpecies.ability2 ? DexAttr.ABILITY_2 : DexAttr.ABILITY_HIDDEN)) + break; + } else { + if (this.speciesStarterDexEntry.caughtAttr & DexAttr.ABILITY_HIDDEN) + break; + } + } while (newAbilityIndex !== props.abilityIndex); + this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, newAbilityIndex); + success = true; + } + break; + case Button.UP: + if (row) + success = this.setCursor(this.cursor - 9); + break; + case Button.DOWN: + if (row < rows - 2 || (row < rows - 1 && this.cursor % 9 <= (genStarters - 1) % 9)) + success = this.setCursor(this.cursor + 9); + break; + case Button.LEFT: + if (this.cursor % 9) + success = this.setCursor(this.cursor - 1); + else { + if (row >= Math.min(5, rows - 1)) + this.startCursorObj.setVisible(true); + success = this.setGenMode(true); + } + break; case Button.RIGHT: - success = this.setGenMode(false); + if (this.cursor % 9 < (row < rows - 1 ? 8 : (genStarters - 1) % 9)) + success = this.setCursor(this.cursor + 1); break; } - } else { - if (button === Button.ACTION) { - if (!this.speciesStarterDexEntry?.caughtAttr) - error = true; - else if (this.starterCursors.length < 3) { - ui.setModeWithoutClear(Mode.OPTION_SELECT, 'Add to Party', () => { - ui.setMode(Mode.STARTER_SELECT); - let isDupe = false; - for (let s = 0; s < this.starterCursors.length; s++) { - if (this.starterGens[s] === this.getGenCursorWithScroll() && this.starterCursors[s] === this.cursor) { - isDupe = true; - break; - } - } - const species = this.genSpecies[this.getGenCursorWithScroll()][this.cursor]; - if (!isDupe && this.tryUpdateValue(speciesStarterValues[species.speciesId])) { - const cursorObj = this.starterCursorObjs[this.starterCursors.length]; - cursorObj.setVisible(true); - cursorObj.setPosition(this.cursorObj.x, this.cursorObj.y); - const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor); - this.starterIcons[this.starterCursors.length].setTexture(species.getIconAtlasKey(props.formIndex)); - this.starterIcons[this.starterCursors.length].setFrame(species.getIconId(props.female, props.formIndex, props.shiny)); - this.starterGens.push(this.getGenCursorWithScroll()); - this.starterCursors.push(this.cursor); - this.starterAttr.push(this.dexAttrCursor); - if (this.speciesLoaded.get(species.speciesId)) - species.cry(this.scene); - if (this.starterCursors.length === 3) - this.tryStart(); - this.updateInstructions(); - ui.playSelect(); - } else - ui.playError(); - }, 'Toggle IVs', () => { - this.toggleStatsMode(); - ui.setMode(Mode.STARTER_SELECT); - }); - success = true; - } - } else if (button === Button.CANCEL) { - if (this.statsMode) { - this.toggleStatsMode(false); - success = true; - } else if (this.starterCursors.length) { - this.popStarter(); - success = true; - this.updateInstructions(); - } - } else { - const genStarters = this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAll().length; - const rows = Math.ceil(genStarters / 9); - const row = Math.floor(this.cursor / 9); - const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, this.dexAttrCursor); - switch (button) { - case Button.CYCLE_SHINY: - if (this.canCycleShiny) { - this.setSpeciesDetails(this.lastSpecies, !props.shiny, undefined, undefined, undefined); - if (this.dexAttrCursor & DexAttr.SHINY) - this.scene.playSound('sparkle'); - else - success = true; - } - break; - case Button.CYCLE_FORM: - if (this.canCycleForm) { - const formCount = this.lastSpecies.forms.length; - let newFormIndex = props.formIndex; - do { - newFormIndex = (newFormIndex + 1) % formCount; - if (this.speciesStarterDexEntry.caughtAttr & this.scene.gameData.getFormAttr(newFormIndex)) - break; - } while (newFormIndex !== props.formIndex); - this.setSpeciesDetails(this.lastSpecies, undefined, newFormIndex, undefined, undefined); - success = true; - } - break; - case Button.CYCLE_GENDER: - if (this.canCycleGender) { - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, !props.female, undefined); - success = true; - } - break; - case Button.CYCLE_ABILITY: - if (this.canCycleAbility) { - const abilityCount = this.lastSpecies.getAbilityCount(); - let newAbilityIndex = props.abilityIndex; - do { - newAbilityIndex = (newAbilityIndex + 1) % abilityCount; - if (!newAbilityIndex) { - if (this.speciesStarterDexEntry.caughtAttr & DexAttr.ABILITY_1) - break; - } else if (newAbilityIndex === 1) { - if (this.speciesStarterDexEntry.caughtAttr & (this.lastSpecies.ability2 ? DexAttr.ABILITY_2 : DexAttr.ABILITY_HIDDEN)) - break; - } else { - if (this.speciesStarterDexEntry.caughtAttr & DexAttr.ABILITY_HIDDEN) - break; - } - } while (newAbilityIndex !== props.abilityIndex); - this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, newAbilityIndex); - success = true; - } - break; - case Button.UP: - if (row) - success = this.setCursor(this.cursor - 9); - break; - case Button.DOWN: - if (row < rows - 2 || (row < rows - 1 && this.cursor % 9 <= (genStarters - 1) % 9)) - success = this.setCursor(this.cursor + 9); - break; - case Button.LEFT: - if (this.cursor % 9) - success = this.setCursor(this.cursor - 1); - else { - if (row >= Math.min(5, rows - 1)) - this.startCursorObj.setVisible(true); - success = this.setGenMode(true); - } - break; - case Button.RIGHT: - if (this.cursor % 9 < (row < rows - 1 ? 8 : (genStarters - 1) % 9)) - success = this.setCursor(this.cursor + 1); - break; - } - } } - - if (success) - ui.playSelect(); - else if (error) - ui.playError(); - - return success || error; - } - - updateInstructions(): void { - let instructionLines = [ - 'Arrow Keys/WASD: Move' - ]; - let cycleInstructionLines = []; - if (!this.genMode) - instructionLines.push('A/Space/Enter: Select'); - if (this.starterCursors.length) - instructionLines.push('X/Backspace/Esc: Undo'); - if (this.speciesStarterDexEntry?.caughtAttr) { - if (this.canCycleShiny) - cycleInstructionLines.push('R: Cycle Shiny'); - if (this.canCycleForm) - cycleInstructionLines.push('F: Cycle Form'); - if (this.canCycleGender) - cycleInstructionLines.push('G: Cycle Gender'); - if (this.canCycleAbility) - cycleInstructionLines.push('E: Cycle Ability'); - } - - if (cycleInstructionLines.length > 2) { - cycleInstructionLines[0] += ' | ' + cycleInstructionLines.splice(1, 1); - if (cycleInstructionLines.length > 2) - cycleInstructionLines[1] += ' | ' + cycleInstructionLines.splice(2, 1); - } - - for (let cil of cycleInstructionLines) - instructionLines.push(cil); - - this.instructionsText.setText(instructionLines.join('\n')); } - setCursor(cursor: integer): boolean { - let changed = false; + if (success) + ui.playSelect(); + else if (error) + ui.playError(); - if (this.genMode) { - changed = this.genCursor !== cursor; - - let genCursorWithScroll = this.getGenCursorWithScroll(); - - if (!cursor && this.genScrollCursor) { - this.genScrollCursor--; - cursor++; - this.updateGenOptions(); - } else if (cursor === 4 && this.genScrollCursor < gens.length - 5) { - this.genScrollCursor++; - cursor--; - this.updateGenOptions(); - } - - if (genCursorWithScroll !== undefined) - this.starterSelectGenIconContainers[genCursorWithScroll].setVisible(false); - this.cursor = 0; - this.genCursor = cursor; - genCursorWithScroll = this.getGenCursorWithScroll(); - this.genCursorObj.setY(5 + 17 * this.genCursor); - this.genCursorHighlightObj.setY(this.genCursorObj.y); - this.starterSelectGenIconContainers[genCursorWithScroll].setVisible(true); - - for (let s = 0; s < this.starterCursorObjs.length; s++) - this.starterCursorObjs[s].setVisible(this.starterGens[s] === genCursorWithScroll); - for (let s = 0; s < this.pokerusCursorObjs.length; s++) - this.pokerusCursorObjs[s].setVisible(this.pokerusGens[s] === genCursorWithScroll); - - const genLimit = this.genSpecies[genCursorWithScroll].length; - for (let s = 0; s < 81; s++) { - const slotVisible = s < genLimit && !!(this.scene.gameData.dexData[this.genSpecies[genCursorWithScroll][s].speciesId].caughtAttr); - this.starterValueLabels[s].setText(slotVisible ? speciesStarterValues[this.genSpecies[genCursorWithScroll][s].speciesId] : 0); - this.starterValueLabels[s].setVisible(slotVisible); - this.shinyIcons[s].setVisible(slotVisible && !!(this.scene.gameData.dexData[this.genSpecies[genCursorWithScroll][s].speciesId].caughtAttr & DexAttr.SHINY)); - } - } else { - changed = super.setCursor(cursor); - - this.cursorObj.setPosition(148 + 18 * (cursor % 9), 10 + 18 * Math.floor(cursor / 9)); - - this.setSpecies(this.genSpecies[this.getGenCursorWithScroll()][cursor]); - - this.updateInstructions(); - } + return success || error; + } - return changed; + updateInstructions(): void { + let instructionLines = [ + 'Arrow Keys/WASD: Move' + ]; + let cycleInstructionLines = []; + if (!this.genMode) + instructionLines.push('A/Space/Enter: Select'); + if (this.starterCursors.length) + instructionLines.push('X/Backspace/Esc: Undo'); + if (this.speciesStarterDexEntry?.caughtAttr) { + if (this.canCycleShiny) + cycleInstructionLines.push('R: Cycle Shiny'); + if (this.canCycleForm) + cycleInstructionLines.push('F: Cycle Form'); + if (this.canCycleGender) + cycleInstructionLines.push('G: Cycle Gender'); + if (this.canCycleAbility) + cycleInstructionLines.push('E: Cycle Ability'); } - getGenCursorWithScroll(): integer { - return this.genCursor !== undefined - ? this.genCursor + this.genScrollCursor - : undefined; + if (cycleInstructionLines.length > 2) { + cycleInstructionLines[0] += ' | ' + cycleInstructionLines.splice(1, 1); + if (cycleInstructionLines.length > 2) + cycleInstructionLines[1] += ' | ' + cycleInstructionLines.splice(2, 1); } - updateGenOptions(): void { - let text = ''; - for (let g = this.genScrollCursor; g <= this.genScrollCursor + 4; g++) { - let optionText = gens[g]; - if (g === this.genScrollCursor && this.genScrollCursor) - optionText = '↑'; - else if (g === this.genScrollCursor + 4 && this.genScrollCursor < gens.length - 5) - optionText = '↓' - text += `${text ? '\n' : ''}${optionText}`; - } - this.genOptionsText.setText(text); - } + for (let cil of cycleInstructionLines) + instructionLines.push(cil); - setGenMode(genMode: boolean): boolean { - this.genCursorObj.setVisible(genMode && !this.startCursorObj.visible); - this.cursorObj.setVisible(!genMode && !this.startCursorObj.visible); - - if (genMode !== this.genMode) { - this.genMode = genMode; + this.instructionsText.setText(instructionLines.join('\n')); + } - this.setCursor(genMode ? this.genCursor : this.cursor); - if (genMode) - this.setSpecies(null); + setCursor(cursor: integer): boolean { + let changed = false; - return true; + if (this.genMode) { + changed = this.genCursor !== cursor; + + let genCursorWithScroll = this.getGenCursorWithScroll(); + + if (!cursor && this.genScrollCursor) { + this.genScrollCursor--; + cursor++; + this.updateGenOptions(); + } else if (cursor === 4 && this.genScrollCursor < gens.length - 5) { + this.genScrollCursor++; + cursor--; + this.updateGenOptions(); } - return false; - } + if (genCursorWithScroll !== undefined) + this.starterSelectGenIconContainers[genCursorWithScroll].setVisible(false); + this.cursor = 0; + this.genCursor = cursor; + genCursorWithScroll = this.getGenCursorWithScroll(); + this.genCursorObj.setY(5 + 17 * this.genCursor); + this.genCursorHighlightObj.setY(this.genCursorObj.y); + this.starterSelectGenIconContainers[genCursorWithScroll].setVisible(true); - setSpecies(species: PokemonSpecies) { - this.speciesStarterDexEntry = species ? this.scene.gameData.dexData[species.speciesId] : null; - this.dexAttrCursor = species ? this.scene.gameData.getSpeciesDefaultDexAttr(species) : 0n; + for (let s = 0; s < this.starterCursorObjs.length; s++) + this.starterCursorObjs[s].setVisible(this.starterGens[s] === genCursorWithScroll); + for (let s = 0; s < this.pokerusCursorObjs.length; s++) + this.pokerusCursorObjs[s].setVisible(this.pokerusGens[s] === genCursorWithScroll); - if (this.statsMode) { - if (this.speciesStarterDexEntry?.caughtAttr) { - this.statsContainer.setVisible(true); - this.showStats(); - } else { - this.statsContainer.setVisible(false); - this.statsContainer.updateIvs(null); - } + const genLimit = this.genSpecies[genCursorWithScroll].length; + for (let s = 0; s < 81; s++) { + const slotVisible = s < genLimit && !!(this.scene.gameData.dexData[this.genSpecies[genCursorWithScroll][s].speciesId].caughtAttr); + this.starterValueLabels[s].setText(slotVisible ? speciesStarterValues[this.genSpecies[genCursorWithScroll][s].speciesId] : 0); + this.starterValueLabels[s].setVisible(slotVisible); + this.shinyIcons[s].setVisible(slotVisible && !!(this.scene.gameData.dexData[this.genSpecies[genCursorWithScroll][s].speciesId].caughtAttr & DexAttr.SHINY)); } + } else { + changed = super.setCursor(cursor); - if (this.lastSpecies) { - const dexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(this.lastSpecies); - const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr); - const lastSpeciesIcon = (this.starterSelectGenIconContainers[this.lastSpecies.generation - 1].getAt(this.genSpecies[this.lastSpecies.generation - 1].indexOf(this.lastSpecies)) as Phaser.GameObjects.Sprite); - lastSpeciesIcon.setFrame(this.lastSpecies.getIconId(props.female, props.formIndex, props.shiny)); - this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE); - } + this.cursorObj.setPosition(148 + 18 * (cursor % 9), 10 + 18 * Math.floor(cursor / 9)); - this.lastSpecies = species; - - if (species && this.speciesStarterDexEntry?.caughtAttr) { - this.pokemonNumberText.setText(Utils.padInt(species.speciesId, 3)); - this.pokemonNameText.setText(species.name); - this.pokemonGrowthRateText.setText(Utils.toReadableString(GrowthRate[species.growthRate])); - this.pokemonGrowthRateText.setColor(getGrowthRateColor(species.growthRate)); - this.pokemonGrowthRateText.setShadowColor(getGrowthRateColor(species.growthRate, true)); - this.pokemonGrowthRateLabelText.setVisible(true); - this.pokemonAbilityLabelText.setVisible(true); - this.iconAnimHandler.addOrUpdate(this.starterSelectGenIconContainers[species.generation - 1].getAt(this.genSpecies[species.generation - 1].indexOf(species)) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.PASSIVE); - - const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species); - const props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); - - this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.abilityIndex); - } else { - this.pokemonNumberText.setText(Utils.padInt(0, 3)); - this.pokemonNameText.setText(species ? '???' : ''); - this.pokemonGrowthRateText.setText(''); - this.pokemonGrowthRateLabelText.setVisible(false); - this.pokemonAbilityLabelText.setVisible(false); - - this.setSpeciesDetails(species, false, 0, false, 0); - } - } - - setSpeciesDetails(species: PokemonSpecies, shiny: boolean, formIndex: integer, female: boolean, abilityIndex: integer): void { - const oldProps = species ? this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null; - this.dexAttrCursor = 0n; - - if (species) { - this.dexAttrCursor |= (shiny !== undefined ? !shiny : !(shiny = oldProps.shiny)) ? DexAttr.NON_SHINY : DexAttr.SHINY; - this.dexAttrCursor |= (female !== undefined ? !female : !(female = oldProps.female)) ? DexAttr.MALE : DexAttr.FEMALE; - this.dexAttrCursor |= (abilityIndex !== undefined ? !abilityIndex : !(abilityIndex = oldProps.abilityIndex)) ? DexAttr.ABILITY_1 : species.ability2 && abilityIndex === 1 ? DexAttr.ABILITY_2 : DexAttr.ABILITY_HIDDEN; - this.dexAttrCursor |= this.scene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps.formIndex)); - } - - this.pokemonSprite.setVisible(false); - - if (this.assetLoadCancelled) { - this.assetLoadCancelled.value = true; - this.assetLoadCancelled = null; - } - - if (species) { - const dexEntry = this.scene.gameData.dexData[species.speciesId]; - if (!dexEntry.caughtAttr) { - const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.scene.gameData.getSpeciesDefaultDexAttr(species)); - if (shiny === undefined || shiny !== props.shiny) - shiny = props.shiny; - if (formIndex === undefined || formIndex !== props.formIndex) - formIndex = props.formIndex; - if (female === undefined || female !== props.female) - female = props.female; - if (abilityIndex === undefined || abilityIndex !== props.abilityIndex) - abilityIndex = props.abilityIndex; - } - - if (this.speciesStarterDexEntry?.caughtAttr) { - const assetLoadCancelled = new Utils.BooleanHolder(false); - this.assetLoadCancelled = assetLoadCancelled; - - species.loadAssets(this.scene, female, formIndex, shiny, true).then(() => { - if (assetLoadCancelled.value) - return; - this.assetLoadCancelled = null; - this.speciesLoaded.set(species.speciesId, true); - this.pokemonSprite.play(species.getSpriteKey(female, formIndex, shiny)); - this.pokemonSprite.setVisible(!this.statsMode); - }); - - (this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite).setFrame(species.getIconId(female, formIndex, shiny)); - - this.canCycleShiny = !!(dexEntry.caughtAttr & DexAttr.NON_SHINY && dexEntry.caughtAttr & DexAttr.SHINY); - this.canCycleGender = !!(dexEntry.caughtAttr & DexAttr.MALE && dexEntry.caughtAttr & DexAttr.FEMALE); - this.canCycleAbility = [ dexEntry.caughtAttr & DexAttr.ABILITY_1, dexEntry.caughtAttr & DexAttr.ABILITY_2, dexEntry.caughtAttr & DexAttr.ABILITY_HIDDEN ].filter(a => a).length > 1; - this.canCycleForm = species.forms.filter(f => !f.formKey || f.formKey.indexOf(SpeciesFormKey.MEGA) === -1) - .map((_, f) => dexEntry.caughtAttr & this.scene.gameData.getFormAttr(f)).filter(a => a).length > 1; - } - - if (dexEntry.caughtAttr && species.malePercent !== null) { - const gender = !female ? Gender.MALE : Gender.FEMALE; - this.pokemonGenderText.setText(getGenderSymbol(gender)); - this.pokemonGenderText.setColor(getGenderColor(gender)); - this.pokemonGenderText.setShadowColor(getGenderColor(gender, true)); - } else - this.pokemonGenderText.setText(''); - - if (dexEntry.caughtAttr) { - const ability = this.lastSpecies.getAbility(abilityIndex); - this.pokemonAbilityText.setText(allAbilities[ability].name); - - const isHidden = ability === this.lastSpecies.abilityHidden; - this.pokemonAbilityText.setColor(getTextColor(!isHidden ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); - this.pokemonAbilityText.setShadowColor(getTextColor(!isHidden ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true)); - } else - this.pokemonAbilityText.setText(''); - } else { - this.pokemonGenderText.setText(''); - this.pokemonAbilityText.setText(''); - } + this.setSpecies(this.genSpecies[this.getGenCursorWithScroll()][cursor]); this.updateInstructions(); } - popStarter(): void { - this.starterGens.pop(); - this.starterCursors.pop(); - this.starterAttr.pop(); - this.starterCursorObjs[this.starterCursors.length].setVisible(false); - this.starterIcons[this.starterCursors.length].setTexture('pokemon_icons_0'); - this.starterIcons[this.starterCursors.length].setFrame('unknown'); - this.tryUpdateValue(); + return changed; + } + + getGenCursorWithScroll(): integer { + return this.genCursor !== undefined + ? this.genCursor + this.genScrollCursor + : undefined; + } + + updateGenOptions(): void { + let text = ''; + for (let g = this.genScrollCursor; g <= this.genScrollCursor + 4; g++) { + let optionText = gens[g]; + if (g === this.genScrollCursor && this.genScrollCursor) + optionText = '↑'; + else if (g === this.genScrollCursor + 4 && this.genScrollCursor < gens.length - 5) + optionText = '↓' + text += `${text ? '\n' : ''}${optionText}`; } + this.genOptionsText.setText(text); + } - tryUpdateValue(add?: integer): boolean { - const value = this.starterGens.reduce((total: integer, gen: integer, i: integer) => total += speciesStarterValues[this.genSpecies[gen][this.starterCursors[i]].speciesId], 0); - const newValue = value + (add || 0); - const overLimit = newValue > 10; - this.valueLimitLabel.setText(`${newValue}/10`); - this.valueLimitLabel.setColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_RED)); - this.valueLimitLabel.setShadowColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_RED, true)); - if (overLimit) { - this.scene.time.delayedCall(Utils.fixedInt(500), () => this.tryUpdateValue()); - return false; - } - this.value = newValue; - return true; - } + setGenMode(genMode: boolean): boolean { + this.genCursorObj.setVisible(genMode && !this.startCursorObj.visible); + this.cursorObj.setVisible(!genMode && !this.startCursorObj.visible); + + if (genMode !== this.genMode) { + this.genMode = genMode; - tryStart(): boolean { - if (!this.starterGens.length) - return false; - - const ui = this.getUi(); - - const cancel = () => { - ui.setMode(Mode.STARTER_SELECT); - this.popStarter(); - this.clearText(); - }; - - ui.showText('Begin with these Pokémon?', null, () => { - ui.setModeWithoutClear(Mode.CONFIRM, () => { - const startRun = (gameMode: GameMode) => { - this.scene.gameMode = gameMode; - ui.setMode(Mode.STARTER_SELECT); - const thisObj = this; - const originalStarterSelectCallback = this.starterSelectCallback; - this.starterSelectCallback = null; - originalStarterSelectCallback(new Array(this.starterGens.length).fill(0).map(function (_, i) { - const starterSpecies = thisObj.genSpecies[thisObj.starterGens[i]][thisObj.starterCursors[i]]; - return { - species: starterSpecies, - dexAttr: thisObj.starterAttr[i], - pokerus: !![ 0, 1, 2 ].filter(n => thisObj.pokerusGens[n] === starterSpecies.generation - 1 && thisObj.pokerusCursors[n] === thisObj.genSpecies[starterSpecies.generation - 1].indexOf(starterSpecies)).length - }; - })); - }; - if (this.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { - ui.setMode(Mode.STARTER_SELECT); - ui.showText('Select a game mode.', null, () => ui.setModeWithoutClear(Mode.GAME_MODE_SELECT, startRun, cancel)); - } else - startRun(GameMode.CLASSIC); - }, cancel); - }); + this.setCursor(genMode ? this.genCursor : this.cursor); + if (genMode) + this.setSpecies(null); return true; } - toggleStatsMode(on?: boolean): void { - if (on === undefined) - on = !this.statsMode; - if (on) { + return false; + } + + setSpecies(species: PokemonSpecies) { + this.speciesStarterDexEntry = species ? this.scene.gameData.dexData[species.speciesId] : null; + this.dexAttrCursor = species ? this.scene.gameData.getSpeciesDefaultDexAttr(species) : 0n; + + if (this.statsMode) { + if (this.speciesStarterDexEntry?.caughtAttr) { + this.statsContainer.setVisible(true); this.showStats(); - this.statsMode = true; - this.pokemonSprite.setVisible(false); } else { - this.statsMode = false; this.statsContainer.setVisible(false); - this.pokemonSprite.setVisible(!!this.speciesStarterDexEntry?.caughtAttr); this.statsContainer.updateIvs(null); } } - - showStats(): void { - if (!this.speciesStarterDexEntry) - return; - this.statsContainer.setVisible(true); - - this.statsContainer.updateIvs(this.speciesStarterDexEntry.ivs); + if (this.lastSpecies) { + const dexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(this.lastSpecies); + const props = this.scene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr); + const lastSpeciesIcon = (this.starterSelectGenIconContainers[this.lastSpecies.generation - 1].getAt(this.genSpecies[this.lastSpecies.generation - 1].indexOf(this.lastSpecies)) as Phaser.GameObjects.Sprite); + lastSpeciesIcon.setFrame(this.lastSpecies.getIconId(props.female, props.formIndex, props.shiny)); + this.iconAnimHandler.addOrUpdate(lastSpeciesIcon, PokemonIconAnimMode.NONE); } - clearText() { - this.starterSelectMessageBoxContainer.setVisible(false); - super.clearText(); + this.lastSpecies = species; + + if (species && this.speciesStarterDexEntry?.caughtAttr) { + this.pokemonNumberText.setText(Utils.padInt(species.speciesId, 3)); + this.pokemonNameText.setText(species.name); + this.pokemonGrowthRateText.setText(Utils.toReadableString(GrowthRate[species.growthRate])); + this.pokemonGrowthRateText.setColor(getGrowthRateColor(species.growthRate)); + this.pokemonGrowthRateText.setShadowColor(getGrowthRateColor(species.growthRate, true)); + this.pokemonGrowthRateLabelText.setVisible(true); + this.pokemonAbilityLabelText.setVisible(true); + this.iconAnimHandler.addOrUpdate(this.starterSelectGenIconContainers[species.generation - 1].getAt(this.genSpecies[species.generation - 1].indexOf(species)) as Phaser.GameObjects.Sprite, PokemonIconAnimMode.PASSIVE); + + const defaultDexAttr = this.scene.gameData.getSpeciesDefaultDexAttr(species); + const props = this.scene.gameData.getSpeciesDexAttrProps(species, defaultDexAttr); + + this.setSpeciesDetails(species, props.shiny, props.formIndex, props.female, props.abilityIndex); + } else { + this.pokemonNumberText.setText(Utils.padInt(0, 3)); + this.pokemonNameText.setText(species ? '???' : ''); + this.pokemonGrowthRateText.setText(''); + this.pokemonGrowthRateLabelText.setVisible(false); + this.pokemonAbilityLabelText.setVisible(false); + + this.setSpeciesDetails(species, false, 0, false, 0); } + } + + setSpeciesDetails(species: PokemonSpecies, shiny: boolean, formIndex: integer, female: boolean, abilityIndex: integer): void { + const oldProps = species ? this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor) : null; + this.dexAttrCursor = 0n; + + if (species) { + this.dexAttrCursor |= (shiny !== undefined ? !shiny : !(shiny = oldProps.shiny)) ? DexAttr.NON_SHINY : DexAttr.SHINY; + this.dexAttrCursor |= (female !== undefined ? !female : !(female = oldProps.female)) ? DexAttr.MALE : DexAttr.FEMALE; + this.dexAttrCursor |= (abilityIndex !== undefined ? !abilityIndex : !(abilityIndex = oldProps.abilityIndex)) ? DexAttr.ABILITY_1 : species.ability2 && abilityIndex === 1 ? DexAttr.ABILITY_2 : DexAttr.ABILITY_HIDDEN; + this.dexAttrCursor |= this.scene.gameData.getFormAttr(formIndex !== undefined ? formIndex : (formIndex = oldProps.formIndex)); + } + + this.pokemonSprite.setVisible(false); + + if (this.assetLoadCancelled) { + this.assetLoadCancelled.value = true; + this.assetLoadCancelled = null; + } + + if (species) { + const dexEntry = this.scene.gameData.dexData[species.speciesId]; + if (!dexEntry.caughtAttr) { + const props = this.scene.gameData.getSpeciesDexAttrProps(species, this.scene.gameData.getSpeciesDefaultDexAttr(species)); + if (shiny === undefined || shiny !== props.shiny) + shiny = props.shiny; + if (formIndex === undefined || formIndex !== props.formIndex) + formIndex = props.formIndex; + if (female === undefined || female !== props.female) + female = props.female; + if (abilityIndex === undefined || abilityIndex !== props.abilityIndex) + abilityIndex = props.abilityIndex; + } + + if (this.speciesStarterDexEntry?.caughtAttr) { + const assetLoadCancelled = new Utils.BooleanHolder(false); + this.assetLoadCancelled = assetLoadCancelled; + + species.loadAssets(this.scene, female, formIndex, shiny, true).then(() => { + if (assetLoadCancelled.value) + return; + this.assetLoadCancelled = null; + this.speciesLoaded.set(species.speciesId, true); + this.pokemonSprite.play(species.getSpriteKey(female, formIndex, shiny)); + this.pokemonSprite.setVisible(!this.statsMode); + }); + + (this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite).setFrame(species.getIconId(female, formIndex, shiny)); + + this.canCycleShiny = !!(dexEntry.caughtAttr & DexAttr.NON_SHINY && dexEntry.caughtAttr & DexAttr.SHINY); + this.canCycleGender = !!(dexEntry.caughtAttr & DexAttr.MALE && dexEntry.caughtAttr & DexAttr.FEMALE); + this.canCycleAbility = [ dexEntry.caughtAttr & DexAttr.ABILITY_1, dexEntry.caughtAttr & DexAttr.ABILITY_2, dexEntry.caughtAttr & DexAttr.ABILITY_HIDDEN ].filter(a => a).length > 1; + this.canCycleForm = species.forms.filter(f => !f.formKey || f.formKey.indexOf(SpeciesFormKey.MEGA) === -1) + .map((_, f) => dexEntry.caughtAttr & this.scene.gameData.getFormAttr(f)).filter(a => a).length > 1; + } + + if (dexEntry.caughtAttr && species.malePercent !== null) { + const gender = !female ? Gender.MALE : Gender.FEMALE; + this.pokemonGenderText.setText(getGenderSymbol(gender)); + this.pokemonGenderText.setColor(getGenderColor(gender)); + this.pokemonGenderText.setShadowColor(getGenderColor(gender, true)); + } else + this.pokemonGenderText.setText(''); + + if (dexEntry.caughtAttr) { + const ability = this.lastSpecies.getAbility(abilityIndex); + this.pokemonAbilityText.setText(allAbilities[ability].name); + + const isHidden = ability === this.lastSpecies.abilityHidden; + this.pokemonAbilityText.setColor(getTextColor(!isHidden ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); + this.pokemonAbilityText.setShadowColor(getTextColor(!isHidden ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true)); + } else + this.pokemonAbilityText.setText(''); + } else { + this.pokemonGenderText.setText(''); + this.pokemonAbilityText.setText(''); + } + + this.updateInstructions(); + } + + popStarter(): void { + this.starterGens.pop(); + this.starterCursors.pop(); + this.starterAttr.pop(); + this.starterCursorObjs[this.starterCursors.length].setVisible(false); + this.starterIcons[this.starterCursors.length].setTexture('pokemon_icons_0'); + this.starterIcons[this.starterCursors.length].setFrame('unknown'); + this.tryUpdateValue(); + } + + tryUpdateValue(add?: integer): boolean { + const value = this.starterGens.reduce((total: integer, gen: integer, i: integer) => total += speciesStarterValues[this.genSpecies[gen][this.starterCursors[i]].speciesId], 0); + const newValue = value + (add || 0); + const overLimit = newValue > 10; + this.valueLimitLabel.setText(`${newValue}/10`); + this.valueLimitLabel.setColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_RED)); + this.valueLimitLabel.setShadowColor(getTextColor(!overLimit ? TextStyle.TOOLTIP_CONTENT : TextStyle.SUMMARY_RED, true)); + if (overLimit) { + this.scene.time.delayedCall(Utils.fixedInt(500), () => this.tryUpdateValue()); + return false; + } + this.value = newValue; + return true; + } + + tryStart(): boolean { + if (!this.starterGens.length) + return false; + + const ui = this.getUi(); + + const cancel = () => { + ui.setMode(Mode.STARTER_SELECT); + this.popStarter(); + this.clearText(); + }; + + ui.showText('Begin with these Pokémon?', null, () => { + ui.setModeWithoutClear(Mode.CONFIRM, () => { + const startRun = (gameMode: GameMode) => { + this.scene.gameMode = gameMode; + ui.setMode(Mode.STARTER_SELECT); + const thisObj = this; + const originalStarterSelectCallback = this.starterSelectCallback; + this.starterSelectCallback = null; + originalStarterSelectCallback(new Array(this.starterGens.length).fill(0).map(function (_, i) { + const starterSpecies = thisObj.genSpecies[thisObj.starterGens[i]][thisObj.starterCursors[i]]; + return { + species: starterSpecies, + dexAttr: thisObj.starterAttr[i], + pokerus: !![ 0, 1, 2 ].filter(n => thisObj.pokerusGens[n] === starterSpecies.generation - 1 && thisObj.pokerusCursors[n] === thisObj.genSpecies[starterSpecies.generation - 1].indexOf(starterSpecies)).length + }; + })); + }; + if (this.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]) { + ui.setMode(Mode.STARTER_SELECT); + ui.showText('Select a game mode.', null, () => ui.setModeWithoutClear(Mode.GAME_MODE_SELECT, startRun, cancel)); + } else + startRun(GameMode.CLASSIC); + }, cancel); + }); + + return true; + } + + toggleStatsMode(on?: boolean): void { + if (on === undefined) + on = !this.statsMode; + if (on) { + this.showStats(); + this.statsMode = true; + this.pokemonSprite.setVisible(false); + } else { + this.statsMode = false; + this.statsContainer.setVisible(false); + this.pokemonSprite.setVisible(!!this.speciesStarterDexEntry?.caughtAttr); + this.statsContainer.updateIvs(null); + } + } - clear(): void { - super.clear(); - this.cursor = -1; - this.starterSelectContainer.setVisible(false); + showStats(): void { + if (!this.speciesStarterDexEntry) + return; - while (this.starterCursors.length) - this.popStarter(); + this.statsContainer.setVisible(true); - if (this.statsMode) - this.toggleStatsMode(false); - } - } \ No newline at end of file + this.statsContainer.updateIvs(this.speciesStarterDexEntry.ivs); + } + + clearText() { + this.starterSelectMessageBoxContainer.setVisible(false); + super.clearText(); + } + + clear(): void { + super.clear(); + this.cursor = -1; + this.starterSelectContainer.setVisible(false); + + while (this.starterCursors.length) + this.popStarter(); + + if (this.statsMode) + this.toggleStatsMode(false); + } +} \ No newline at end of file diff --git a/src/ui/stats-container.ts b/src/ui/stats-container.ts index a22941956..e53840d20 100644 --- a/src/ui/stats-container.ts +++ b/src/ui/stats-container.ts @@ -1,19 +1,24 @@ +import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; import BattleScene from "../battle-scene"; import { Stat, getStatName } from "../data/pokemon-stat"; -import { TextStyle, addTextObject } from "./text"; +import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; +import { Gender, getGenderColor } from "../data/gender"; const ivChartSize = 24; const ivChartStatCoordMultipliers = [ [ 0, 1 ], [ 0.825, 0.5 ], [ 0.825, -0.5 ], [ 0, -1 ], [ -0.825, -0.5 ], [ -0.825, 0.5 ] ]; const defaultIvChartData = new Array(12).fill(null).map(() => 0); export class StatsContainer extends Phaser.GameObjects.Container { + private showDiff: boolean; private statsIvsCache: integer[]; private ivChart: Phaser.GameObjects.Polygon; - private ivStatValueTexts: Phaser.GameObjects.Text[]; + private ivStatValueTexts: BBCodeText[]; - constructor(scene: BattleScene, x: number, y: number) { + constructor(scene: BattleScene, x: number, y: number, showDiff?: boolean) { super(scene, x, y); + this.showDiff = !!showDiff; + this.setup(); } @@ -48,7 +53,7 @@ export class StatsContainer extends Phaser.GameObjects.Container { const statLabel = addTextObject(this.scene, ivChartBg.x + (ivChartSize) * ivChartStatCoordMultipliers[i][0] * 1.325, ivChartBg.y + (ivChartSize) * ivChartStatCoordMultipliers[i][1] * 1.325 - 4, getStatName(i as Stat), TextStyle.TOOLTIP_CONTENT); statLabel.setOrigin(0.5); - this.ivStatValueTexts[i] = addTextObject(this.scene, statLabel.x, statLabel.y + 8, '0', TextStyle.TOOLTIP_CONTENT); + this.ivStatValueTexts[i] = addBBCodeTextObject(this.scene, statLabel.x, statLabel.y + 8, '0', TextStyle.TOOLTIP_CONTENT); this.ivStatValueTexts[i].setOrigin(0.5) this.add(statLabel); @@ -56,13 +61,22 @@ export class StatsContainer extends Phaser.GameObjects.Container { }); } - updateIvs(ivs: integer[]): void { + updateIvs(ivs: integer[], originalIvs?: integer[]): void { if (ivs) { const ivChartData = new Array(6).fill(null).map((_, i) => [ (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][0], (ivs[i] / 31) * ivChartSize * ivChartStatCoordMultipliers[i][1] ] ).flat(); const lastIvChartData = this.statsIvsCache || defaultIvChartData; this.statsIvsCache = ivChartData.slice(0); - this.ivStatValueTexts.map((t: Phaser.GameObjects.Text, i: integer) => t.setText(ivs[i].toString())); + this.ivStatValueTexts.map((t: BBCodeText, i: integer) => { + let label = ivs[i].toString(); + if (this.showDiff && originalIvs) { + if (originalIvs[i] < ivs[i]) + label += ` ([color=${getGenderColor(Gender.MALE)}]+${ivs[i] - originalIvs[i]}[/color])`; + else + label += ' (-)'; + } + t.setText(`[shadow]${label}[/shadow]`); + }); this.scene.tweens.addCounter({ from: 0, diff --git a/src/ui/text.ts b/src/ui/text.ts index 9b31bf6e3..43942c6aa 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -1,3 +1,5 @@ +import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; + export enum TextStyle { MESSAGE, WINDOW, @@ -14,7 +16,32 @@ export enum TextStyle { TOOLTIP_CONTENT }; -export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle) { +export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text { + const [ styleOptions, shadowColor, shadowSize ] = getTextStyleOptions(style, extraStyleOptions); + + const ret = scene.add.text(x, y, content, styleOptions); + ret.setScale(0.1666666667); + ret.setShadow(shadowSize, shadowSize, shadowColor); + if (!styleOptions.lineSpacing) + ret.setLineSpacing(5); + + return ret; +} + +export function addBBCodeTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): BBCodeText { + const [ styleOptions, shadowColor, shadowSize ] = getTextStyleOptions(style, extraStyleOptions); + + const ret = new BBCodeText(scene, x, y, content, styleOptions as BBCodeText.TextStyle); + scene.add.existing(ret); + ret.setScale(0.1666666667); + ret.setShadow(shadowSize, shadowSize, shadowColor); + if (!styleOptions.lineSpacing) + ret.setLineSpacing(5); + + return ret; +} + +function getTextStyleOptions(style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): [ Phaser.Types.GameObjects.Text.TextStyle, string, integer ] { let shadowColor: string; let shadowSize = 6; @@ -64,16 +91,10 @@ export function addTextObject(scene: Phaser.Scene, x: number, y: number, content styleOptions = Object.assign(styleOptions, extraStyleOptions); } - const ret = scene.add.text(x, y, content, styleOptions); - ret.setScale(0.1666666667); - ret.setShadow(shadowSize, shadowSize, shadowColor); - if (!styleOptions.lineSpacing) - ret.setLineSpacing(5); - - return ret; + return [ styleOptions, shadowColor, shadowSize ]; } -export function getTextColor(textStyle: TextStyle, shadow?: boolean) { +export function getTextColor(textStyle: TextStyle, shadow?: boolean): string { switch (textStyle) { case TextStyle.MESSAGE: return !shadow ? '#f8f8f8' : '#6b5a73'; diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 24b816d03..0d36bdba1 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -21,6 +21,10 @@ import MenuUiHandler from './menu-ui-handler'; import AchvsUiHandler from './achvs-ui-handler'; import OptionSelectUiHandler from './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 VouchersUiHandler from './vouchers-ui-handler'; +import VoucherBar from './voucher-bar'; export enum Mode { MESSAGE, @@ -40,7 +44,10 @@ export enum Mode { GAME_MODE_SELECT, MENU, SETTINGS, - ACHIEVEMENTS + ACHIEVEMENTS, + VOUCHERS, + EGG_LIST, + EGG_GACHA }; const transitionModes = [ @@ -48,7 +55,9 @@ const transitionModes = [ Mode.SUMMARY, Mode.STARTER_SELECT, Mode.EVOLUTION_SCENE, - Mode.EGG_HATCH_SCENE + Mode.EGG_HATCH_SCENE, + Mode.EGG_LIST, + Mode.EGG_GACHA ]; const noTransitionModes = [ @@ -56,7 +65,9 @@ const noTransitionModes = [ Mode.OPTION_SELECT, Mode.GAME_MODE_SELECT, Mode.MENU, - Mode.SETTINGS + Mode.SETTINGS, + Mode.ACHIEVEMENTS, + Mode.VOUCHERS ]; export default class UI extends Phaser.GameObjects.Container { @@ -65,6 +76,7 @@ export default class UI extends Phaser.GameObjects.Container { private handlers: UiHandler[]; private overlay: Phaser.GameObjects.Rectangle; public achvBar: AchvBar; + public voucherBar: VoucherBar; private tooltipContainer: Phaser.GameObjects.Container; private tooltipBg: Phaser.GameObjects.NineSlice; @@ -96,7 +108,10 @@ export default class UI extends Phaser.GameObjects.Container { new GameModeSelectUiHandler(scene), new MenuUiHandler(scene), new SettingsUiHandler(scene), - new AchvsUiHandler(scene) + new AchvsUiHandler(scene), + new VouchersUiHandler(scene), + new EggListUiHandler(scene), + new EggGachaUiHandler(scene) ]; } @@ -110,7 +125,8 @@ export default class UI extends Phaser.GameObjects.Container { this.setupTooltip(); this.achvBar = new AchvBar(this.scene as BattleScene); - this.achvBar.setup(); + this.achvBar.setup(); + (this.scene as BattleScene).uiContainer.add(this.achvBar); } @@ -267,8 +283,9 @@ export default class UI extends Phaser.GameObjects.Container { } resolve(); }; - if ((transitionModes.indexOf(this.mode) > -1 || transitionModes.indexOf(mode) > -1) - && (noTransitionModes.indexOf(this.mode) === -1 && noTransitionModes.indexOf(mode) === -1) && !(this.scene as BattleScene).auto) { + if (((!chainMode && ((transitionModes.indexOf(this.mode) > -1 || transitionModes.indexOf(mode) > -1) + && (noTransitionModes.indexOf(this.mode) === -1 && noTransitionModes.indexOf(mode) === -1))) + || (chainMode && noTransitionModes.indexOf(mode) === -1)) && !(this.scene as BattleScene).auto) { this.fadeOut(250).then(() => { this.scene.time.delayedCall(100, () => { doSetMode(); @@ -300,12 +317,29 @@ export default class UI extends Phaser.GameObjects.Container { return this.setModeInternal(mode, false, false, true, args); } - revertMode(): boolean { - if (!this.modeChain.length) - return false; - - this.getHandler().clear(); - this.mode = this.modeChain.pop(); - return true; + revertMode(): Promise { + return new Promise(resolve => { + if (!this.modeChain.length) + return resolve(false); + + const lastMode = this.mode; + + const doRevertMode = () => { + this.getHandler().clear(); + this.mode = this.modeChain.pop(); + }; + + if (noTransitionModes.indexOf(lastMode) === -1) { + this.fadeOut(250).then(() => { + this.scene.time.delayedCall(100, () => { + doRevertMode(); + this.fadeIn(250); + }); + }); + } else + doRevertMode(); + + resolve(true); + }); } } \ No newline at end of file diff --git a/src/ui/vouchers-ui-handler.ts b/src/ui/vouchers-ui-handler.ts new file mode 100644 index 000000000..a8d0421cc --- /dev/null +++ b/src/ui/vouchers-ui-handler.ts @@ -0,0 +1,196 @@ +import BattleScene, { Button } from "../battle-scene"; +import { Voucher, getVoucherTypeIcon, getVoucherTypeName, vouchers } from "../system/voucher"; +import MessageUiHandler from "./message-ui-handler"; +import { TextStyle, addTextObject } from "./text"; +import { Mode } from "./ui"; + +export default class VouchersUiHandler extends MessageUiHandler { + private vouchersContainer: Phaser.GameObjects.Container; + private voucherIconsContainer: Phaser.GameObjects.Container; + + private voucherIconsBg: Phaser.GameObjects.NineSlice; + private voucherIcons: Phaser.GameObjects.Sprite[]; + private titleText: Phaser.GameObjects.Text; + private unlockText: Phaser.GameObjects.Text; + + private cursorObj: Phaser.GameObjects.NineSlice; + + constructor(scene: BattleScene, mode?: Mode) { + super(scene, mode); + } + + setup() { + const ui = this.getUi(); + + this.vouchersContainer = this.scene.add.container(1, -(this.scene.game.canvas.height / 6) + 1); + + this.vouchersContainer.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.scene.game.canvas.width / 6, this.scene.game.canvas.height / 6), Phaser.Geom.Rectangle.Contains); + + const headerBg = this.scene.add.nineslice(0, 0, 'window', null, (this.scene.game.canvas.width / 6) - 2, 24, 6, 6, 6, 6); + headerBg.setOrigin(0, 0); + + const headerText = addTextObject(this.scene, 0, 0, 'Vouchers', TextStyle.SETTINGS_LABEL); + headerText.setOrigin(0, 0); + headerText.setPositionRelative(headerBg, 8, 4); + + this.voucherIconsBg = this.scene.add.nineslice(0, headerBg.height, 'window', null, (this.scene.game.canvas.width / 6) - 2, (this.scene.game.canvas.height / 6) - headerBg.height - 68, 6, 6, 6, 6); + this.voucherIconsBg.setOrigin(0, 0); + + this.voucherIconsContainer = this.scene.add.container(6, headerBg.height + 6); + + this.voucherIcons = []; + + for (let a = 0; a < Object.keys(vouchers).length; a++) { + const x = (a % 17) * 18; + const y = Math.floor(a / 17) * 18; + + const icon = this.scene.add.sprite(x, y, 'items', 'unknown'); + icon.setOrigin(0, 0); + icon.setScale(0.5); + + this.voucherIcons.push(icon); + this.voucherIconsContainer.add(icon); + } + + const titleBg = this.scene.add.nineslice(0, headerBg.height + this.voucherIconsBg.height, 'window', null, 220, 24, 6, 6, 6, 6); + titleBg.setOrigin(0, 0); + + this.titleText = addTextObject(this.scene, 0, 0, '', TextStyle.WINDOW); + this.titleText.setOrigin(0, 0); + this.titleText.setPositionRelative(titleBg, 8, 4); + + const unlockBg = this.scene.add.nineslice(titleBg.x + titleBg.width, titleBg.y, 'window', null, 98, 24, 6, 6, 6, 6); + unlockBg.setOrigin(0, 0); + + this.unlockText = addTextObject(this.scene, 0, 0, '', TextStyle.WINDOW); + this.unlockText.setOrigin(0, 0); + this.unlockText.setPositionRelative(unlockBg, 8, 4); + + const descriptionBg = this.scene.add.nineslice(0, titleBg.y + titleBg.height, 'window', null, (this.scene.game.canvas.width / 6) - 2, 42, 6, 6, 6, 6); + descriptionBg.setOrigin(0, 0); + + const descriptionText = addTextObject(this.scene, 0, 0, '', TextStyle.WINDOW, { maxLines: 2 }); + descriptionText.setWordWrapWidth(1870); + descriptionText.setOrigin(0, 0); + descriptionText.setPositionRelative(descriptionBg, 8, 4); + + this.message = descriptionText; + + this.vouchersContainer.add(headerBg); + this.vouchersContainer.add(headerText); + this.vouchersContainer.add(this.voucherIconsBg); + this.vouchersContainer.add(this.voucherIconsContainer); + this.vouchersContainer.add(titleBg); + this.vouchersContainer.add(this.titleText); + this.vouchersContainer.add(unlockBg); + this.vouchersContainer.add(this.unlockText); + this.vouchersContainer.add(descriptionBg); + this.vouchersContainer.add(descriptionText); + + ui.add(this.vouchersContainer); + + this.setCursor(0); + + this.vouchersContainer.setVisible(false); + } + + show(args: any[]) { + super.show(args); + + const voucherUnlocks = this.scene.gameData.voucherUnlocks; + + Object.values(vouchers).forEach((voucher: Voucher, i: integer) => { + const icon = this.voucherIcons[i]; + const unlocked = voucherUnlocks.hasOwnProperty(voucher.id); + + icon.setFrame(getVoucherTypeIcon(voucher.voucherType)); + if (!unlocked) + icon.setTintFill(0); + else + icon.clearTint(); + }); + + this.vouchersContainer.setVisible(true); + this.setCursor(0); + + this.getUi().moveTo(this.vouchersContainer, this.getUi().length - 1); + + this.getUi().hideTooltip(); + } + + protected showVoucher(voucher: Voucher) { + const voucherUnlocks = this.scene.gameData.voucherUnlocks; + const unlocked = voucherUnlocks.hasOwnProperty(voucher.id); + + this.titleText.setText(getVoucherTypeName(voucher.voucherType)); + this.showText(voucher.description); + this.unlockText.setText(unlocked ? new Date(voucherUnlocks[voucher.id]).toLocaleDateString() : 'Locked'); + } + + processInput(button: Button): boolean { + const ui = this.getUi(); + + let success = false; + + if (button === Button.CANCEL) { + success = true; + this.scene.ui.revertMode(); + } else { + switch (button) { + case Button.UP: + if (this.cursor >= 17) + success = this.setCursor(this.cursor - 17); + break; + case Button.DOWN: + if (this.cursor + 17 < Object.keys(vouchers).length) + success = this.setCursor(this.cursor + 17); + break; + case Button.LEFT: + if (this.cursor) + success = this.setCursor(this.cursor - 1); + break; + case Button.RIGHT: + if (this.cursor < Object.keys(vouchers).length - 1) + success = this.setCursor(this.cursor + 1); + break; + } + } + + if (success) + ui.playSelect(); + + return success; + } + + setCursor(cursor: integer): boolean { + let ret = super.setCursor(cursor); + + let updateVoucher = ret; + + if (!this.cursorObj) { + this.cursorObj = this.scene.add.nineslice(0, 0, 'starter_select_cursor_highlight', null, 16, 16, 1, 1, 1, 1); + this.cursorObj.setOrigin(0, 0); + this.voucherIconsContainer.add(this.cursorObj); + updateVoucher = true; + } + + this.cursorObj.setPositionRelative(this.voucherIcons[this.cursor], 0, 0); + + if (updateVoucher) + this.showVoucher(vouchers[Object.keys(vouchers)[cursor]]); + + return ret; + } + + clear() { + super.clear(); + this.vouchersContainer.setVisible(false); + this.eraseCursor(); + } + + eraseCursor() { + if (this.cursorObj) + this.cursorObj.destroy(); + this.cursorObj = null; + } +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts index fbc384ff6..a9c10a354 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -76,6 +76,13 @@ export function randIntRange(min: integer, max: integer): integer { return randInt(max - min, min); } +export function getSunday(date: Date): Date { + const day = date.getDay(), + diff = date.getDate() - day; + const newDate = new Date(date.setDate(diff)); + return new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate()); +} + export function getFrameMs(frameCount: integer): integer { return Math.floor((1 / 60) * 1000 * frameCount); }